Web scraper token cost per page, measured — article mark

Web scraper token cost per page, measured

One robertz.co article page = 4.7–5.9k tokens through any reader, 17.0k as raw HTML, 1.5k with LLMLingua-2 stacked on Trafilatura. A browser farm’s JSON envelope adds +300–597 tok/page on top of the content — the model pays for the metadata.

Series — web scrapers for local LLMs: Overview · Readers compared · Token cost per page · Extraction quality · Output formats · Previous stage: Web search for local LLMs

Run locally on my fleet.

Mean tokens per robertz.co article page (U2 and U3) by page reader and config, chromium fetch shown as content and as the whole JSON envelope, with one search marked as a dashed budgeting reference Mean tokens per article page (U2+U3), robertz.co pip reader browser reader raw HTML JSON envelope Trafilatura → LLMLingua-2 Trafilatura chromium fetch, content readability chromium fetch, envelope Firecrawl main Crawl4AI fit Firecrawl raw Crawl4AI raw raw HTML 1,474 4,728 4,757 4,947 5,330 (+573 envelope) 5,544 5,609 5,697 5,877 16,979 reference: 1 search = 556 tok Linear scale. Every reader cuts raw HTML ~3–3.6×; the readers sit within 24% of each other.
Mean over U2 and U3. Dashed line = one search result list (previous pipeline stage), for budgeting only. U1 (homepage) is in the table below. chromium fetch: separate run, N=3, cache bypassed.

Per URL, per reader

Reader · configU1 homepageU2 auth articleU3 broker postmean U2+U3
raw HTML29,55216,01017,94716,979
Trafilatura 2.0.0 (precision, no links, tables)✗ 605,5273,9284,728
readability-lxml 0.8.4.1✗ 515,7464,1474,947
Crawl4AI 0.9.4 raw markdown1,7206,8004,9535,877
Crawl4AI 0.9.4 fit markdown (Pruning 0.48)1,2696,5904,6285,609
Firecrawl onlyMainContent: true1,4796,3644,7245,544
Firecrawl onlyMainContent: false1,7586,5194,8745,697
Trafilatura → LLMLingua-2 @ rate 0.3360 → 185,527 → 1,7093,928 → 1,2394,728 → 1,474
chromium MCP fetch browser — content ‡4055,5273,9864,757
chromium MCP fetch browser — whole envelope ‡7056,0764,5835,330
envelope overhead ‡+300+549+597+573
Camoufox rendered HTML §31,59716,71419,07717,896
Camoufox → Trafilatura §1205,5273,9284,728
nodriver rendered HTML §31,59716,75019,11317,932
nodriver → Trafilatura §1205,5273,9284,728

✗ U1 is a listing page — main-content readers keep almost nothing (Trafilatura kept only the hosting blurb, twice). ‡ separate run, N=3: raw HTML then U1 31,159 tok (homepage grew), U2/U3 unchanged; same-run Trafilatura direct 30 / 5,710 / 4,000, Crawl4AI raw 1,840 / 6,800 / 4,953, fit 1,389 / 6,590 / 4,628. § stealth browser, separate run: Trafilatura on the rendered DOM — same tokens as on fetched HTML for U2/U3. ↔ scroll sideways for every column.

The envelope: what the model pays for besides the page

chromium fetch ‡U1U2U3
content tok4055,5273,986
envelope metadata tok300549597
metadata share of what the model reads43%9%13%

18 metadata keys (status, cache, URLs, timestamps, two SHA-256 hashes, JSON-LD, …) wrap the content → Output formats.

One page, three layers

U2 robertz.co/knowledge/.../eight-authentication-methods-battle/
  raw HTML                             16,010 tok
  → Trafilatura (precision)             5,527 tok   −65%  (2.9×)
  → LLMLingua-2 @ rate 0.33             1,709 tok   −69%  (~9.4× total vs raw HTML; +~8.8 s CPU)

Latency per page

Readerper pageruns in
readability-lxml~19 mspip lib
Trafilatura~42 mspip lib
Crawl4AI~650 mscontainer + Chromium
Firecrawl (self-host)~940 ms5 containers
chromium MCP fetch, cold ‡5,427–8,293 ms median (4,901–9,026 per call)browser farm
chromium MCP fetch, cache hit ‡2–3 msshared page cache (7 days)
same run ‡: Trafilatura direct229–242 mspip lib, incl. fetch
same run ‡: Crawl4AI raw / fit372–467 / 377–410 mslocal MCP service
Camoufox §748–893 msFirefox build + Xvfb
nodriver §619–835 msChrome + Xvfb
+ LLMLingua-2 @0.33+~8.8 s (U2) · +3.9 s (U3)CPU

‡ § N=3 medians, § fresh browser per render. chromium mode=http / mode=auto: 0/18 ok — http path broken at measurement time, not scored.

ItemTokens× one search
one search (10 snippets, previous stage)5561×
one article page, any reader4,728–5,8778.5–10.6×
one article page, chromium fetch envelope5,3309.6×
one article page, Trafilatura → LLMLingua-21,4742.7×
one article page, raw HTML16,97930.5×

What it means

Questions? Let's Chat :)

ai llm engineering