---
title: "LlamaIndex · Scrape.ly Docs"
description: "Run Actors or read datasets as LlamaIndex documents."
url: https://scrape.ly/docs/llama-index
markdown: https://scrape.ly/docs/llama-index.md
---

# LlamaIndex

> Run Actors or read datasets as LlamaIndex documents.

The `llama-index-readers-scrapely` package has two [LlamaIndex](https://www.llamaindex.ai) readers: one runs an Actor and returns its results as documents, the other reads a dataset that already exists. Python 3.11 or newer.

```bash
pip install llama-index-readers-scrapely
export SCRAPELY_TOKEN=your-api-key
```

Create the API key in the [dashboard](https://my.scrape.ly) under **Settings → API keys**. Both readers read it from `SCRAPELY_TOKEN`, or take it as `scrapely_token=...`. A scoped key needs `actors:run`, `runs:read`, and `datasets:read`. See [API keys & permissions](https://scrape.ly/docs/api-keys.md).

The package is on [PyPI](https://pypi.org/project/llama-index-readers-scrapely/), and its source code is on GitHub: [scrapely-app/llama-index-readers-scrapely](https://github.com/scrapely-app/llama-index-readers-scrapely).

## Run an Actor

```python
from llama_index.core import Document, VectorStoreIndex
from llama_index.readers.scrapely import ScrapelyActor

docs = ScrapelyActor().load_data(
    actor_id='username/actor-name',
    run_input={'startUrls': [{'url': 'https://example.com'}]},
    dataset_mapping_function=lambda item: Document(
        text=item.get('text') or '', metadata={'url': item.get('url')}
    ),
)

index = VectorStoreIndex.from_documents(docs)
index.as_query_engine().query('What does the site say about pricing?')
```

The index and query engine use OpenAI by default: `pip install llama-index` (or `llama-index-embeddings-openai llama-index-llms-openai`) and set `OPENAI_API_KEY`.

`load_data` waits for the run to finish. `build`, `memory_mbytes`, and `timeout_secs` set the run options. A run that doesn't succeed raises `RuntimeError` with its status.

## Read an existing dataset

```python
from llama_index.readers.scrapely import ScrapelyDataset

docs = ScrapelyDataset().load_data(
    dataset_id='YOUR_DATASET_ID',
    dataset_mapping_function=lambda item: Document(text=item.get('text') or ''),
)
```

`dataset_mapping_function` decides how each result becomes a `Document`, and must return one.

---

- Previous: [LangGraph](https://scrape.ly/docs/langgraph.md)
- Next: [Account & billing](https://scrape.ly/docs/account.md)
- All docs: [Docs index](https://scrape.ly/docs.md), [llms.txt](https://scrape.ly/llms.txt)
