# Onto — AI is reading your website wrong.
> Onto serves clean Markdown to AI agents instead of HTML noise. Same content, right format. One line of code. No changes to your site.

**Source:** /how-it-works
**Extracted:** 2026-05-21T20:21:00.799Z

---
System Architecture

## How Onto works.

The compatibility layer for the agent web. AI developers call our API to read any website cleanly. Site owners install our SDK to serve themselves cleanly. Agents will soon act on the web through the same engine. One cleaning engine. One accuracy scoring system. One edge runtime. Three layers built to compound — Read today, Serve alongside, Act as the destination.

01 — The Problem

### What AI agents _actually receive_ from your site today.

When GPTBot, ClaudeBot, or PerplexityBot crawls a modern Next.js app, they download 400–800 KB of HTML, framework classes, JS bundles, inline SVGs, and tracking scripts. Inside all of that, maybe 2–5% is actual semantic content.

The agent reads everything. Burns tokens on everything. When the signal-to-noise ratio is this low, it fills gaps with plausible-sounding fiction. That hallucination is then attributed to your brand.

The cost gravity matters too. Token costs scale linearly with input size. Even if a future model could understand 800 KB perfectly, sending it would still cost **100×** more than sending 8 KB. Compatibility layers win on economics regardless of how smart models become.

Waste factor

92–98%

Token fragility

High

Signal density

~0.8%

GPTBot\_Crawl\_2026.log

// PACKET\_DUMP\_STREAM
001  <div class="flex min-h-screen flex-col
002    items-center justify-between p-24">
003    <div class="z-10 max-w-5xl w-full
004      items-center justify-between font-
005      mono text-sm lg:flex">
...  \[400+ lines of structural noise\]
...  \[Tailwind utility classes\]
...  \[Tracking & analytics scripts\]
  ┌─ FRAGMENT DETECTED ─  642  <p>Our product costs $49/mo</p>  └────────────────────
...  \[Remaining DOM hierarchy\]

**596 KB** ingested**~0.8%** semantic

02 — The Solution

### Two products today. _Three layers tomorrow._

Onto installs over the current web stack and exposes machine-native interfaces while preserving the human experience. Developers call the API. Site owners install the SDK. Agents will soon act through the same engine. Detection and routing happen at the edge in under 1 ms. Nothing changes for human visitors.

Path ALayer 01 · Read LiveFor AI developers

#### Call the API. Get clean Markdown.

AI developers call `api.buildonto.dev` with any URL. Onto fetches the page, runs the cleaning engine, and returns clean Markdown plus an accuracy score — sub-100 ms on cache hits, single-digit-second cold fetches. Works for any site on the internet — no SDK needed on the source. A Firecrawl alternative with hallucination risk flagging and AIO scoring no competitor has.

curl · read

\# Firecrawl alternative
curl https://api.buildonto.dev/v1/read \\
  \-H "Authorization: Bearer $TOKEN" \\
  \-d '{"url":"https://example.com"}'

Layer 1 also ships as an MCP server. Direct integration with Claude Code, Cursor, and any MCP-compatible client. Submit a URL, get clean Markdown back, no curl needed.

Path BLayer 02 · Serve AlphaFor site owners

#### Install the SDK. Serve yourself cleanly.

Site owners install one line in middleware. AI crawlers get clean Markdown at the edge. Humans get the full HTML experience, unchanged. Detection and routing happen at the edge in under 1 ms — nothing changes for human visitors.

Three steps. Zero friction.

01Detection

##### Request arrives

Any visitor hits your URL. Onto's edge middleware inspects the Accept header and User-Agent string in under 1ms. Human browsers send Accept: text/html. AI agents send Accept: text/markdown or use known crawler User-Agents like GPTBot, ClaudeBot, or PerplexityBot.

02Routing

##### Middleware routes

Based on who's asking, the middleware rewrites the request. Humans get the full HTML experience — nothing changes. AI agents get rewritten to your pre-compiled .onto payload. Sub-15ms overhead at p99. Zero network calls for human traffic.

03Serving

##### Clean payload served

The AI agent receives compact, semantic Markdown with preserved heading hierarchy, tables, code blocks, and structured metadata. 10–100× smaller. Accurate pricing. Correct features. Zero hallucination noise.

03 — Protocol

### Two paths. _One URL._

The same canonical URL serves two faithful representations based on who's asking. **Standard HTTP content negotiation, not cloaking.** The same reason a server returns JSON for an API call and HTML for a browser, applied to the agent web.

Human path

Standard browser

Request

Accept: text/html

Middleware

No agent signal → pass through

Response

Full React / HTML experience

Payload

596 KB (unchanged)

Agent path

Onto active

Request

Accept: text/markdown

Middleware

Agent detected → rewrite to .onto

Response

Clean Markdown + JSON-LD

Payload

**8–12 KB (98% reduction)**

