Your Scraper Doesn't Know What It Just Downloaded — Here's Why That Breaks Agents
Most scraping tools hand every fetched page to an agent as the same flavor of markdown, and the guessing that requires is exactly where agent pipelines quietly fail — Gyrence instead detects what a page actually is and returns a matching, typed structure.
If you've wired a large language model — an AI system trained to read and generate text — up to fetch pages from the open web, you've probably hit this pattern: your scraper pulls down a page, converts it to markdown (a lightweight text formatting syntax), and hands that string to the model. Most of the time it works. Then one day the "page" is actually a comma-separated values file (a spreadsheet-style table saved as plain text, usually shortened to CSV), or a machine-readable feed of financial figures, or a regulatory filing in a specialized accounting format, and the markdown converter does something between "produces garbage" and "silently drops half the numbers." The model doesn't know it received garbage. It just answers confidently, based on garbage.
This is the part of agent-building infrastructure that gets the least attention and causes the most quiet damage: not "can I fetch the page" but "do I actually know what I fetched, and did I hand the model a structure it can reason about."
The guessing problem
A typical scraping library treats the internet as one format: HyperText Markup Language (HTML), the markup language behind ordinary web pages. Everything gets funneled through an HTML-to-markdown converter, whether the target is a news article, a raw JSON (JavaScript Object Notation, a common structured data format) application programming interface (API) response, an RSS feed (a machine-readable content feed format used for news and blogs), or a financial filing. Feed a spreadsheet-shaped file or a binary document through an HTML converter and you get output that looks like a paragraph of text — which is worse than an obvious error, because nothing signals to the downstream agent that it should distrust what it just read.
Detecting the shape before converting it
Gyrence's Fetch primitive — one of the retrieval building blocks behind its managed retrieval API for AI agents — is built around a different assumption: figure out what the uniform resource locator (URL) actually points to before deciding how to parse it. Fetch inspects response headers, the file's byte signature, and its path, then routes to a format-specific parser. Every response carries a kind field naming what was detected, so the calling code (or the agent) never has to guess.
Sixteen content kinds are handled natively. Ordinary web pages come back as cleaned markdown with a separate link graph and title. JSON comes back as a typed object rather than a re-stringified blob. Comma-separated and tab-separated files get their headers inferred and rows returned as typed records. YAML (a human-readable structured data format) is parsed into JSON-shaped objects with comments stripped. Extensible Markup Language (XML) files, sitemaps, and RSS/Atom/JSON feeds are returned as structured trees or item lists, not flattened strings. Regulatory filing formats like XBRL and inline XBRL — machine-readable formats used for financial disclosures — preserve their exact source precision rather than getting mangled by generic conversion. Columnar data formats such as Parquet and Arrow come back as typed rows with an accompanying schema.
That last case shows the philosophy at work: some columnar files contain decimal numbers precise enough that converting them to JavaScript's native number type would silently lose precision. Instead of quietly rounding, Gyrence flags those values with an approximationRisk marker so the caller can decide how to handle them — a value you can see and reason about beats a wrong value you can't. Similarly, when a document type is genuinely outside what's supported, Fetch returns a structured refusal instead of a populated-but-wrong markdown field. Every response also carries a via field noting whether it was served from a direct HyperText Transfer Protocol (HTTP) request or an escalated browser render, so you know how much to trust the render, too.
Why this matters more once an agent is driving
A person skimming scraped output will notice when a table has clearly disintegrated into nonsense text. An autonomous agent chaining several tool calls together often won't — it will extract a wrong number from a mangled table and keep going, because nothing in the response told it to be suspicious. Typed, kind-aware output turns that failure mode into something checkable in code, before it reaches the model's context at all.
This is also why Gyrence exposes its primitives as a native Model Context Protocol (MCP) server — a standard that lets AI applications call external tools directly — reachable at a single per-key endpoint and compatible with Claude Desktop, Cursor, and MCP-aware frameworks including LangChain and AutoGen. An agent framework can call Fetch the same way a REST client does, receive the same kind-tagged structure, and branch its own logic on what actually came back, rather than pattern-matching against a markdown string and hoping.
If you're building a pipeline that hands scraped web content to a model, the question worth asking isn't just "does my fetch succeed" — it's "does the format of what came back survive contact with an agent that isn't going to double-check it by eye." That's the gap Fetch's content-aware output is built to close.