20 public pages, fixed and listed below: government pages, a PDF form, standards, docs, an encyclopedia article and a paper. ProofFetch fetches every one through the same extractor a paid request uses, once a day, and whenever someone presses the button. Every result stays here, failures included.
Run 2026-10-28 08:05 UTC (first run, started when the benchmark went live). Times are measured inside ProofFetch, from the start of each fetch to the finished extraction, 5 pages at a time. They don't include the trip between you and ProofFetch.
| Page | Result | Time | Paragraphs |
|---|---|---|---|
| example.com | Extracted | 0.0 s | 1 |
| rfc-editor.org/rfc/rfc9110.html | Failed: response_too_large | 0.2 s | – |
| csrc.nist.gov/pubs/fips/180-4/upd1/final | Extracted | 0.7 s | 6 |
| irs.gov/pub/irs-pdf/fw9.pdf | Extracted (PDF) | 0.7 s | 53 |
| irs.gov/tax-professionals/standard… | Extracted | 0.4 s | 11 |
| en.wikipedia.org/wiki/Web_scraping | Extracted | 0.4 s | 56 |
| developer.mozilla.org/en-US/docs/Web/HTTP/Refere… | Extracted | 0.3 s | 43 |
| docs.python.org/3/library/json.html | Extracted | 0.4 s | 49 |
| gutenberg.org/ebooks/1342 | Extracted | 1.8 s | 6 |
| arxiv.org/abs/1706.03762 | Extracted | 0.1 s | 8 |
| federalreserve.gov/releases/h15/ | Extracted | 0.1 s | 28 |
| eia.gov/petroleum/gasdiesel/ | Extracted | 0.4 s | 14 |
| bls.gov/cpi/ | Extracted | 0.3 s | 15 |
| usa.gov | Extracted | 2.2 s | 9 |
| nps.gov/aboutus/entrance-fee-price… | Extracted | 1.6 s | 37 |
| dol.gov/agencies/whd/minimum-wage | Extracted | 0.3 s | 9 |
| w3.org/TR/WCAG21/ | Failed: upstream_http_403 | 0.0 s | – |
| nodejs.org/en/about | Extracted | 0.3 s | 11 |
| sec.gov/about | Extracted | 0.2 s | 8 |
| uscis.gov/g-1055 | Extracted | 0.2 s | 24 |
The raw data, every run with every page: /benchmark.json. To run the same list from your own machine against the free check (Node 18 or newer, saved as bench.mjs, then node bench.mjs). The free check allows 20 requests a minute from one address, so the list fits in one run. Your times include the trip to ProofFetch.
const urls = [
"https://example.com/",
"https://www.rfc-editor.org/rfc/rfc9110.html",
"https://csrc.nist.gov/pubs/fips/180-4/upd1/final",
"https://www.irs.gov/pub/irs-pdf/fw9.pdf",
"https://www.irs.gov/tax-professionals/standard-mileage-rates",
"https://en.wikipedia.org/wiki/Web_scraping",
"https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status",
"https://docs.python.org/3/library/json.html",
"https://www.gutenberg.org/ebooks/1342",
"https://arxiv.org/abs/1706.03762",
"https://www.federalreserve.gov/releases/h15/",
"https://www.eia.gov/petroleum/gasdiesel/",
"https://www.bls.gov/cpi/",
"https://www.usa.gov/",
"https://www.nps.gov/aboutus/entrance-fee-prices.htm",
"https://www.dol.gov/agencies/whd/minimum-wage",
"https://www.w3.org/TR/WCAG21/",
"https://nodejs.org/en/about",
"https://www.sec.gov/about",
"https://www.uscis.gov/g-1055"
];
for (const url of urls) {
const started = Date.now();
const r = await fetch('https://prooffetch.steellantern.com/v1/preflight', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ url }) });
const body = await r.json();
console.log(r.status, Date.now() - started, 'ms', body.document?.paragraphCount ?? body.error, url);
}Questions: bryan@steellantern.com. Bryan answers, within one business day. Operated by Steel Lantern (steellantern.com).