How it actually works

Why Plainscrape?

Why it exists, and how it works.

Why meaning beats selectors

A CSS selector like div.grid__x9 > h4.ttl ties your code to a website's internal structure, and that structure moves all the time. Class names are minified per deploy, A/B tests swap layouts per visitor, and frameworks re-render the same content into different DOM shapes. A selector describes how the page was built this week; Plainscrape describes the data you want.

Short version of this page, titled as the buyer question: How to stop your scraper breaking when a site redesigns its HTML.

Describe the data once, and it keeps arriving through every redesign.

Built to ride out redesigns

When a site redesigns, the meaning of the page almost never changes. A product still has a name, a price, a rating. Only the markup moved. Plainscrape anchors extraction to meaning — "the product's price" — so a Tuesday redesign changes nothing about your Tuesday dataset.

We extract what the page says, wherever it says it.

Where LLMs help most

Language models read a page the way a person does. That's what makes "every product under $50 with rating above 4.5" a valid program.

But running an LLM on every page of every crawl would be slow and expensive, and pipelines want the same answer every time. So Plainscrape uses the model to understand the structure once, derives a deterministic extraction template from that understanding, and reuses it across similar pages so later pages skip the full model call. The model escalates back in only when a page breaks the pattern. You get language-level flexibility with pipeline-level reuse — and every row comes from the page itself. Every answer's coverage says how many rows came back complete and which fields the page left empty.

Why you can check the work

Good data should show its work: which page said what, and an empty field when the page is silent. That's what keeps a pipeline trustworthy.

Every Plainscrape answer says what it cost and how complete it is. The receipt is the bill — one page fetched is one page, and only pages that come back count. coverage counts the rows with every field filled and names the fields the page left out, and sources lists the pages it read. Rows are read from the page by code that runs on it, and sources lists the pages each answer read. And prices come back as numbers with their currency, so totals add up.

Why pricing is simple

Here one page is one page — rendering, proxies and extraction included, and you pay only for pages that come back. Plans are paid upfront, so your bill is exactly the plan price. We can do that because extraction code is written once per site and reused, so most pages run on the saved code alone.

The short version

You bring a URL and a question in plain words. Plainscrape finds the data, follows the pages, and returns clean JSON your agent can use — in one call, from any MCP client or the REST API, billed by the page.

Ready to wire web access into your agent?

Get an API key

Or read the docs · 100-page trial · 14 days · free