TL;DR

  • Markdown for Agents is a Cloudflare network feature that converts an HTML page into Markdown when a client asks for it in the Accept header, so an AI agent receives a compact document stripped of navigation, footers and scripts.
  • Cloudflare made the feature generally available on 9 November 2026 and added an Analytics tab, sampled Logs, a Playground that compares Markdown against HTML, a GraphQL dataset and a tracing span for each conversion.
  • The mechanism is HTTP content negotiation: Cloudflare fetches the HTML from the origin, converts the body on the fly, streams the result and leaves the origin's security and cache headers in place.
  • A converted response sets Content-Type to text/markdown, adds Accept to Vary, and omits ETag and Last-Modified; the validators used by conditional requests are therefore absent.
  • The dashboard reports conversion attempts, a full conversion rate, partial and failed conversions, top pages, user agents and an estimated token reduction over a seven-day window that is queryable through GraphQL as well.
  • Every token figure is an estimate based on bytes divided by four and sample-weighted counts from full conversions, so a saving describes bytes delivered; a tokenizer-specific count requires running the target tokenizer.
  • A full outcome means no content-limit flag fired. HTML preservation requires a separate assessment, which makes the partial rate the number a content team should watch.
  • User agents are client-supplied strings, and Cloudflare verifies no bot identity behind them, so the breakdown tells a team what callers claim about themselves, and the page URLs exclude query strings and fragments.
  • The feature covers Pro, Business and Enterprise plans plus SSL for SaaS at no cost, converts HTML only, and stops converting above 6 MiB of decompressed HTML.

Cloudflare added measurement tools to the feature it announced in February. Converting pages to Markdown gives agents the requested representation; conversion outcomes, estimated savings and failure locations turn that delivery path into an engineering decision.

Netics sequence diagram of a Markdown for Agents request, from the Accept header to the converted response

Netics visual, 10 November 2026: the request path the reference page describes, where the edge asks the origin for HTML and returns Markdown.

What the Agent Readiness dashboard now counts

The changelog entry is short and unusually concrete about scope. Under Agent Readiness in the dashboard, the Markdown for Agents panel now carries three tabs. Analytics shows conversion outcomes, an estimated token reduction, the top converted pages, the top user agents, failure reasons, content limits and the pages with partial or failed conversions. Logs shows sampled conversion events with an outcome, a failure reason and content-limit filters. The Playground requests Markdown for one path and compares it with the HTML response, including the headers and the estimated token reduction.

The same numbers leave the dashboard through the GraphQL Analytics API as markdownForAgentsAdaptiveGroups, at zone and account scope, and through Cloudflare Traces as a markdown_conversion span on sampled streaming conversions. That span carries the conversion outcome, the input and output bytes, the converter CPU time, the longest processing slice and the content-limit flags. For an operator, the trace is the part that attaches a delivery decision to a request timeline, where a daily total hides it.

Content negotiation is the mechanism underneath

The feature runs at Cloudflare's edge in front of the origin. When a client sends Accept with text/markdown among its options, Cloudflare fetches the HTML version from the origin, converts it and serves the result, adding a Vary on Accept so caches keep separate variants for the two representations. The reference page invites people to test it against Cloudflare's own documentation and blog with a single curl request.

The output has a stable shape, which is the part that matters for anyone consuming it in code. A YAML frontmatter block is prepended when the source page carries supported meta tags, with title, description and image taken from the standard meta form first and the Open Graph form as a fallback. Navigation, footers, scripts and styles are stripped during pre-processing, and any JSON-LD in the source is preserved at the end of the document in a single fenced block. Consumption gets predictable without the consumer writing per-site parsers.

Cloudflare Markdown for Agents analytics tab, developers.cloudflare.com/fundamentals/reference/markdown-for-agents

The Analytics tab as published in the reference page: conversion attempts, full conversion rate, estimated token reduction and the partial and failed counts beside them. Image from https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/.

Response headers on a converted page

