Most tools charge you per page, forever. scrapewright works out how to read a site once — then replays that recipe on every page after, with no model in the loop and nothing more to pay for it.
No signup, no card. Paste a shop URL and see actual rows.
Try ·
The demo covers shops that publish a catalogue (Shopify, WooCommerce), because those cost nothing to read. Everything else needs compiling once — that is what a free key is for.
Then the model reads the page and writes the parser. Here is one it wrote for qlocktwo.com, a shop on no platform we recognise — copied out of the cache exactly as it was stored:
{
"title": "h1",
"price": "div:has(> span.text-base.mr-1)",
"brand": "meta[property='og:site_name']",
"images": ".swiper-slide img",
"description": "meta[name='description']"
}
Look at the price selector. Nobody guesses div:has(> span.text-base.mr-1)
— it comes from having read that particular page's markup. That is the one step a
language model is worth paying for, and it happens once per site.
Replaying it costs nothing. These rows came back with the model switched off entirely:
| Title | Price | Brand |
|---|---|---|
| QLOCKTWO EARTH 45 – Time in Words as a Design Object | from€1,600.00 | QLOCKTWO |
| QLOCKTWO Stand Black | 190 | QLOCKTWO |
Recorded 31 August 2026. This shop renders in the browser, and the hosted demo above runs without one, which is why this example is shown rather than run live — the price is printed exactly as the recipe returned it, "from€" and all. Point a free key at your own site and you get the same thing, live.
The expensive part of scraping is not fetching pages. It is working out where the title and the price live on a page nobody has parsed before.
Shopify, WooCommerce and a dozen more are detected outright. They already hand over a catalogue, so no model is ever called.
For anything custom, a language model reads the page once and writes a recipe of CSS selectors. This is the only step that costs real money.
Every page after that runs the cached recipe. Plain parsing, no model, no marginal cost. If the site changes, the recipe rebuilds itself.
You pay for rows delivered — one credit each. Not for requests, not per month. Credits do not expire, and there is no subscription.
Every account gets 1,000 rows free each month. Rendering a JavaScript-only page costs 5, and compiling a brand-new site costs 300 — both are shown in your usage before you spend them.
One field. The key appears once, so keep it somewhere.
An HTTP API, a Python library, and an MCP server for agents.
curl -X POST https://scrapewright-api.fly.dev/v1/crawl \
-H "X-API-Key: $SCRAPEWRIGHT_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://someshop.com", "max_items": 100}'
pip install "scrapewright[llm,excel]"
from scrapewright import Scrapewright
sw = Scrapewright()
for product in sw.scrape_catalog("https://someshop.com"):
print(product.title, product.price)
{
"mcpServers": {
"scrapewright": {
"command": "scrapewright",
"args": ["mcp"]
}
}
}
Drop that into your MCP client's config and the agent gets
detect_site, extract and crawl as tools.