Appearance
MCP server
The Model Context Protocol (MCP) is the open standard AI assistants use to call external tools. ScrapeIt runs a hosted MCP server: point Claude, Cursor, VS Code or any other MCP client at one URL, give it an API key, and the assistant can scrape pages, search Google, Google Maps, Amazon, Booking.com, Yelp, Walmart, eBay, Zillow, Apartments.com, Allegro, Redfin, Tripadvisor, Airbnb and Yellow Pages, start crawls and batches and check your credit balance - no code, no local install.
| Setting | Value |
|---|---|
| URL | https://api.scrapeit.io/api/v1/mcp |
| Transport | Streamable HTTP, stateless - MCP revision 2026-07-28 and the 2025 revisions |
| Auth | x-api-key: YOUR_SCRAPEIT_API_KEY or Authorization: Bearer YOUR_SCRAPEIT_API_KEY |
Every tool call runs the same engine as the REST API: the same proxies, anti-bot handling, SSRF protection, concurrency limits and billing outcome rules.
Connect your client
Create an API key in Workspace → API Keys with only the scopes the assistant needs, then add the server to your client.
Claude Code
bash
claude mcp add --transport http scrapeit https://api.scrapeit.io/api/v1/mcp \
--header "x-api-key: YOUR_SCRAPEIT_API_KEY"Cursor
Add the server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
json
{
"mcpServers": {
"scrapeit": {
"url": "https://api.scrapeit.io/api/v1/mcp",
"headers": { "x-api-key": "YOUR_SCRAPEIT_API_KEY" }
}
}
}VS Code (GitHub Copilot agent mode)
Add .vscode/mcp.json to the workspace. VS Code asks for the key once and stores it securely:
json
{
"inputs": [
{
"type": "promptString",
"id": "scrapeit-api-key",
"description": "ScrapeIt API key",
"password": true
}
],
"servers": {
"scrapeit": {
"type": "http",
"url": "https://api.scrapeit.io/api/v1/mcp",
"headers": { "x-api-key": "${input:scrapeit-api-key}" }
}
}
}Claude Desktop
Claude Desktop reaches remote servers with custom headers through the mcp-remote bridge (needs Node.js). Add this to claude_desktop_config.json (Settings → Developer → Edit Config) and restart Claude:
json
{
"mcpServers": {
"scrapeit": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.scrapeit.io/api/v1/mcp",
"--header",
"x-api-key:${SCRAPEIT_API_KEY}"
],
"env": { "SCRAPEIT_API_KEY": "YOUR_SCRAPEIT_API_KEY" }
}
}
}Any other MCP client
Use the Streamable HTTP transport with the URL above and send the key in x-api-key or as Authorization: Bearer. The server keeps no session: every request is authenticated on its own, so GET and DELETE on the endpoint answer 405.
Tools and scopes
Each tool needs the same API key scope as its REST endpoint. A key without it gets a PERMISSION_DENIED error naming the missing scope in details.required_scope; the other tools keep working.
| Tool | What it does | Scope | Same as |
|---|---|---|---|
scrape_url | Scrape one page; returns markdown by default, plus extractRules / aiExtractRules results. | scrape:web | POST /api/v1/scrape/web |
google_search | One Google results page as JSON (organic, ads, People also ask, related, knowledge panel). | scrape:web | GET /api/v1/scrape/google/search |
google_maps_search | One page of Google Maps places (twenty per page) as JSON. | scrape:web | GET /api/v1/scrape/google/maps/search |
google_maps_place | One place by place_id, data_id, cid or url: hours, attributes, photos, top reviews. | scrape:web | GET /api/v1/scrape/google/maps/place |
google_maps_reviews | Reviews of one place by sort and keyword query, up to 5 per call: rating, text, translation, likes, photos, visit details, owner response. | scrape:web | GET /api/v1/scrape/google/maps/reviews |
amazon_search | One Amazon search results page as JSON. | scrape:web | GET /api/v1/scrape/amazon/search |
amazon_product | One Amazon product by ASIN or URL as JSON. | scrape:web | GET /api/v1/scrape/amazon/product |
amazon_best_sellers | One Amazon Best Sellers page (50 ranked products) by category or url. | scrape:web | GET /api/v1/scrape/amazon/best-sellers |
booking_search | Booking.com properties for a destination and dates (destination, checkin, checkout). | scrape:web | GET /api/v1/scrape/booking/search |
booking_hotel | One Booking.com property by url or hotel_id; room prices with dates. | scrape:web | GET /api/v1/scrape/booking/hotel |
yelp_search | One page of Yelp businesses for find_loc (and optionally find_desc). | scrape:web | GET /api/v1/scrape/yelp/search |
yelp_business | One Yelp business by alias or url. | scrape:web | GET /api/v1/scrape/yelp/business |
walmart_search | One walmart.com search results page as JSON. | scrape:web | GET /api/v1/scrape/walmart/search |
walmart_product | One walmart.com product by item_id or url. | scrape:web | GET /api/v1/scrape/walmart/product |
ebay_search | One www.ebay.com search page (60, 120 or 240 listings) with filters as JSON. | scrape:web | GET /api/v1/scrape/ebay/search |
ebay_item | One www.ebay.com item by item_id or url, optionally with the full description. | scrape:web | GET /api/v1/scrape/ebay/item |
zillow_listing | zillow.com homes for sale, for rent or sold in a US city and state, with filters. | scrape:web | GET /api/v1/scrape/zillow/listing |
zillow_property | One zillow.com property by url: facts, schools, price and tax history, listing agent. | scrape:web | GET /api/v1/scrape/zillow/property |
apartments_listing | apartments.com rentals in a US city and state, with filters. | scrape:web | GET /api/v1/scrape/apartments/listing |
apartments_property | One apartments.com property by url: floor plans, units, fees, scores. | scrape:web | GET /api/v1/scrape/apartments/property |
allegro_listing | allegro.pl offers by phrase, category_id, url or product_id, with filters and page_token paging. | scrape:web | GET /api/v1/scrape/allegro/listing |
allegro_offer | One allegro.pl offer by offer_id or url. | scrape:web | GET /api/v1/scrape/allegro/offer |
redfin_search | Homes of a redfin.com area by location or url, with filters; the first 50 unless limit (up to 350). | scrape:web | GET /api/v1/scrape/redfin/search |
redfin_property | One redfin.com property by property_id or url: facts, Redfin Estimate, records, tax, history. | scrape:web | GET /api/v1/scrape/redfin/property |
tripadvisor_search | One tripadvisor.com hotels or restaurants list (30 places) by location, geo_id or url; hotel prices for checkin/checkout. | scrape:web | GET /api/v1/scrape/tripadvisor/search |
tripadvisor_place | One tripadvisor.com hotel or restaurant by url. | scrape:web | GET /api/v1/scrape/tripadvisor/place |
airbnb_search | One page of airbnb.com stays (18 listings) for a location, dates and guests. | scrape:web | GET /api/v1/scrape/airbnb/search |
airbnb_listing | One airbnb.com listing by listing_id or url, priced for your dates. | scrape:web | GET /api/v1/scrape/airbnb/listing |
yellowpages_search | One page of yellowpages.com businesses (30) for q and a US location. | scrape:web | GET /api/v1/scrape/yellowpages/search |
yellowpages_business | One yellowpages.com business by url: contacts, hours, categories, reviews. | scrape:web | GET /api/v1/scrape/yellowpages/business |
glassdoor_listing | One page of www.glassdoor.com jobs (30) for q and a location, with salary, date and type filters; cursor pages on. | scrape:web | GET /api/v1/scrape/glassdoor/listing |
glassdoor_job | One www.glassdoor.com job by job_id or url: description, pay, job type, skills and the employer profile. | scrape:web | GET /api/v1/scrape/glassdoor/job |
glassdoor_companies | One page of www.glassdoor.com companies (10) by location, sector, industry and rating. | scrape:web | GET /api/v1/scrape/glassdoor/companies |
glassdoor_company | One www.glassdoor.com company by company_id or url: ratings, counts, offices. | scrape:web | GET /api/v1/scrape/glassdoor/company |
crawl_start | Start a Website Crawler job. | scrapers:run | POST /api/v1/scrapers/crawler/jobs |
crawl_status | Status and progress of a crawl. | scrapers:read | GET /api/v1/scrapers/jobs/{id} |
batch_start | Start a batch over many URLs. | scrape:batch | POST /api/v1/scrape/batch/web |
job_status | Status, progress and cost of any job (batch, crawl or single request). | scrapers:read | GET /api/v1/jobs/{id} |
job_stop | Stop a running batch or crawl. | scrapers:stop | DELETE /api/v1/scrape/jobs/{id} |
get_usage | Credit balance, plan limits and usage of the current period. | usage:read | GET /api/v1/usage/me |
The arguments are the ones of the REST endpoint (for example url, jsRendering, outputFormat, extractRules, aiExtractRules, proxyType, proxyCountry and screenshot for scrape_url) and are validated by the same rules; your client shows each tool's full argument list.
Pricing
A tool call costs exactly what the REST request costs - see Request cost and the product pages for the price lists. crawl_status, job_status, job_stop and get_usage are free. Tool calls share your plan's concurrency slots and request rate limit with your REST traffic.
Responses and limits
- Page content.
scrape_urlreturns a short JSON summary (status, cost, files,content.json,ai_extraction) followed by the page itself as plain text - markdown unless you ask for anotheroutputFormat. - Time. A tool call that scrapes answers within 90 seconds, like the REST site APIs: a step that would end later is not started, and the call answers
SCRAPE_TIMEOUTwithout charging it. A largertimeoutMsonscrape_urlis cut to what is left of the 90 seconds. - Size. A tool result carries at most 100,000 characters (about 25,000 tokens), so one page cannot flood the assistant's context. Longer content is cut and ends with a
[Scrapeit: truncated, …]note; ask for specific fields withextractRulesoraiExtractRulesinstead of whole pages. - Request size. One MCP request body is limited to 1 MiB. Send large URL lists through the REST Batch Scraping API instead of
batch_start. - One message per request. JSON-RPC batches (an array of messages in one body, dropped from MCP in revision 2025-06-18) are refused with HTTP 400
Invalid Request; send each tool call as its own request. Every request counts against the request rate limit. - No change notifications. The tool list does not change while a client is connected, so the server advertises
listChanged: false: asubscriptions/listenrequest is acknowledged with no subscriptions and closed at once, andGET(a 2025-era notification stream) answers405. - Results in Files. A site API tool call keeps its JSON result in Files, and
scrape_urlits page and content, as the same REST request does. - Results of async jobs.
crawl_startandbatch_startreturn the job at once; their results are in the dashboard, Files and your webhooks.
Errors
A failed call comes back as a tool result marked as an error, carrying the same body as the REST API, for example:
json
{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits.",
"correlation_id": "…"
}
}| Code | Meaning |
|---|---|
PERMISSION_DENIED | The key lacks the tool's scope (details.required_scope). |
VALIDATION_ERROR | An argument failed the endpoint's validation; the message names it. |
INSUFFICIENT_CREDITS | The balance cannot cover the estimated cost. Nothing ran. |
CONCURRENCY_LIMIT_EXCEEDED | All concurrent slots of the plan are busy. Retry when a request finishes. |
INTERNAL_ERROR | A platform failure. Quote the correlation_id to support. |
A missing or revoked key is refused before any tool runs with HTTP 401 INVALID_API_KEY, and too many requests with HTTP 429 RATE_LIMIT_EXCEEDED. All codes are listed in Error codes.
Security
- One key per client, least scopes. A research assistant that only reads job status needs
scrapers:readandusage:read; leavescrape:web,scrapers:runandscrape:batchoff keys that should never spend credits. - Scraped pages are untrusted text. A page can contain instructions aimed at the assistant. Keep your client's per-tool approval on for the paid tools, and watch the Usage page.
- Your workspace only. A key acts inside the workspace it was created in; no tool reaches another workspace or any admin function. The key is never returned by a tool or written to logs.
Related pages
- Authentication & API keys - creating keys and choosing scopes.
- Web Scraping API - every
scrape_urloption in detail. - Billing & credits - when a request is charged.