The header contract is documented with a precision that makes it worth reading twice. Security and cache headers survive conversion, including Strict-Transport-Security, Content-Security-Policy, X-Frame-Options, Set-Cookie, the CORS headers and the caching headers. Cloudflare changes the body-derived headers to match the converted response: Content-Type becomes text/markdown, Content-Length is removed to support streaming, and ETag, Last-Modified, Content-Encoding, Content-Range and Transfer-Encoding are dropped because their values belong to the original HTML body.

Dropping the validators has consequences that reach outside the feature. A conditional request cannot be answered for a converted response, so an agent that polls a page with If-None-Match pays for a full transfer every time and a monitor counting requests sees a different pattern from the HTML side. A team that stores Markdown downstream also loses the cheap way to tell whether the page changed, which pushes change detection back onto a content hash of its own.

Netics claim-versus-check card on what the conversion analytics count and what they leave open

Netics visual, 10 November 2026: the split between the numbers the dashboard reports and the questions they leave to the team.

Token savings are byte estimates over seven days

The definition of the saving is worth quoting because it decides how the figure should be read: bytes divided by four, rounded down, weighted by sampling, computed only over full conversions that carry a positive input estimate. Queries cover at most seven days of history, and a single dataset query returns at most 1,000 groups. Cloudflare also publishes the formula for a reduction ratio and warns that the estimated value turns negative when the Markdown output is larger than its HTML input.

An engineering team should treat that number as a bandwidth proxy. Dividing the byte count by four gives a serviceable approximation for English prose, with lower accuracy for code, tables and identifier-heavy pages where a real tokenizer can produce a different count. As a trend line, it shows whether the Markdown variant moves meaningfully less data than the page it replaces. Its use as a cost model introduces an error the team has not measured.

Netics warning box on the difference between a full conversion and a lossless copy

Netics visual, 10 November 2026: the caveat the documentation states in its own words, and the estimate behind every token figure.

Partial conversions are the number worth watching

The outcome vocabulary is where the documentation earns its keep. A full conversion means the content-limit flags are all false. Cloudflare defines this outcome by those flags. Preservation fidelity requires a separate assessment. A partial conversion means a limit truncated the input or dropped the frontmatter or the JSON-LD. Two more outcomes cover a conversion whose limit state cannot be established and a stream that never reached a terminal state.

The limitations explain the flags: the converter accepts HTML input and stops at 6 MiB of decompressed HTML. A large documentation page about a data platform can cross that line, and the failure is quiet in the sense that matters, since the agent receives a document that parses and simply lacks the section it came for. Watching the partial rate by section of a site turns that into a content decision about page size, which is cheaper to fix than a crawl budget.

Cloudflare changelog entry, developers.cloudflare.com/changelog/post/2026-11-09-markdown-for-agents-observability

The changelog entry on 10 November 2026, where the Analytics, Logs and Playground tabs are each described in one line. Page from https://developers.cloudflare.com/changelog/post/2026-11-09-markdown-for-agents-observability.

Turning the analytics into a crawl budget decision

The remaining caveat is the one no dashboard can fix. Cloudflare says the user agents in the analytics are client-supplied strings, with no verified bot identity behind them, which is a fair statement and a hard limit: a scraper that presents a popular agent's user agent appears in the same bucket as that agent. Read the top-user-agent list as a claim, and pair it with whatever identity signal the zone already has.

What the feature does deliver is a measurable floor for an AI-readiness programme. A team can enable conversion for documentation and blog paths through a configuration rule, leave the application untouched, and then decide with data: the share of full conversions, the pages that keep converting partially, and the byte reduction across the top pages. Measuring the content delivered to a crawler also applies to DevOps pipelines and managed monitoring, where crawler delivery belongs in the pipeline's success criteria.

Cloudflare Markdown for Agents reference page, developers.cloudflare.com/fundamentals/reference/markdown-for-agents

The reference page on 10 November 2026, where the response-header section lists what a converted response keeps and what it drops. Page from https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/.

Originally published on the Netics blog.