04 — Extraction example

### What an AI agent receives _from your pricing page._

Onto preserves heading hierarchy, lists, tables, code blocks, and JSON-LD. The output is byte-for-byte deterministic — the same URL always produces the same Markdown. Agents get accurate facts about your product.

Protocol · Semantic\_Extraction\_v1.0.onto/md · validated

1\# Acme SaaS — Pricing

2

3\> Enterprise-grade automation for modern teams.

4

5\## Plans

6

7\- **Starter** — $29/mo · 5 users, 10K events

8\- **Pro** — $99/mo · 25 users, 100K events

9\- **Enterprise** — Custom · unlimited everything

10

11\## Key features

12

13\- Real-time analytics dashboard

14\- SOC 2 Type II certified

15\- 99.99% uptime SLA

Total payload12 KB

Lines15

Hallucination riskNone

Live verification

> “Onto literally serves clean Markdown to AI agents instead of raw HTML, and their own scoring page demonstrates that by responding with `text/markdown` content. They practice what they preach.”

— Claude, fetching `buildonto.dev/scoring`

When we asked the same question to ChatGPT, Gemini, and Perplexity, ChatGPT hallucinated a completely fabricated formula. Gemini and Perplexity failed to fetch. Claude returned the formula exactly correct, with explicit `text/markdown` MIME type confirmation. This is the problem Onto solves, demonstrated live with the largest LLM in production.

05 — The Stack

### Six components. _One system._

The same cleaning engine powers every layer. Same accuracy scoring. Same edge runtime. Same auth. Build for agents once and never re-do it.

Live

#### Read API

Any AI developer turns dirty web HTML into clean Markdown plus an accuracy score — sub-100ms cache hits, single-digit-second cold fetches. A Firecrawl alternative. Works on any site without that site installing anything.

curl · /v1/read

\# Firecrawl alternative
curl https://api.buildonto.dev/v1/read \\
  \-H "Authorization: Bearer $TOKEN" \\
  \-d '{"url":"https://stripe.com"}'

\# →
{
  "markdown":"# Stripe — Online payments…",
  "score": 87,
  "hallucination\_risk": "low"
}

Live

#### AIO Score Calculator

Free public tool. Drop any URL, get an instant AI-readiness report. 127 sites scanned, avg score 51 / 100.

Live

#### MCP Server

Read API wrapped as an MCP server. Direct integration with Claude Code, Cursor, and any MCP client.

Alpha

#### @ontosdk/next SDK

Open-source Next.js plugin. Routes compile to clean Markdown at build time. Vue, Angular, and WordPress on the roadmap.

Alpha

#### Edge Middleware

Bot-aware routing at the CDN edge. Clean payloads to agents, full HTML to humans. Under 15 ms overhead at p99.

Live

#### Control Plane

Dashboard for agent analytics, per-route context injection, and policy management at app.buildonto.dev. See which agents crawl your site — and control what they see.

06 — The Destination

### Layer 3 — when agents _stop reading_ and start acting.

Reading the web cleanly is the first step. Serving it cleanly is the second. The third step is the one that turns the agent web from a research surface into a transactional one.

Layer 03 · Act Coming Q3 2026For autonomous agents

Agents use any website programmatically without breaking when the UI changes. Not by clicking pixel coordinates the way Playwright does. Not by chasing CSS selectors the way Browserbase does. Onto's Act layer models the page as semantic intent first — buy plan, submit form, complete checkout — then translates that intent into action commands the page can execute. Same cleaning engine that powers Read and Serve. Same accuracy scoring. Same edge runtime.

This is why the three layers compound. Read and Serve aren't separate products from Act — they're the foundation Act requires. The cleaning engine that extracts semantic structure for an agent to read is the same engine that lets an agent understand the page well enough to act on it. Companies trying to build browser interaction without the semantic layer underneath fail when the UI changes by 2 pixels. Onto doesn't.

layer 3 · act.ts

\# Layer 3 — Coming Q3 2026
await onto.act({
  url: "https://example.com/pricing",
  intent: "subscribe to pro plan",
  context: { email: "user@company.com" }
})

// Returns semantic action result
{
  status: "completed",
  confirmation\_id: "sub\_abc123",
  final\_url: "/dashboard"
}

When Layer 3 ships, agents won't just read your site. They'll book your demo, sign up for your trial, complete checkout, and update their account — through one engine, with the same accuracy scoring and hallucination risk flagging that protects Read and Serve. That's the compatibility layer thesis fully shipped. That's the agent web fully programmable.

For AI developers

#### Building an agent? Try the API.

Free tier, 1,000 requests per month. No card required.

[Read the API docs](https://docs.buildonto.dev/api/read)

For site owners

#### Want to know what AI agents see on your site?

Free instant report. No signup.

[Scan your site](/#scanner)

[Read the scoring methodology](/scoring)