<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leif Albrand</title>
    <description>The latest articles on DEV Community by Leif Albrand (@ragfeed).</description>
    <link>https://dev.to/ragfeed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4183103%2F415cc080-1d3c-4a4a-b275-4113fdd62cd5.png</url>
      <title>DEV Community: Leif Albrand</title>
      <link>https://dev.to/ragfeed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ragfeed"/>
    <language>en</language>
    <item>
      <title>How many tokens does a web page cost your LLM? We measured 20 real pages</title>
      <dc:creator>Leif Albrand</dc:creator>
      <pubDate>Tue, 13 Oct 2026 20:59:21 +0000</pubDate>
      <link>https://dev.to/ragfeed/raw-html-vs-full-page-text-vs-main-content-markdown-median-range-and-the-cases-where-the-lnh</link>
      <guid>https://dev.to/ragfeed/raw-html-vs-full-page-text-vs-main-content-markdown-median-range-and-the-cases-where-the-lnh</guid>
      <description>&lt;p&gt;&lt;em&gt;Raw HTML vs. full-page text vs. main-content Markdown — median, range, and the cases where the saving is small.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you build RAG pipelines or agents that read the web, every page you fetch ends up as input tokens: in the embedding step, in the context window, on every query. So what you hand the model matters. We measured it on 20 real pages instead of guessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The median raw HTML page in our sample was &lt;strong&gt;~128,000 tokens&lt;/strong&gt;. One page would fill a 128k context window.&lt;/li&gt;
