langchain-scrapely
LangChain and LangGraph integration for Scrape.ly: run Actors, load their results as documents for RAG, and give agents Scrape.ly tools.
pip install langchain-scrapely
export SCRAPELY_TOKEN=your-api-key
Create an API key in the Scrape.ly dashboard under Settings → API keys. Everything below reads it from SCRAPELY_TOKEN, or takes it as scrapely_token=....
Load results as documents
ScrapelyWrapper runs an Actor, waits for it to finish, and returns a loader for its results. You decide how each result becomes a Document.
from langchain_core.documents import Document
from langchain_scrapely import ScrapelyWrapper
loader = ScrapelyWrapper().call_actor(
actor_id='username/actor-name',
run_input={'startUrls': [{'url': 'https://example.com'}]},
dataset_mapping_function=lambda item: Document(
page_content=item.get('text') or '', metadata={'source': item.get('url')}
),
)
docs = loader.load()
call_actor_task(task_id, task_input, ...)runs a saved task instead. Fields intask_inputoverride its saved input.acall_actorandacall_actor_taskare the async versions.build,memory_mbytesandtimeout_secsset the run options.- A run that does not succeed raises
RuntimeError.
To load results that already exist, use ScrapelyDatasetLoader:
from langchain_scrapely import ScrapelyDatasetLoader
loader = ScrapelyDatasetLoader(
dataset_id='YOUR_DATASET_ID',
dataset_mapping_function=lambda item: Document(page_content=item.get('text') or ''),
)
docs = loader.load() # or lazy_load(), aload(), alazy_load()
Tools for agents
Any Actor as a tool
ScrapelyActorsTool turns one Actor into a tool. Its name, description and input come from the Actor, so the agent knows what it does and how to fill in its input.
from langchain_scrapely import ScrapelyActorsTool
tool = ScrapelyActorsTool('username/actor-name')
result = tool.invoke({'run_input': {'query': 'coffee shops in Berlin'}})
General tools
| Tool | Name | What it does |
|---|---|---|
ScrapelyRunActorTool |
scrapely_run_actor |
Runs an Actor and returns the run, including its dataset_id. |
ScrapelyRunActorAndGetDatasetTool |
scrapely_run_actor_and_get_dataset |
Runs an Actor and returns its results. |
ScrapelyGetDatasetItemsTool |
scrapely_get_dataset_items |
Reads items from a dataset. |
ScrapelyRunTaskTool |
scrapely_run_task |
Runs a saved task and returns the run. |
ScrapelyRunTaskAndGetDatasetTool |
scrapely_run_task_and_get_dataset |
Runs a saved task and returns its results. |
SCRAPELY_CORE_TOOLS holds all five as classes:
from langchain_scrapely import SCRAPELY_CORE_TOOLS
tools = [cls() for cls in SCRAPELY_CORE_TOOLS]
The tools that return results answer with JSON: {"run": {id, status, status_message, dataset_id, started_at, finished_at}, "items": [...]}. scrapely_run_actor and scrapely_run_task return only run, and scrapely_get_dataset_items returns "run": null. Errors, including invalid arguments, go back to the agent as text instead of stopping it.
Limits on what the agent may ask for, set when you create a tool:
| Option | Default | What it limits |
|---|---|---|
max_timeout_secs |
600 |
Longest run the agent may start. |
max_memory_mbytes |
32768 |
Most memory per run. Requests are rounded down to a power of two; anything under 128 MB gets 128 MB. |
max_items |
1000 |
Most results returned at once. |
With LangGraph
create_agent builds a LangGraph agent. It is in the langchain package, and the model below needs langchain-openai (pip install langchain langchain-openai):
from langchain.agents import create_agent
from langchain_scrapely import ScrapelyActorsTool, ScrapelyGetDatasetItemsTool
agent = create_agent(
'openai:gpt-4o',
tools=[ScrapelyActorsTool('username/actor-name'), ScrapelyGetDatasetItemsTool()],
)
agent.invoke({'messages': [{'role': 'user', 'content': 'Find the top coffee shops in Berlin'}]})
Give an agent only the tools it needs: fewer tools means better choices and fewer tokens.
Docs
scrape.ly/docs/langchain and scrape.ly/docs/langgraph.
License
Metadata
Release files for langchain-scrapely 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| langchain_scrapely-0.1.0.tar.gz | 9.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langchain_scrapely-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.5 kB
Release files / langchain_scrapely-0.1.0.tar.gz
| Download URL | langchain_scrapely-0.1.0.tar.gz |
|---|---|
| Size | 9.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
db40806f203133effc5ae53ee5fc5fcd72b6862c391b43646f7f1c1db396602d
|
|
BLAKE2b-256 checksum How to use checksums |
3b6e831cbe2cb61500757e7ed2e6f4da3c74fe829d8960a3ec49986421aac8e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / langchain_scrapely-0.1.0-py3-none-any.whl
| Download URL | langchain_scrapely-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6303ceef36d3445eef3c0c6d4c40f3ce58b47c6aef470ee2ce2e44b2f68ebad1
|
|
BLAKE2b-256 checksum How to use checksums |
b192530e3e08095811e4b97c72e25af84b7ca113e372762dc0c10ada7262fc0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for langchain-scrapely 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.