Your agent is now
a scraping engineer
Ask in plain language. The agent works out the most efficient way to read each page, clears the anti-bot layer, validates its own output — and hands you structured data. 26 tools for Claude, Cursor and every MCP client.
One config block.
Any MCP client.
Hosted and remote — nothing to install. Point your client at the server, pass your x-api-key, and all 26 tools show up in the next message.
Paste one server block
Add the entry, restart Claude, and all 26 tools appear in the tool tray on the next message.
{
"mcpServers": {
"jetscrape": {
"url": "https://mcp.jetscrape.com/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
}
}26 tools across
seven categories
Typed, described and rate-aware, so the model picks the right one without prompting tricks. Discovery and extraction sit up front; templates, routines and jobs make the work repeatable.
The engine: structured extraction through Cloudflare, anti-bot and JS rendering.
Map how a page loads its content, then take the lightest route to the data.
Turn a plain-language description into a validated extraction schema.
Save working selectors as named, reusable templates — bulk URLs included.
Async dispatch with live progress, ETA and one-call reruns of any saved job.
Run shared flows and single nodes by id — with per-call overrides.
Semantic search over the docs so a stuck agent unblocks itself. No API key needed.
From one sentence
to structured data
Four hops. The agent picks the cheap path, proves the data is real, and saves the job for next time.
"pull the product names and prices from shop.example.com" // no selectors // no schema // no code
{
"url": "shop.example.com/search?q=coffee",
"actions": ["scroll", "wait"]
}
→ lightest source selected
content-type: application/json
size: 2.8 KB{
"url": "<mapped source>",
"selectors": [
{ "name": "$.products[*].name" },
{ "name": "$.products[*].price",
"transform": "regex:[0-9,.]+" }
]
}{
"rows": 148,
"diagnostics": {
"empty_fields": [],
"length_mismatch": []
},
"saved": { "routine": "rtn_7f21c" }
}Built for agents that
run unattended
Stop parsing heavy pages. Read the data light.
discover_api_endpoints opens the page in a real browser and maps how it loads its content — scroll, click and form actions included, so lazy-loaded data shows up too. Measured against rendering the full page: 0.66s / 2.8 KB versus 7.82s / 5.9 KB.
How discovery works →{
"url": "shop.example.com/list",
"actions": ["scroll", "click:.tab-reviews"]
}
→ 3 data sources mapped
search results 2.8 KB json
reviews 1.1 KB json
analytics — skipped
// 11.8× cheaper than a full renderDescribe the fields. Get the schema.
generate_schema turns "product name, price, pre-discount price" into a validated JSON schema, and ai_scrape extracts against it. Nobody writes a CSS selector — and feedback loops refine the schema in place.
See ai_scrape →// generate_schema
"product name, price, pre-discount price"
→ {
"name": "string",
"price": "number",
"listPrice": "number"
}
// ai_scrape(url, schema) → rowsIt catches the empty-data trap itself.
The classic scraping failure is a 200 OK full of nothing. Every response ships a diagnostics block listing empty fields and list-length mismatches, so the agent fixes the selector and retries — no human in the loop.
Read about diagnostics →"diagnostics": {
"empty_fields": ["listPrice"],
"length_mismatch": [
{ "field": "reviews", "got": 0, "want": 20 }
]
}
// agent repairs the selector and retries
// second pass → diagnostics cleanSet it up once. Run it forever.
Every working scrape is saved as a config plus a URL list plus a runnable routine. The agent never rebuilds the same job — run_routine reruns it in a single async call, and CSV bulk upload scales the URL list.
Templates & routines →create_template_routine({ configId })
→ { "routineId": "rtn_7f21c" }
run_routine("rtn_7f21c")
→ { "jobId": "job_9d4", "async": true }
get_job_status("job_9d4")
→ { "progress": 0.62, "etaSeconds": 41 }Content behind a click is still content.
Scroll, click, hover, type, wait and multi-field fill_form. Infinite-scroll lists, reviews hidden behind a tab, results behind a search form and login-gated pages all become scrapable.
Browser actions →{
"actions": [
{ "click": ".tab-reviews" },
{ "scroll": "bottom", "times": 4 },
{ "wait": "networkidle" }
]
}
// lazy-loaded content → captured14 ways in,
14 ways to clean it
Fourteen extraction types and fourteen transform methods, all declared at selector level — so data arrives clean instead of being cleaned later. Every call is authenticated with your own x-api-key.
// transforms run at selector level
{
"selector": "$.products[*].price",
"transform": [
{ "regex": "[0-9]+[.,][0-9]{2}" },
{ "replace": { ",": "." } },
{ "cast": "number" }
],
"iterate": {
"url": "?page={n}", // auto pagination
"until": "empty"
}
}
// also: split · merge · base64 decode
// conditional assignment · dedupePredictable, usage-based pricing
One page = one credit, whether an agent asked for it or your pipeline did. Lightweight requests cost a fraction of a fully rendered page.
- MCP server access
- HTML, JSON & Markdown output
- 5 concurrent tool calls
- Community support
- Everything in Free
- Remote MCP endpoint
- 20 concurrent tool calls
- Scoped keys & budgets
- Email support
- Everything in Growth
- 50 concurrent tool calls
- Audit log export
- Priority support
- Webhooks & streaming
- Everything in Pro
- Dedicated proxies
- Custom SLA (99.99%)
- Self-hosted MCP option
- Dedicated support engineer
Give your agent
the whole web
Free tier included. No credit card. Paste the config block and your first scrape is about ninety seconds away.