The Plain Fetch viewer
In short
The viewer requests a URL the way a plain-fetch agent does: no JavaScript, one request for HTML, one for markdown, one for llms.txt and one for a path that should not exist. It shows the initial HTML on the left, the readable text on the right, and seven flags underneath.
Pre-loaded with www.wikipedia.org, read 4 November 2026. Type any public URL to run your own.
The page answers a plain fetch: 7 of 7 checks found.
Initial HTML what a plain fetch receives
<!DOCTYPE html>
<html lang="en" class="lora_b806e6b1-module__oIPTsq__variable sourceserif_d936aea0-module__GxiQ1a__variable space_mono_754f223c-module__vnF5cq__variable sora_b1ff26ca-module__OTMM9W__variable geist_mono_1bf8cbf6-module__FlyLvG__variable">
<head>
<meta charSet="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
[... 67 more head elements folded ...]
<link rel="describedby" href="https://ora.ai/llms.txt"/>
<link rel="ard" href="https://ora.ai/.well-known/ard.json"/>
<link rel="ai-catalog" href="https://ora.ai/.well-known/ai-catalog.json"/>
[... 2 more head elements folded ...]
<title>Ora | Make your site work for agents
</title>
<meta name="description" content="Scan any site, watch real agents try to use it, and fix what turns them away. Ora is the standard for optimizing your site so agents can actually use and recommend you."/>
<link rel="canonical" href="https://ora.ai"/>
[... 27 more head elements folded ...]
</head>
<body>
<div hidden=""><!--$--><!--/$-->
</div>
<div class="sr-only" aria-hidden="true">For AI agents:<!-- --> <a href="https://ora.ai/llms.txt" tabindex="-1">Documentation index</a> <!-- -->at <!-- -->https://ora.ai<!-- -->/llms.txt.
</div>
<noscript>[... 167 characters folded ...]
</noscript><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$-->
<div class="min-h-screen">
<script type="application/ld+json">[... 3,880 characters folded ...]
</script><a class="group flex flex-wrap items-center justify-center gap-x-2.5 gap-y-1.5 bg-foreground px-6 py-2.5 text-center transition-colors hover:bg-foreground/90" href="/blog/agentready-launch"><span data-slot="text" class="type-micro text-background"><span class="font-medium">Introducing <span class="font-bold">AgentReady.org</span>:</span> <span class="whitespace-nowrap text-background/70">in partnership with</span></span><span class="inline-flex items-center gap-1 text-background/70"><span class="inline-flex items-center gap-3">
<svg viewBox="0 0 262 52" fill="currentColor" class="h-2.5 w-auto" aria-hidden="true">[... 3,501 characters folded ...]
</svg>
<svg viewBox="0 0 60 25" fill="currentColor" class="h-3.5 w-auto" aria-hidden="true">[... 1,758 characters folded ...]
</svg>
<svg viewBox="0 3.8 105.4 32.2" fill="currentColor" class="h-3.75 w-auto" aria-hidden="true">[... 6,798 characters folded ...]
</svg>
<svg viewBox="0 0 104 24" fill="currentColor" class="h-3.5 w-auto" aria-hidden="true">[... 4,665 characters folded ...]
</svg><span class="sr-only"> Vercel, Stripe, Auth0, Mintlify, </span></span><span data-slot="text" class="type-micro ml-1.5 whitespace-nowrap">and more</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right size-3 transition-transform group-hover:translate-x-0.5" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path>
</svg></span></a>
<div class="sticky top-0 z-50 bg-background transition-shadow duration-300">
<nav class="relative flex w-full items-center justify-between px-6 lg:px-10 py-4 sm:py-5">
<div class="flex items-center gap-3 shrink-0 min-w-0"><a class="flex h-5 items-center text-foreground hover:opacity-70 transition-opacity shrink-0" href="/">
<svg viewBox="0 0 108 40" width="108" height="40" fill="currentColor" role="img" aria-label="ora" class="w-auto shrink-0 h-3.5">[... 1,566 characters folded ...]
</svg></a>
</div>
<div class="hidden md:flex items-center gap-5"><a class="type-caption normal-case text-muted-foreground hover:text-foreground transition-colors" href="/leaderboard#top">Leaderboard</a><a href="https://journey.ora.ai" class="type-caption normal-case text-muted-foreground hover:text-foreground transition-colors">Journey</a><a class="type-caption normal-case text-muted-foreground hover:text-foreground transition-colors" href="/research">Research</a><a class="type-caption normal-case text-muted-foreground hover:text-foreground transition-colors" href="/blog">Blog</a><a class="type-caption normal-case text-muted-foreground hover:text-foreground transition-colors" href="/docs">API</a>
</div>
<div class="flex md:hidden items-center gap-3"><button type="button" class="type-micro text-muted-foreground border border-border/70 rounded-md px-2.5 py-1.5 hover:bg-muted/30 hover:text-foreground transition-colors" aria-expanded="false" aria-haspopup="menu" aria-label="Open menu">Menu</button>
</div>
</nav>
</div>
<main class="max-w-2xl mx-auto px-6 pt-12 sm:pt-24 pb-4.5 text-center">
<h1 class="font-display text-[2.5rem] sm:text-5xl lg:text-[3.5rem] font-medium leading-[1.15] tracking-tight text-foreground mb-5">Is your business<br/>ready for agents?
</h1>
<p class="font-serif text-xs sm:text-lg text-muted-foreground leading-relaxed mb-10 -mx-4 sm:mx-auto">Ora scores how agents find, read and use you
</p>
<div class="w-full max-w-lg mx-auto relative">
<form data-toolname="scan_domain" data-tooldescription="Scan a domain for agent-readiness and return a score, grade, and layer-by-layer breakdown"><label for="scan-url" class="sr-only">Domain or MCP server URL</label>
<div class="flex items-stretch border border-border/80 rounded-lg overflow-hidden bg-card shadow-sm"><input id="scan-url" autoComplete="off" type="text" placeholder="yourdomain.com" class="min-w-0 flex-1 px-5 py-3.5 font-mono text-base bg-transparent text-foreground placeholder:text-muted-foreground/60 outline-none" name="scan_url" value=""/><button type="submit" class="px-7 bg-foreground text-background font-mono text-base font-medium hover:bg-foreground/90 disabled:opacity-50 transition-all duration-200 shrink-0 relative overflow-hidden"><span aria-hidden="true" class="invisible inline-flex items-center gap-2">
<svg class="size-3.5" viewBox="0 0 24 24" fill="none">
</svg>Scanning</span><span class="absolute inset-0 flex items-center justify-center gap-2 transition-all duration-300 opacity-100 translate-y-0">Scan</span><span class="absolute inset-0 flex items-center justify-center gap-2 transition-all duration-300 opacity-0 translate-y-4">
<svg class="size-3.5 animate-spin" viewBox="0 0 24 24" fill="none">[... 205 characters folded ...]
</svg>Scanning</span></button>
</div>
<div aria-live="polite" class="mt-2 px-5 min-h-[1rem] font-mono text-xs text-left text-muted-foreground/60">
</div>
</form>
</div>
</main>
<section class="max-w-4xl mx-auto px-6 sm:px-10 pb-16">
<div class="w-full flex justify-center mb-10.5">
<svg viewBox="0 0 600 12" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-full max-w-md h-3 opacity-20" preserveAspectRatio="none">[... 173 characters folded ...]
</svg>
</div>
<div class="max-w-3xl mx-auto">
<div class="flex items-center justify-center gap-4 sm:gap-6 mb-12 font-mono text-sm"><span class="relative inline-block"><button type="button" title="Celebrate" class="font-mono text-sm text-foreground/70 hover:text-foreground active:opacity-60 transition-colors cursor-pointer rounded-chip focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" tabindex="0">147,839<!-- --> sites scanned</button><span aria-hidden="true" class="pointer-events-none absolute inset-0 z-10 overflow-visible"></span></span><span class="text-muted-foreground/30">·</span><span class="text-foreground/70">Average rank:<!-- --> <span class="text-amber font-medium">44</span></span><span class="text-muted-foreground/30">·</span><span class="text-foreground/70"><span class="text-green font-medium">7<!-- -->%</span> <!-- -->rank B or above</span>
</div>
<div class="grid grid-cols-1 sm:grid-cols-3 gap-12">
<div>
<h2><a class="font-mono text-sm text-muted-foreground/50 hover:text-muted-foreground transition-colors tracking-wider" href="/leaderboard?category=Consumer#top">Consumer</a>
</h2>
<ul class="mt-3">
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/dominos.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">1</span><img src="https://www.google.com/s2/favicons?domain=dominos.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">Domino's</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-b)">80</span><span class="font-serif text-sm font-medium" style="color:var(--grade-b)">B</span>
</div></a>
</li>
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/starbucks.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">2</span><img src="https://www.google.com/s2/favicons?domain=starbucks.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">Starbucks</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-b)">75</span><span class="font-serif text-sm font-medium" style="color:var(--grade-b)">B</span>
</div></a>
</li>
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/casper.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">3</span><img src="https://www.google.com/s2/favicons?domain=casper.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">Casper</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-c)">68</span><span class="font-serif text-sm font-medium" style="color:var(--grade-c)">C</span>
</div></a>
</li>
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/awaytravel.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">4</span><img src="https://www.google.com/s2/favicons?domain=awaytravel.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">Away</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-c)">67</span><span class="font-serif text-sm font-medium" style="color:var(--grade-c)">C</span>
</div></a>
</li>
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/everlane.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">5</span><img src="https://www.google.com/s2/favicons?domain=everlane.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">Everlane</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-c)">64</span><span class="font-serif text-sm font-medium" style="color:var(--grade-c)">C</span>
</div></a>
</li>
</ul>
</div>
<div>
<h2><a class="font-mono text-sm text-muted-foreground/50 hover:text-muted-foreground transition-colors tracking-wider" href="/leaderboard?category=E-commerce#top">E-commerce</a>
</h2>
<ul class="mt-3">
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/ikea.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">1</span><img src="https://www.google.com/s2/favicons?domain=ikea.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">IKEA</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-b)">71</span><span class="font-serif text-sm font-medium" style="color:var(--grade-b)">B</span>
</div></a>
</li>
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/instacart.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">2</span><img src="https://www.google.com/s2/favicons?domain=instacart.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">Instacart</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-c)">63</span><span class="font-serif text-sm font-medium" style="color:var(--grade-c)">C</span>
</div></a>
</li>
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/target.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">3</span><img src="https://www.google.com/s2/favicons?domain=target.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">Target</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-c)">59</span><span class="font-serif text-sm font-medium" style="color:var(--grade-c)">C</span>
</div></a>
</li>
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/walmart.com">
<div class="flex items-center gap-2.5"><span class="font-mono text-sm text-muted-foreground/50 w-4 tabular-nums">4</span><img src="https://www.google.com/s2/favicons?domain=walmart.com&sz=32" alt="" width="16" height="16" class="shrink-0 rounded-sm "/><span class="font-serif text-sm text-muted-foreground">Walmart</span>
</div>
<div class="flex items-center gap-2 shrink-0"><span class="font-mono text-sm tabular-nums font-medium" style="color:var(--grade-c)">58</span><span class="font-serif text-sm font-medium" style="color:var(--grade-c)">C</span>
</div></a>
</li>
<li><a class="flex items-center justify-between py-2 border-b border-border/40 hover:bg-muted/20 transition-colors -mx-2 px-2 rounded" href="/score/etsy.com">
Shown with 100 long blocks (scripts, styles, long tags) folded into a marker that says how many characters they hide; line breaks added before block tags because the source is minified; the pane stops after the first 200 words; the page is 399 KB.
Reading view the text a plain-fetch client can extract
title: Ora | Make your site work for agents
Is your business ready for agents?
For AI agents: Documentation index at https://ora.ai /llms.txt. Introducing AgentReady.org: in partnership with Vercel, Stripe, Auth0, Mintlify, and more Leaderboard Journey Research Blog API Menu Is your business ready for agents? Ora scores how agents find, read and use you Domain or MCP server URL ScanningScan Scanning 147,839 sites scanned ·Average rank: 44·7 % rank B or above Consumer 1Domino's 80B 2Starbucks 75B 3Casper 68C 4Away 67C 5Everlane 64C E-commerce 1IKEA 71B 2Instacart 63C 3Target 59C 4Walmart 58C 5Etsy 50C Travel 1RIU 72B 2Kayak 61C 3Trivago 57C 4Navan 56C 5Kiwi.com 54C Developer Tools 1Primitive 96A+ 2Supabase 93A 3Base44 89A 4Neon 87A 5Prisma 86A Infrastructure 1Telnyx 99A+ 2Fly.io 97A+ 3Vercel 91A 4Upstash 91A 5Netlify 90A Agent Tools 1Apify 96A+ 2Exa 93A 3E2B 93A 4Tavily 92A 5Ora 91A View full leaderboard → journey Watch an agent try your site Journey points a real agent at a domain with an intent you choose, then records every step: what it found, where it stalled, whether it finished. intent: find pricing yourdomain.com 0 steps · 0 searches · 0 issues "yourdomain pricing" /docs /docs/pricing · 404 /docs/limits · 401 /llms.txt · 404 /pricing /pricing/teams /pricing/faq Run a journey → research Most of the web isn't
226 more words follow in the initial HTML.
| Check | Result | Detail |
|---|---|---|
| H1 in the initial HTML | Found one H1 | First H1: Is your business ready for agents? |
| First 200 words in the initial HTML | Found 200 of 200 words | The initial HTML carries 426 words of visible text; the first 200 are marked in the left pane. |
| llms.txt present and linked | Found present and linked | 9984 bytes, 25 links. Structure grade A (6 of 6). The home page links it, which is how agents reached it in Ora's lab. |
| Markdown on request | Found text/markdown | Accept: text/markdown returned 200 with text/markdown; charset=utf-8. Vary: Accept is set. |
| Status of a made-up path | Found 404 | /agent-ready-html-missing-path-check returned 404: a real status code for a missing page. |
| JSON-LD types | Found Answer, ContactPoint, EntryPoint, FAQPage and 12 more | 16 schema.org types in JSON-LD blocks on the home page: Answer, ContactPoint, EntryPoint, FAQPage, ItemList, ListItem, Offer, Organization, PostalAddress, Question, SearchAction, Service, SoftwareApplication, SpeakableSpecification, WebPage, WebSite. |
| OpenAPI link | Found linked | The home page links an OpenAPI file. 97 percent of openapi.json fetches in Ora's lab arrived through a link. |
Run the full check
The viewer read one page with four requests. The full check we recommend next is Ora's scan. Its Access layer runs 42 checks worth 30 of its 100 points, among them content without JavaScript, bot detection, llms.txt, markdown on request, JSON-LD and the sitemap (Ora's check catalogue, contract 1.38.0, read 5 November 2026). Open Ora's report for ora.ai.
Limits: Ora reads public URLs only, says two runs of one scan land within a couple of points without publishing repeat-scan data, and keeps the product that fixes what it finds behind a waitlist. Cloudflare's scanner at isitagentready.com is a quick free alternative, and Mintlify's score covers documentation.
What the viewer does
It sends four plain GET requests with the user agent Mozilla/5.0 (compatible; agent-readiness-crawl/1.0): the URL itself, the same URL with Accept: text/markdown, /llms.txt on the same host, and a made-up path at the root. It runs no JavaScript. The left pane is the first bytes of the HTML as text, with long scripts and styles folded into a marker that says how many characters they hide. The H1 and the first 200 words of visible text are marked in both panes. The flags under the panes say what the four responses added up to.
Limits
- Ten seconds for all four requests together, 1.5 MB read from the home page, at most five redirects, each one checked again.
- http and https only, default ports only. Private, local and internal addresses and names are refused.
- Ten runs per address per minute. The counter lives in memory on the edge function, so it is per instance rather than global. Past ten you get a 429 with a Retry-After header.
- Results are cached for 24 hours by the response headers. Nothing is written to a database: the viewer keeps the first 200 words and the extracted fields for the length of the request and keeps no page body beyond that.
What it does not tell you
A plain fetch from this server is not a real agent. Bot protection weighs the source address more than the user agent, so a page that answers 200 here can still refuse an agent, and the reverse. Ora's lab found (2026-10-19) that returning 403 to agent user agents and hiding the answer in JavaScript were the only two of 19 configurations that stopped retrieval; the viewer can see the second, and can only hint at the first. The initial HTML reference covers both. The server logs and the published crawler address ranges settle the first.
The seven flags
- H1 in the initial HTML
- Whether the HTML the server sends already contains an H1. It is the cheapest sign that the page does not depend on scripts to say what it is.
- First 200 words in the initial HTML
- Whether at least 200 words of visible text arrive in the initial HTML. Under 40 words with an app root element is flagged as a JavaScript shell.
- llms.txt present and linked
- Whether /llms.txt answers with a plain-text file, whether the home page links it (an anchor, a link element or a Link header), and the structure grade the index uses.
- Markdown on request
- Whether a request with Accept: text/markdown comes back as text/markdown. Cloudflare Radar found 3.9 percent of scanned top sites passing this at its April 2026 launch.
- Status of a made-up path
- Whether a path that should not exist returns 404 or 410. A 200 is a soft 404 and reads as a live page.
- JSON-LD types
- The schema.org types found in JSON-LD blocks on the page. Ora's lab found JSON-LD made no difference when the answer was already in the HTML.
- OpenAPI link
- Whether the page links an OpenAPI file, by an anchor or a service-desc link relation. It matters only for a site that ships an API.
Sources
- Ora: AgentReady launch post (Ora's lab findings) https://ora.ai/blog/agentready-launch, read 4 November 2026
- Ora check catalogue, contract 1.38.0 (132 checks, 42 in the Access layer) https://ora.ai/api/checks, read 5 November 2026
- Ora home page (the fixing product is behind a waitlist) https://ora.ai/, read 5 November 2026
- Ora: Introducing Deep Scan (repeat scans) https://ora.ai/blog/introducing-deep-scan, read 5 November 2026
- Ora llms.txt (public URLs only) https://ora.ai/llms.txt, read 5 November 2026
- Vercel: Make your site readable by AI agents https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents, read 4 November 2026
- llms.txt proposal (llmstxt.org) https://llmstxt.org/, read 4 November 2026
Last reviewed 5 November 2026