Give it a store URL, get structured rows. A model writes the parser once; replays are free.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Give it a URL. It writes the scraper.
Most e-commerce catalog scraping splits into two worlds: sites on a known platform (Shopify, WooCommerce) that expose a clean JSON feed, and everything else β bespoke HTML where you hand-write a parser per site and re-write it every time the markup shifts. scrapewright collapses both into one call:
The LLM is a compiler, not a runtime. It runs once per site to produce a recipe of CSS selectors; every page after that is parsed by plain BeautifulSoup at zero marginal cost. That is the whole cost-control story β no per-page model calls, no token bill that scales with your crawl.
Everything normalizes to one Product shape, so downstream code never knows or
cares which path a record came from.
-o writes .csv (Excel-ready, UTF-8 BOM), .xlsx (pip install scrapewright[excel]),
or .jsonl; without it, products stream to stdout as JSONL.
detect answers the routing question before a job starts:
Twelve platforms are recognized: Shopify and WooCommerce publish a free
JSON catalog, so those route to catalog β deterministic, no LLM, no browser.
Magento, BigCommerce, Salesforce Commerce Cloud, Squarespace, Wix, Webflow,
PrestaShop, Shopware, Ecwid and OpenCart are recognized by fingerprint and
route to crawl, where the recipe path handles them like any custom site β the
point of naming them is knowing what you face, not writing twelve parsers.
Wix and Ecwid render client-side, so detection says crawl+js up front.
A site behind an anti-bot wall reports strategy: blocked with the HTTP status,
rather than pretending it found nothing.
Products are just the built-in default. Declare the fields you want and the same compile-once/replay-free loop works on any structured page β job posts, listings, registry records:
Field kinds are text (default), number, url, and list. Recipes are cached
per site and per schema, so one domain can be compiled against several field
sets without them overwriting each other.
scrapewright ships an MCP server, so an agent can call it as a tool instead of reading raw HTML itself:
Point any MCP client at that command and the agent gains five tools: detect_site,
scrape_catalog, extract_page, crawl_site, and list_learned_sites.
Drop this into your client's config β Claude Desktop, Cursor, or anything else that speaks MCP:
The key is only needed for sites on no known platform, where a recipe has to be written once. Shopify and WooCommerce stores work without it.
The economics are the point. An agent that reads pages itself pays model tokens per page, forever. These tools pay once per site β an agent crawling 500 pages spends one synthesis, not five hundred, and platform stores (Shopify, WooCommerce) cost nothing at all.
The same core behind an HTTP API, with keys, quotas, metering and background jobs:
| Endpoint | Purpose |
|---|---|
POST /v1/detect | platform + strategy (cheap) |
POST /v1/extract | one page -> structured record |
POST /v1/crawl | a whole site -> job id (crawls outlive a request) |
GET /v1/jobs/{id} | poll a crawl |
GET /v1/usage | what this key has consumed, against its plan |
One action costs real money: compiling a new site, a single LLM pass over a page, measured at $0.02 on a small product page and $0.15 on a heavy rendered one. Everything after that is BeautifulSoup β the ten-thousandth record from a compiled site is free to serve. So credits are priced off that one action, and everything else is denominated relative to it:
| Action | Credits |
|---|---|
| 1 record delivered | 1 |
| 1 browser render | 5 |
| 1 new site compiled | 300 |
page fetches, detect | free |
Margin is measured on compiling a site, because that is the only step that costs anything; a test fails if a price edit drops any pack below 60%. A free account can cost us at most $0.20 a month, even if every free credit goes to the most expensive action there is.
Credits are a ledger, not a counter β every grant and every charge is a row,
so a disputed bill can be reconstructed line by line, and a replayed payment
webhook cannot double-credit (grants take an idempotency key). Running out
returns 402 with the balance and what to do about it; a crawl is capped by the
credits on hand, so a job stops at what the caller can pay for instead of
overdrawing.
Stripe is wired in and turned on by environment, not by a code change:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/scrapewright)<a href="https://allmcps.com/mcp/scrapewright"><img src="https://allmcps.com/api/badge/scrapewright?style=directory" alt="Scrapewright on AllMCPs" /></a>