Benchmarks

Measured, with the answers checked by hand.

115 public websites the engine had never seen, a set of practice tasks anyone can rerun, and a 30-job load test — all run against the live API, with every answer checked by hand against the page itself.

Real websites

115 sites it had never seen. 83% usable.

Shops, news, job boards, tables, single records, directories and plain questions, in eight languages. No site had been used to build or tune the engine before its run. Each was asked in plain words for one page, and the pages that failed were free.

Kind of siteSitesUsable answerEvery field correct
Shops and catalogues241513
News front pages161311
Job boards775
Tables and rankings141110
Single pages (a product, film, recipe or package)181612
Directories, forums and events161510
Questions about a site111010
Finance, property and government987
All11595 (83%)78 (68%)

Run on 15 October 2026 in four batches through the live API, each on sites new to it. “Usable” means the items asked for came back and most of their fields match the page; “every field correct” means nothing was missing or wrong in the rows we checked. Questions are scored on the answer and the page it cites. Sites that show automated visitors a verification page count as failures.

What comes back

Real answers from real sites.

Three runs from the same day, as returned. Numbers come back as numbers, and questions say which pages they used.

“city, country and population of every city in the table” · Wikipedia, list of largest cities

[
  {
    "city": "Jakarta",
    "country": "Indonesia",
    "population": "41,913,860"
  },
  {
    "city": "Dhaka",
    "country": "Bangladesh",
    "population": "36,585,479"
  },
  … 85 rows in all
]

“crate name, latest version, downloads and license” · crates.io/crates/serde

{
  "crate_name": "serde",
  "latest_version": "1.0.229",
  "downloads": 1531313118,
  "license": "MIT OR Apache-2.0"
}

“what does the Team plan cost per user per month?” · github.com/pricing

{
  "plan_name": "Team",
  "price": 4,
  "currency": "USD",
  "billing_period": "month",
  "sources": ["https://github.com/pricing",
              "https://github.com/team"]
}
Practice sites

Every row, every field.

TaskWhat we askedRows foundFields correctFirst time on the siteRepeat runPages
Product listing
books.toscrape.com
“every book with title, price, rating and availability”20 / 20100%24–27 s9.9 s1
One product page
books.toscrape.com (a book page)
“title, price, availability, UPC”1 / 1100%13 s6.8 s1
Job board
realpython.github.io/fake-jobs
“every job with title, company, location and date posted”100 / 100100%21 s9.6 s1
JavaScript-rendered list
quotes.toscrape.com/js
“every quote with the quote text, author and tags”10 / 10100%37 s38 s1
Long table
scrapethissite.com (countries)
“every country with name, capital, population and area”250 / 250100%21–24 s9.7 s1
Shop category
webscraper.io (laptops)
“every laptop with full title, price and number of reviews”117 / 117100%21–29 s9.7 s1
Pagination, 3 pages
books.toscrape.com/catalogue
“every book with title, price, rating and availability”60 / 60100%27–29 s12.5 s3

“First time” is with the extraction cache off, so the model writes fresh extraction code for every run (two runs each). “Repeat run” reuses the code proven on that site, which is why it is faster. Each task cost what it used in pages: 1 page, or 3 for the pagination task. Prices come back as numbers with a currency; ratings as numbers.

Under load

30 jobs at once. 30 finished.

Mix, all at the same timeFinishedTime each
12 single pages (books, author pages, a product)12 / 12about 10 s
12 lists, up to 5 pages each, across 6 sites12 / 12, correct row counts53–160 s
6 questions about a site6 / 616–60 s

Run from the production server against the production API, each job on a different site or instruction so cached code helped no more than it would for real traffic.

How we score

Check it yourself.

The practice tasks above use public sites built for scraping, so anyone can rerun them. Paste any task above into the playground or call POST /ask with the same URL and words. A row counts as found when its key field matches the page; a field counts as correct when its value matches the page's own value (numbers to the cent). We measure public sites only; LinkedIn, Yelp and Zillow ask for their official APIs instead. Spot an error? hello@plainscrape.com.

Run your own site in the playground.