&lt;li&gt;LLM-oriented Markdown of the same pages needed a &lt;strong&gt;median 98 % fewer tokens than raw HTML&lt;/strong&gt; and &lt;strong&gt;63 % fewer than the full page converted to text&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Most of that second saving comes from &lt;strong&gt;main-content extraction&lt;/strong&gt; (dropping navigation, footers, cookie notices, teasers): median 51 % on its own. Cleanup on top added a median ~9 %.&lt;/li&gt;
&lt;li&gt;The range is wide: &lt;strong&gt;18 % to 90 %&lt;/strong&gt; against full-page text. Pages that are already lean save little.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;20 public pages&lt;/strong&gt;, German-language sites, picked to mix two kinds: &lt;strong&gt;6 start/overview pages&lt;/strong&gt; (lots of menus and teasers) and &lt;strong&gt;14 articles&lt;/strong&gt; (news, encyclopedia, documentation, statute text, recipes, guides). Sources include Wikipedia, MDN, tagesschau.de, heise online, the German Environment Agency, gesetze-im-internet.de, Chefkoch, DHL, Siemens, Verbraucherzentrale, n-tv, t-online and MSN.&lt;/li&gt;
&lt;li&gt;Each page was fetched fresh (no cache) and saved in four variants:

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Raw HTML&lt;/strong&gt; — the rendered page source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-page text&lt;/strong&gt; — the whole page converted to Markdown, menus and footer included. This is roughly what a plain "fetch this URL" tool hands a model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Main-content Markdown&lt;/strong&gt; — only the main content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM Markdown&lt;/strong&gt; — main content, further cleaned for model input, plus a short source header.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokenizer:&lt;/strong&gt; &lt;code&gt;o200k_base&lt;/code&gt; via &lt;code&gt;tiktoken&lt;/code&gt; (the GPT-4o tokenizer). Other tokenizers give different absolute counts; the ratios move much less.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Statistic:&lt;/strong&gt; median of the per-page savings, so a handful of huge portal pages can't drive the result.&lt;/li&gt;
&lt;li&gt;Measured on 1 October 2026. Pages change; a re-run will give somewhat different numbers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Total tokens, 20 pages&lt;/th&gt;
&lt;th&gt;Median page&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Raw HTML&lt;/td&gt;
&lt;td&gt;3,713,862&lt;/td&gt;
&lt;td&gt;128,051&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full-page text&lt;/td&gt;
&lt;td&gt;242,852&lt;/td&gt;
&lt;td&gt;10,917&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main-content Markdown&lt;/td&gt;
&lt;td&gt;109,929&lt;/td&gt;
&lt;td&gt;3,241&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM Markdown&lt;/td&gt;
&lt;td&gt;94,987&lt;/td&gt;
&lt;td&gt;2,948&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Median saving of LLM Markdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;compared with&lt;/th&gt;
&lt;th&gt;all 20 pages&lt;/th&gt;
&lt;th&gt;start pages (6)&lt;/th&gt;
&lt;th&gt;articles (14)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;raw HTML&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;98 %&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;99 %&lt;/td&gt;
&lt;td&gt;98 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;full-page text&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;63 %&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;64 %&lt;/td&gt;
&lt;td&gt;59 %&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Per page, sorted by saving against full-page text
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Kind&lt;/th&gt;
&lt;th&gt;Raw HTML&lt;/th&gt;
&lt;th&gt;Full-page text&lt;/th&gt;
&lt;th&gt;LLM Markdown&lt;/th&gt;
&lt;th&gt;vs. HTML&lt;/th&gt;
&lt;th&gt;vs. full text&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Verbraucherzentrale: guide&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;404,544&lt;/td&gt;
&lt;td&gt;5,952&lt;/td&gt;
&lt;td&gt;4,902&lt;/td&gt;
&lt;td&gt;98.8 %&lt;/td&gt;
&lt;td&gt;17.6 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;German copyright act § 44b&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;1,265&lt;/td&gt;
&lt;td&gt;480&lt;/td&gt;
&lt;td&gt;355&lt;/td&gt;
&lt;td&gt;71.9 %&lt;/td&gt;
&lt;td&gt;26.0 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nord24: heat pump article&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;27,875&lt;/td&gt;
&lt;td&gt;7,261&lt;/td&gt;
&lt;td&gt;5,365&lt;/td&gt;
&lt;td&gt;80.8 %&lt;/td&gt;
&lt;td&gt;26.1 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verbraucherzentrale: start page&lt;/td&gt;
&lt;td&gt;start&lt;/td&gt;
&lt;td&gt;562,566&lt;/td&gt;
&lt;td&gt;5,573&lt;/td&gt;
&lt;td&gt;3,608&lt;/td&gt;
&lt;td&gt;99.4 %&lt;/td&gt;
&lt;td&gt;35.3 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia: Big Data&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;94,483&lt;/td&gt;
&lt;td&gt;25,259&lt;/td&gt;
&lt;td&gt;15,713&lt;/td&gt;
&lt;td&gt;83.4 %&lt;/td&gt;
&lt;td&gt;37.8 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;heise online: start page&lt;/td&gt;
&lt;td&gt;start&lt;/td&gt;
&lt;td&gt;359,135&lt;/td&gt;
&lt;td&gt;29,770&lt;/td&gt;
&lt;td&gt;16,135&lt;/td&gt;
&lt;td&gt;95.5 %&lt;/td&gt;
&lt;td&gt;45.8 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment Agency: emissions&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;121,354&lt;/td&gt;
&lt;td&gt;20,064&lt;/td&gt;
&lt;td&gt;10,354&lt;/td&gt;
&lt;td&gt;91.5 %&lt;/td&gt;
&lt;td&gt;48.4 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chefkoch: recipe&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;140,381&lt;/td&gt;
&lt;td&gt;4,831&lt;/td&gt;
&lt;td&gt;2,459&lt;/td&gt;
&lt;td&gt;98.2 %&lt;/td&gt;
&lt;td&gt;49.1 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;n-tv: heat pump guide&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;119,333&lt;/td&gt;
&lt;td&gt;18,372&lt;/td&gt;
&lt;td&gt;8,648&lt;/td&gt;
&lt;td&gt;92.8 %&lt;/td&gt;
&lt;td&gt;52.9 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tagesschau.de: business&lt;/td&gt;
&lt;td&gt;start&lt;/td&gt;
&lt;td&gt;478,580&lt;/td&gt;
&lt;td&gt;12,501&lt;/td&gt;
&lt;td&gt;5,072&lt;/td&gt;
&lt;td&gt;98.9 %&lt;/td&gt;
&lt;td&gt;59.4 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;heise online: news item&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;91,736&lt;/td&gt;
&lt;td&gt;5,404&lt;/td&gt;
&lt;td&gt;1,858&lt;/td&gt;
&lt;td&gt;98.0 %&lt;/td&gt;
&lt;td&gt;65.6 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Siemens: start page&lt;/td&gt;
&lt;td&gt;start&lt;/td&gt;
&lt;td&gt;134,748&lt;/td&gt;
&lt;td&gt;6,449&lt;/td&gt;
&lt;td&gt;2,059&lt;/td&gt;
&lt;td&gt;98.5 %&lt;/td&gt;
&lt;td&gt;68.1 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tagesschau.de: fuel prices article&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;261,767&lt;/td&gt;
&lt;td&gt;7,339&lt;/td&gt;
&lt;td&gt;1,960&lt;/td&gt;
&lt;td&gt;99.3 %&lt;/td&gt;
&lt;td&gt;73.3 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MDN: HTML docs&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;56,651&lt;/td&gt;
&lt;td&gt;12,837&lt;/td&gt;
&lt;td&gt;3,280&lt;/td&gt;
&lt;td&gt;94.2 %&lt;/td&gt;
&lt;td&gt;74.4 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;t-online: heat pump article&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;150,606&lt;/td&gt;
&lt;td&gt;10,486&lt;/td&gt;
&lt;td&gt;2,616&lt;/td&gt;
&lt;td&gt;98.3 %&lt;/td&gt;
&lt;td&gt;75.1 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MSN: heat pump article&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;244,653&lt;/td&gt;
&lt;td&gt;20,174&lt;/td&gt;
&lt;td&gt;4,347&lt;/td&gt;
&lt;td&gt;98.2 %&lt;/td&gt;
&lt;td&gt;78.5 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DHL: private customers&lt;/td&gt;
&lt;td&gt;start&lt;/td&gt;
&lt;td&gt;59,085&lt;/td&gt;
&lt;td&gt;11,416&lt;/td&gt;
&lt;td&gt;2,155&lt;/td&gt;
&lt;td&gt;96.4 %&lt;/td&gt;
&lt;td&gt;81.1 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment Agency: climate change&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;99,713&lt;/td&gt;
&lt;td&gt;11,347&lt;/td&gt;
&lt;td&gt;1,337&lt;/td&gt;
&lt;td&gt;98.7 %&lt;/td&gt;
&lt;td&gt;88.2 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DHL: online postage&lt;/td&gt;
&lt;td&gt;article&lt;/td&gt;
&lt;td&gt;114,545&lt;/td&gt;
&lt;td&gt;10,319&lt;/td&gt;
&lt;td&gt;1,119&lt;/td&gt;
&lt;td&gt;99.0 %&lt;/td&gt;
&lt;td&gt;89.2 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chefkoch: start page&lt;/td&gt;
&lt;td&gt;start&lt;/td&gt;
&lt;td&gt;190,842&lt;/td&gt;
&lt;td&gt;17,018&lt;/td&gt;
&lt;td&gt;1,645&lt;/td&gt;
&lt;td&gt;99.1 %&lt;/td&gt;
&lt;td&gt;90.3 %&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3gf0ns8zibq0b17u589r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3gf0ns8zibq0b17u589r.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we take from it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Never send raw HTML to a model.&lt;/strong&gt; Even the leanest page in the set (a statute text, 1,265 tokens of HTML) lost 72 %. Typical pages are 100k–500k tokens of HTML for a few thousand tokens of content — mostly scripts, inline styles, tracking and markup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. "Full page as text" is not lean either.&lt;/strong&gt; Converting HTML to text removes the markup but keeps every menu, footer link, cookie notice and teaser. On the median page that is still more than three times the tokens of the actual content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Main-content extraction is the big lever.&lt;/strong&gt; Dropping boilerplate saved a median 51 % against full-page text; extra cleanup for LLM input added a median ~9 %. This is the honest part: much of the gain is available from any decent main-content extractor. Whichever tool you use, check that it actually does this, and spot-check its output — an extractor that cuts too much is worse than one that cuts too little.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The saving depends on the page.&lt;/strong&gt; Portal and overview pages save the most; long, clean articles the least (Wikipedia: 38 %; a consumer guide: 18 %). A single median number hides that; plan with the range.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Fewer tokens is not only cheaper.&lt;/strong&gt; Less noise in the context means less for the model to wade through, and less irrelevant text in your vector index competing with the passages you want to retrieve.&lt;/p&gt;

