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. Prices are in US dollars before tax; Stripe adds VAT or sales tax at checkout where your country requires it, and shows the total before you pay.
No key yet? Get one below — it takes one field and comes with 1,000 free rows. Your key is sent to this service and to nobody else; payment itself happens on Stripe.
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.
By requesting a key you agree to the terms; the privacy notice says what is stored (your address, only as a hash) and why.
An HTTP API, a Python library, and an MCP server for agents.
curl -X POST https://scrapewright.app/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": {
"url": "https://scrapewright.app/mcp",
"headers": { "X-API-Key": "sw_..." }
}
}
}
Nothing to install: drop that into your MCP client's config and
the agent gets detect_site, extract_page,
crawl_site and account as tools, paid from the same
credits. Prefer to run it yourself? pip install "scrapewright[mcp,llm]"
and use "command": "scrapewright", "args": ["mcp"] instead.