# Onto — AI is reading your website wrong.
> Onto serves clean Markdown to AI agents, scores AI-readiness, and shows which agents touch your site — so you can decide what they're allowed to do.

**Source:** /index
**Extracted:** 2026-08-28T19:19:40.068Z

---
## The web is written for eyes. Agents don't have any.

Onto serves clean Markdown to AI agents over content negotiation. Same URL, same site. Humans keep the full page — agents stop guessing.

[Scan your site →](#scan)[Read the spec](#spec)

$`npm install @ontosdk/next`

[See what an agent gets from your page ↗](#score)

Free tier · 1,000 credits / month · no card

Agents reading sites through Onto

*   OGPTBot
*   ![Anthropic](/_next/image?url=%2Fanthropic.png&w=48&q=75)ClaudeBot
*   ![Perplexity](/_next/image?url=%2Fperplexity.png&w=48&q=75)PerplexityBot
*   ![Google](/_next/image?url=%2Fgoogle.png&w=48&q=75)Google-Extended
*   ![Microsoft](/_next/image?url=%2Fmicrosoft.png&w=48&q=75)Bingbot
*   ![Meta](/_next/image?url=%2Fmeta.png&w=48&q=75)Meta-ExternalAgent
*   ![Amazon](/_next/image?url=%2Famazon.png&w=48&q=75)Amazonbot
*   ![xAI](/_next/image?url=%2Fxai.png&w=48&q=75)Grok
*   ![DuckDuckGo](/_next/image?url=%2Fduckduckgo.png&w=48&q=75)DuckAssistBot
*   ![ByteDance](/_next/image?url=%2Fbytedance.png&w=48&q=75)Bytespider
*   ![DeepSeek](/_next/image?url=%2Fdeepseek.png&w=48&q=75)DeepSeekBot
*   ![Cohere](/_next/image?url=%2Fcohere.png&w=48&q=75)cohere-ai
*   ![Common Crawl](/_next/image?url=%2Fcommoncrawl.png&w=48&q=75)CCBot
*   ![Yandex](/_next/image?url=%2Fyandex.png&w=48&q=75)YandexBot
*   ![You.com](/_next/image?url=%2Fyou.png&w=48&q=75)YouBot
*   ![Brave](/_next/image?url=%2Fbrave.png&w=48&q=75)Brave Leo
*   ![Tencent](/_next/image?url=%2Ftencent.png&w=48&q=75)TencentBot

*   OGPTBot
*   ![Anthropic](/_next/image?url=%2Fanthropic.png&w=48&q=75)ClaudeBot
*   ![Perplexity](/_next/image?url=%2Fperplexity.png&w=48&q=75)PerplexityBot
*   ![Google](/_next/image?url=%2Fgoogle.png&w=48&q=75)Google-Extended
*   ![Microsoft](/_next/image?url=%2Fmicrosoft.png&w=48&q=75)Bingbot
*   ![Meta](/_next/image?url=%2Fmeta.png&w=48&q=75)Meta-ExternalAgent
*   ![Amazon](/_next/image?url=%2Famazon.png&w=48&q=75)Amazonbot
*   ![xAI](/_next/image?url=%2Fxai.png&w=48&q=75)Grok
*   ![DuckDuckGo](/_next/image?url=%2Fduckduckgo.png&w=48&q=75)DuckAssistBot
*   ![ByteDance](/_next/image?url=%2Fbytedance.png&w=48&q=75)Bytespider
*   ![DeepSeek](/_next/image?url=%2Fdeepseek.png&w=48&q=75)DeepSeekBot
*   ![Cohere](/_next/image?url=%2Fcohere.png&w=48&q=75)cohere-ai
*   ![Common Crawl](/_next/image?url=%2Fcommoncrawl.png&w=48&q=75)CCBot
*   ![Yandex](/_next/image?url=%2Fyandex.png&w=48&q=75)YandexBot
*   ![You.com](/_next/image?url=%2Fyou.png&w=48&q=75)YouBot
*   ![Brave](/_next/image?url=%2Fbrave.png&w=48&q=75)Brave Leo
*   ![Tencent](/_next/image?url=%2Ftencent.png&w=48&q=75)TencentBot

*   OGPTBot
*   ![Anthropic](/_next/image?url=%2Fanthropic.png&w=48&q=75)ClaudeBot
*   ![Perplexity](/_next/image?url=%2Fperplexity.png&w=48&q=75)PerplexityBot
*   ![Google](/_next/image?url=%2Fgoogle.png&w=48&q=75)Google-Extended
*   ![Microsoft](/_next/image?url=%2Fmicrosoft.png&w=48&q=75)Bingbot
*   ![Meta](/_next/image?url=%2Fmeta.png&w=48&q=75)Meta-ExternalAgent
*   ![Amazon](/_next/image?url=%2Famazon.png&w=48&q=75)Amazonbot
*   ![xAI](/_next/image?url=%2Fxai.png&w=48&q=75)Grok
*   ![DuckDuckGo](/_next/image?url=%2Fduckduckgo.png&w=48&q=75)DuckAssistBot
*   ![ByteDance](/_next/image?url=%2Fbytedance.png&w=48&q=75)Bytespider
*   ![DeepSeek](/_next/image?url=%2Fdeepseek.png&w=48&q=75)DeepSeekBot
*   ![Cohere](/_next/image?url=%2Fcohere.png&w=48&q=75)cohere-ai
*   ![Common Crawl](/_next/image?url=%2Fcommoncrawl.png&w=48&q=75)CCBot
*   ![Yandex](/_next/image?url=%2Fyandex.png&w=48&q=75)YandexBot
*   ![You.com](/_next/image?url=%2Fyou.png&w=48&q=75)YouBot
*   ![Brave](/_next/image?url=%2Fbrave.png&w=48&q=75)Brave Leo
*   ![Tencent](/_next/image?url=%2Ftencent.png&w=48&q=75)TencentBot

The difference\[01/06\]

### Same page.  
Two different webs.

One URL, one request. What comes back depends entirely on who is asking — and the whole difference is **812 KB** against **8 KB**.

The cost\[02/06\]

### It doesn't fail loudly.  
It answers anyway.

An agent that can't parse your pricing page still gets asked about your pricing. It reads what it can, fills the gaps, and replies with confidence.

Without Onto

The agent parses your markup

*   Markup arrives, not content
*   Declared prices are missed
*   Gaps get filled from guesswork
*   Nothing specific to cite

“Acme's Pro plan is around _$29 a month_, I believe.”

hallucinated — the price never appeared in the payload

With Onto

The agent is served Markdown

*   Content arrives, not markup
*   Prices survive as plain text
*   Structure is already declared
*   The URL is citable

“Acme Pro is **$20/mo** and includes 100,000 reads.”

cited correctly from the served Markdown

Control plane · Soon

### Analytics for readers who never render a pixel.

Every agent hit, every failed action, every citation.

acme.com

All_6_Cited_2_Failed_1_Blocked_1_

GPTBot/pricingReadStructured · 8 KB12s

ClaudeBot/book-a-callAttempted bookingFailed · form hidden1m

PerplexityBot/docs/apiReadCited correctly3m

Bingbot/changelogReadStructured · 4 KB6m

ClaudeBot/docs/quickstartReadCited correctly8m

Unknown UA/adminReadBlocked · not on allowlist9m

AIO Score\[04/06\]

### A number for how readable you are.

Starts at 100 and subtracts. Every point lost traces to a named structural fault, not a weighting nobody can audit.

acme.comNeeds work_medium hallucination risk_

**65**of 100

−10

−20

−5

1.  robots.txt allows AI crawlersGPTBot and \* permitted0
2.  Markdown layer detectedAccept negotiation or a .md route0
3.  Markdown is Onto-managedpresent, but not served by the SDK−10
4.  React Tax above 30%cleaned-HTML to raw-HTML ratio0
5.  Raw page under 200 KB184 KB0
6.  JSON-LD schema markupnone found on the page−20
7.  Two or more headingsh1 / h2 / h30
8.  Every image has alt textone image missing alt−5

Starts at 100 and subtracts. 3 faults, 35 points, every one traceable to a named check — no weighting to audit.

Spec\[05/06\]

### The numbers, without the pitch.

Tokens saved per read

205,824

812 KB of HTML in · 8 KB of Markdown out · ≈4 bytes per token

**812 KB**typical payload in

**8 KB**payload out

**102×**smaller

**<100 ms**cache hit

01/readClean Markdown + metadata02/scoreAIO score, 0–10003/batchUp to 50 URLs04/mapURL list from sitemap05/extractJSON-LD, OpenGraph, meta

/v1/read

$ curl api.buildonto.dev/v1/read \\
  \-H "Authorization: Bearer onto\_sk\_…" \\
  \-d '{"url":"https://stripe.com"}'

{
  "status": "success",
  "url": "https://stripe.com",
  "markdown": "# Stripe\\n\\n…",
  "metadata": { title, description, language },
  "stats": { raw\_size, markdown\_size },
}

_MCP_read\_url_Cost_1 credit

Pricing\[06/06\]

### Priced on usage, not per seat.

Start free. Every tier is the same API — only the ceiling moves.

Read APIServe

2 concurrent · hard monthly cap

$0forever

1,000 credits / month

[Start free](https://app.buildonto.dev/signup)

Includes

*   Read · Score · MCP server
*   Clean Markdown + AIO accuracy score
*   Community support

5 concurrent · top up with credits

$9/ month

10,000 requests / month

[Upgrade to Starter](https://app.buildonto.dev/read/billing)

Includes

*   Everything in Free
*   Credit packs unlock overage
*   Email support

20 concurrent · priority queue

$49/ month

100,000 requests / month

[Upgrade to Growth](https://app.buildonto.dev/read/billing)

Includes

*   Everything in Starter
*   Priority queue · lower cold-fetch latency
*   Credit packs unlock overage

50 concurrent · shared Slack

$250/ month

500,000 requests / month

[Upgrade to Scale](https://app.buildonto.dev/read/billing)

Includes

*   Everything in Growth
*   Shared Slack support
*   Higher rate limits on bulk reads

Custom SLA + dedicated infra

Customannual

Unlimited sites

[Contact sales](mailto:founder@buildonto.dev)

Includes

*   Volume + custom retention
*   DPA, security review, SSO
*   Dedicated solutions engineer

### Find out what agents actually read on your site.

Free scan. Real payload, real score, no signup.

Scan

Measured by Onto · refreshed every minute

374

sites scanned

50/100

average AIO score

0.08 GB

of bloat measured

---
## Structured Data (JSON-LD)
```json
{
  "@context": "https://schema.org",
  "@type": "AboutPage",
  "name": "About Onto",
  "url": "https://www.buildonto.dev/",
  "description": "Onto serves clean Markdown to AI agents instead of HTML noise. It solves the React Tax by intercepting AI bot traffic and serving optimized content at the Edge."
}
```
