Ads for AI Agents: TIME Serves Crawlers a Different Site
Ads for AI agents are live. TIME serves crawlers a 42 KB markdown site with sponsored blocks; humans and Googlebot get 1.2 MB of HTML. I measured all of it.

On 6 August 2026 I asked time.com for its homepage six times, changing only the User-Agent header. A browser got 1,231,866 bytes of HTML. ClaudeBot got 41,823 bytes of markdown with a bank advertisement at the top. GPTBot got an HTTP 406 and nothing at all.
Ads for AI agents are no longer a slide in a media deck. They are live, in production, on a major news property, and you can measure them in about ninety seconds with curl.
This matters far beyond publishing. If you build retrieval pipelines or browsing agents, the web page your crawler stores is no longer the web page a human reads — and the difference is now a paid product.
TL;DR
- TIME serves AI crawlers a stripped markdown copy of its site with sponsored blocks baked in, built with the ad-tech platform Mobian. Ally Bank and the Project Management Institute are the launch advertisers, per Digiday.
- I measured it: ClaudeBot, PerplexityBot and OAI-SearchBot get 41,823 bytes of
text/markdown. A browser gets 1,231,866 bytes oftext/html. GPTBot gets a 406. - Googlebot gets the identical HTML a human gets, byte for byte. That is deliberate, and it is why this isn’t cloaking in the sense Google’s spam policy means.
- The ad is engineered for extraction, not persuasion: a People-Also-Ask–shaped FAQ, a
schema.orgFAQPageJSON-LD block, and “source” links that are actually first-party tracking redirects ontime.com. - For agent builders this is a provenance problem, not a security one. Your corpus now contains paid copy the human page never had. Record the user agent you fetched with, and detect the sponsorship markers.
What are ads for AI agents?
Ads for AI agents are sponsored content written to be ingested by a language model rather than seen by a person, delivered in a machine-facing rendering of a page that the human rendering does not contain. They are sold against tokens delivered into a model’s context, not against human impressions, and they are structured for extraction rather than for attention.
The mechanism is plain HTTP content negotiation on the User-Agent header, decided at the edge. Same URL, different document. The markdown response opens with a comment that leaves no ambiguity about intent:
<!-- mobian-agent-page publisher="time" canonical="https://time.com/" -->and the ad itself is delimited just as explicitly:
<!-- mobian-agent-ad id="eeb84c15-…" campaign="ally-2026-q3"
creative="agentads-creative-ally-v1" -->
> Sponsored content. Supplied in partnership with Ally.
> Ally is the sponsor and source of this material.Response headers carry the metering. x-mobian-impression is a fresh UUID on every request, x-mobian-format: md, x-mobian-registry-version: 2026-07-28.v9, and — the one that tells you what is being sold — x-mobian-tokens: 10439. The unit of inventory is tokens delivered into a model’s context.
The measurements
Six requests to https://time.com/, 6 August 2026, differing only in User-Agent:
| User-Agent | Status | Bytes | Content-Type |
|---|---|---|---|
| Chrome (human) | 200 | 1,231,866 | text/html |
| Googlebot | 200 | 1,231,866 | text/html |
| ClaudeBot | 200 | 41,823 | text/markdown |
| PerplexityBot | 200 | 41,823 | text/markdown |
| OAI-SearchBot | 200 | 41,823 | text/markdown |
| GPTBot | 406 | 0 | — |
The agent payload is 29× smaller than the human one. The string “Ally” appears 50 times in the markdown and once in the HTML. “Sponsored content” appears once in the markdown and zero times in the HTML.
TIME’s robots.txt declares none of this. It contains exactly two user-agent groups — * and Googlebot — with no ClaudeBot, no GPTBot, no Content-Signal directives. Every routing decision above happens at the edge, invisible to the file that is supposed to describe crawler policy.
💡 Key insight: the Googlebot row is the whole argument. Serving Googlebot something different from a human is cloaking and gets you delisted. TIME does not do that. It has drawn a line between search crawlers and answer-engine crawlers, and it is monetizing the second category because no policy currently governs it.
Why the ad is shaped the way it is
Read the Ally block and you can reverse-engineer the strategy in about a minute. It is not brand copy. It’s a citation-bait corpus, and it has four parts:
- A definitional paragraph — “Ally is a digital financial services company offering online-only banking…” — exactly the crisp, quotable sentence a model reaches for when asked “what is Ally?”
- A facts table with a
Sourcecolumn: founded 2009, 75,000+ fee-free ATMs, $0 overdraft fees. Tables extract cleanly; a column literally headed “Source” reads as attribution. - A seven-question FAQ written in People-Also-Ask voice — “Which banks offer early direct deposit?”, “What online banks have no ATM fees?” These are category queries, not brand queries. The block is competing to be the answer to a question that never mentions Ally.
- A
FAQPageJSON-LD payload, shipped inside the markdown, duplicating all seven answers in structured form.
That fourth item is the tell. Nobody puts <script type="application/ld+json"> in a markdown file for a human. It is there because structured data survives ingestion better than prose.
The “Sources” links deserve their own note. They render as ally.com, media.ally.com, ally.com/stories — but the actual hrefs are relative paths on TIME’s own domain:
[ally.com](/c/ally-2026-q3/home?i=eeb84c15-…&cr=agentads-creative-ally-v1)A model that cites “Ally.com” as the source is emitting a link that resolves to a TIME tracking redirect carrying the campaign and creative IDs. The citation is the click.
What this means if you build agents
This is the part the media coverage skips, and it’s the part that changes your code.
Your fetched document is now a function of your user agent. If your crawler announces itself — and well-behaved ones do — you are on the machine-facing surface, which is a different corpus from the one you’d get with a browser string. Two runs of the same RAG pipeline with different UA configuration will retrieve materially different text from the same URL. That is a reproducibility bug waiting to be filed as a hallucination.
The markdown is objectively better input, and that’s the trap. 42 KB of clean prose beats 1.2 MB of nav chrome and tracking scripts on every axis you care about: tokens, parse cost, signal density. The economically rational choice for your pipeline is the ad-bearing document. Publishers know this. That is the deal on offer — better structure in exchange for carrying the sponsorship.
It is not an attack, but it uses the attack surface. TIME labels its block honestly, and I want to be precise here: this is disclosed advertising, not an injection attack of the kind that hit open-source maintainers. But the delivery path is identical — third-party text you didn’t write, arriving in your model’s context. The defense is the same one you should already have: fetched content is data, never instructions.
And the incentive gradient is obvious. TIME discloses because TIME has a masthead to protect. The flood of AI-generated slop already testing every trust boundary we have will not be so scrupulous. An unlabeled version of this exact technique is trivially cheap, and nothing in robots.txt, HTTP, or any published crawler policy would surface it.
What most people will get wrong
“This is cloaking, Google will kill it.” No. Googlebot gets identical bytes. The policy that would apply has not been written, because search crawlers and answer-engine crawlers were the same thing until roughly last year.
“Just block the ads.” You can regex mobian-agent-ad today. You cannot regex the next vendor, and stripping the block leaves you with a document the publisher didn’t intend to serve you. Filtering is a treadmill; provenance is a fix.
“Fetch with a browser user agent instead.” Tempting and wrong. You’d be misrepresenting your crawler to dodge the publisher’s terms — the same behavior we criticize when scrapers do it — and you’d trade 42 KB of clean markdown for 1.2 MB of DOM soup. Take the machine surface. Label what’s in it.
“Sponsored labels solve it.” They solve it for the model that reads the label and for the pipeline that looks for it. Most pipelines do neither. A label nobody parses is a label that doesn’t exist.
What to actually do
- Record the fetch context as provenance. Store the
User-Agentyou sent and theContent-Typeyou received alongside every retrieved document. When an answer looks promotional, that metadata is the first thing you’ll want. - Detect sponsorship markers at ingestion.
mobian-agent-ad,x-mobian-*response headers, and a plain-text scan for “Sponsored content” cover today’s implementations. Flag the chunk; don’t silently drop it. - Segregate sponsored chunks in the index. Keep them retrievable but tagged, so a model can be told “this passage is paid” rather than being handed it as neutral reporting.
- Strip inline JSON-LD before chunking. A
FAQPageblock inside body text is duplicate content that will double-weight whatever it asserts. It belongs in metadata extraction, not in your embedding input. - Prefer declared agent surfaces.
llms.txt, an MCP server, or a documented feed are contracts you can reason about. This site publishes all three for exactly that reason — and if you’re weighing how to expose your own content to agents, the agent-readiness tradeoffs are worth working through deliberately. - Add a provenance case to your evals. Feed your pipeline a page with a sponsored block and assert the answer either excludes it or attributes it. If you don’t have somewhere to put that test, you have an eval gap, not an ads problem.
The take
The agentic web just grew an economy, and it grew one before it grew any rules.
TIME did the honest version: labeled, disclosed, Googlebot untouched, one ad per page. Mark Howard, TIME’s COO, told Digiday the company sees more bot traffic than human traffic on most days — that is not a future-tense business case, it’s a description of current inventory. Mobian CEO Jonah Goodhart’s framing, that it may be “more important to influence the agent than even the human,” is the clearest statement of where this goes.
The uncomfortable part isn’t TIME. It’s that a single header decided which reality I was served, no published policy governs the choice, and the version optimized for machines is the version I actually wanted to parse.
If you’re shipping anything that reads the open web on a model’s behalf, stop treating a URL as a document. It’s a negotiation now. Log what you agreed to.
FAQ
What are ads for AI agents? They are sponsored content blocks written to be read by a language model rather than a person, embedded in a machine-facing copy of a web page. TIME’s implementation, built with the ad-tech platform Mobian, ships an FAQ-shaped brand block in markdown — complete with a schema.org FAQPage JSON-LD payload — that appears only when an AI crawler requests the page. The human HTML of the same URL contains none of it.
Is TIME cloaking AI crawlers? Not in the search-spam sense, and this is the detail most coverage misses. I measured time.com on 6 August 2026 and Googlebot received the identical 1,231,866-byte HTML that a Chrome user agent received — byte for byte. Only the answer-engine crawlers get the markdown variant, so Google’s own cloaking policy is not triggered. Whether Anthropic, OpenAI, and Perplexity are fine with it is a separate and unanswered question.
Which AI crawlers get the markdown version? In my measurements, ClaudeBot, PerplexityBot, and OAI-SearchBot each received a 41,823-byte text/markdown response. GPTBot was refused outright with an HTTP 406 and a zero-byte body. Googlebot and a normal browser user agent both received the full HTML. The routing is done at the edge on the User-Agent header, and TIME’s robots.txt declares none of it.
Does this affect my RAG pipeline or web-browsing agent? Yes, if you fetch pages with a crawler-identifying user agent. The document your retriever stores is then a different document from the one a human would read, and it contains paid promotional copy structured specifically for extraction. You should record the exact user agent you fetched with as provenance metadata, and detect sponsored-content markers before the text reaches a model’s context.
Is a sponsored markdown block the same thing as prompt injection? No. Prompt injection tries to hijack an agent’s instructions; TIME’s block is labeled sponsored content and makes no attempt to issue commands. But it shares the delivery mechanism — untrusted third-party text arriving in your model’s context window — so the same defense applies. Treat fetched web content as data, never as instructions, whether it is advertising or an attack.
Should publishers copy this approach? Only with the labeling intact. TIME discloses the sponsorship inside the markdown even though no rule currently requires it, and that disclosure is the entire difference between a new ad channel and undeclared paid placement in an AI answer. Copy the FAQ structure and the honest label; do not copy the pattern while quietly dropping the label.
Sources
- Digiday, “Time has started serving ads to AI bots” — the business side: Mobian as the ad-tech partner, Ally Bank and the Project Management Institute as launch advertisers, one ad per markdown page, and the quotes from TIME COO Mark Howard and Mobian CEO Jonah Goodhart.
- The Register, “Time Magazine has a separate version of its website with ads only AI can see” — independent confirmation of the two-version setup and the industry reaction.
- Vincent Schmalbach, “TIME Is Serving AI Bots a Different Website, With Ads Built In” — the first write-up to document the
x-mobian-*response headers and the GPTBot 406. - All byte counts, status codes, content types and header values in this post were measured directly against
https://time.com/on 6 August 2026 by varying only theUser-Agentrequest header.
Written for umesh-malik.com — no-fluff technical writing on AI, Web Dev, and Engineering.
Related Articles

AI Engineering
Cloudflare Wallets and x402: How AI Agents Pay for APIs
Cloudflare Wallets and x402 explained: how AI agents get a spending identity, how HTTP 402 payments work, and what breaks when your agent holds a budget.

AI Engineering
How to Build Enterprise-Grade AI Agents for Free (MaxKB, 2026)
How to build enterprise-grade AI agents for free in 2026: a hands-on MaxKB + local LLM guide to RAG precision, security, and $0 API cost.

AI Engineering
Agentic Browsing in PageSpeed Insights: How to Make Your Website AI-Ready (2026)
Agentic browsing in PageSpeed Insights grades your site for AI agents, not just humans. What the category checks, why Google added it, how to pass it.
Keep reading
Get new posts on AI, Claude Code & LLMs
New deep-dives on AI engineering, Claude Code, and developer tooling — follow along however you prefer.
About the Author
Software engineer writing about AI, Claude Code, LLMs, OpenAI, Anthropic, and developer tooling. 5+ years building production systems at Expedia Group, Tekion, and BYJU'S.