founder@buildonto.dev

Bengaluru, India

I am RaviRavi Pratap Singh

Founder · Onto · Open Dev Society

← Writing

5 min read

What Claude actually does when it fetches a URL

A breakdown of the differences between Claude, ChatGPT, Gemini, and Perplexity when reading the web.

When you ask an AI agent to read this page, it feels like the model is browsing the way you do. It isn't. What actually happens between the URL and the answer is messier and more consequential than most builders realize, and it differs a lot depending on which system you're using.

The fetch is not what you think

At a high level, fetching a URL is three steps: get the bytes, turn them into something the model can read, and decide how much of it to actually pass in. Every agent does all three. They just make wildly different choices at each step, and those choices decide what the model sees.

Where they diverge

Claude, through tools and the Model Context Protocol, tends to receive whatever the tool hands it — which means quality depends entirely on the fetch layer wired up behind it. Anthropic gives you the plumbing and lets the tool decide what good input looks like.

ChatGPT's browsing leans on OpenAI's own retrieval and rendering stack, tuned for answer synthesis rather than faithful reproduction. Gemini sits close to Google's crawling infrastructure, the most mature at handling JavaScript-heavy pages. Perplexity is built around search-then-read, so it's biased toward many shallow fetches rather than one deep one.

Same URL, four different payloads reaching the model. That's why you can ask the same question of four agents and get four genuinely different answers — not because the models disagree, but because they never read the same thing.

Where it breaks

All of them struggle in the same places. JavaScript-rendered content that only appears after execution. Paywalls and consent walls that return a gate instead of the article. Pages so bloated that the useful text is a thin layer over megabytes of markup. When a fetch fails quietly, the model doesn't tell you it got nothing — it just answers worse.

Why this matters for builders

If you're building on agents, the fetch layer is not a detail you can ignore. It's the input distribution your whole system sits on. Controlling what the model actually receives — clean text, real content, structured fields — is often a bigger lever on quality than swapping the model.

This is the unglamorous layer Onto exists to own: making read this URL return the same reliable, clean result no matter which agent is asking.