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.
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 site | Sites | Usable answer | Every field correct |
|---|---|---|---|
| Shops and catalogues | 24 | 15 | 13 |
| News front pages | 16 | 13 | 11 |
| Job boards | 7 | 7 | 5 |
| Tables and rankings | 14 | 11 | 10 |
| Single pages (a product, film, recipe or package) | 18 | 16 | 12 |
| Directories, forums and events | 16 | 15 | 10 |
| Questions about a site | 11 | 10 | 10 |
| Finance, property and government | 9 | 8 | 7 |
| All | 115 | 95 (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.
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"]
}Every row, every field.
| Task | What we asked | Rows found | Fields correct | First time on the site | Repeat run | Pages |
|---|---|---|---|---|---|---|
| Product listing books.toscrape.com | “every book with title, price, rating and availability” | 20 / 20 | 100% | 24–27 s | 9.9 s | 1 |
| One product page books.toscrape.com (a book page) | “title, price, availability, UPC” | 1 / 1 | 100% | 13 s | 6.8 s | 1 |
| Job board realpython.github.io/fake-jobs | “every job with title, company, location and date posted” | 100 / 100 | 100% | 21 s | 9.6 s | 1 |
| JavaScript-rendered list quotes.toscrape.com/js | “every quote with the quote text, author and tags” | 10 / 10 | 100% | 37 s | 38 s | 1 |
| Long table scrapethissite.com (countries) | “every country with name, capital, population and area” | 250 / 250 | 100% | 21–24 s | 9.7 s | 1 |
| Shop category webscraper.io (laptops) | “every laptop with full title, price and number of reviews” | 117 / 117 | 100% | 21–29 s | 9.7 s | 1 |
| Pagination, 3 pages books.toscrape.com/catalogue | “every book with title, price, rating and availability” | 60 / 60 | 100% | 27–29 s | 12.5 s | 3 |
“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.
30 jobs at once. 30 finished.
| Mix, all at the same time | Finished | Time each |
|---|---|---|
| 12 single pages (books, author pages, a product) | 12 / 12 | about 10 s |
| 12 lists, up to 5 pages each, across 6 sites | 12 / 12, correct row counts | 53–160 s |
| 6 questions about a site | 6 / 6 | 16–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.
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.