&lt;h2&gt;
  
  
  A rough cost sense
&lt;/h2&gt;

&lt;p&gt;On the median page, full-page text is ~10,900 tokens and LLM Markdown ~2,900: about &lt;strong&gt;8,000 input tokens saved per page and pass&lt;/strong&gt;. At an illustrative $1 per million input tokens, that is about $8 per 1,000 pages per pass — and RAG pipelines pay it at embedding time, while agents pay it again every time the page lands in a context window. Plug in your own model price.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;20 pages is a small sample, and all are German-language sites. English sites may differ.&lt;/li&gt;
&lt;li&gt;Tokenizer-specific absolute numbers (&lt;code&gt;o200k_base&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Pages change; this is a snapshot from 1 October 2026.&lt;/li&gt;
&lt;li&gt;"Full-page text" here is our own whole-page Markdown conversion, not any specific third-party tool.&lt;/li&gt;
&lt;li&gt;We did &lt;strong&gt;not&lt;/strong&gt; benchmark other extraction services or libraries. The comparison is between page representations, not between products.&lt;/li&gt;
&lt;li&gt;Token count is not answer quality. We measured retrieval separately (headings-based chunks vs. fixed-length chunks, 58 questions, one embedding model) — that is a different, smaller study.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disclosure and method
&lt;/h2&gt;

&lt;p&gt;I'm the founder of &lt;strong&gt;Ragfeed&lt;/strong&gt;, a Firecrawl-compatible web-data API hosted in Germany; the four variants above were produced with it, and "LLM Markdown" is its &lt;code&gt;llmMarkdown&lt;/code&gt; format. The script, page list and raw numbers are public at &lt;a href="https://github.com/LeifAlbrand/ragfeed-beispiele" rel="noopener noreferrer"&gt;https://github.com/LeifAlbrand/ragfeed-beispiele&lt;/a&gt;, so you can rerun the comparison yourself — including against another Firecrawl-compatible API (&lt;code&gt;--ohne-llm&lt;/code&gt;). If you want to try it on your own pages, there is a free tier (1,000 pages a month): &lt;a href="https://ragfeed.de" rel="noopener noreferrer"&gt;https://ragfeed.de&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>llm</category>
      <category>rag</category>
      <category>webscraping</category>
    </item>
  </channel>
</rss>
