NewAnnouncing Expand Fetch: Get lossless markdown extracted by our system one models Iris and X-RayRead
Expand AI logoExpand AI logo
PlaygroundPricingDocsBlog
PlaygroundPricingDocsBlog
Products
  • Fetch
  • Iris
  • X-Ray
  • Wayback Machine
  • Highlights
  • Crawl
  • WebSync
Try API for free
Expand AI logo

Let your agent
see the web

From the blogAnnouncing Expand FetchRead the post→

Products

  • Fetch>
  • Iris>
  • X-Ray>
  • Wayback Machine>
  • Highlights>
  • Crawl>
  • WebSync>

Platform

  • Playground>
  • Fetch API>
  • MCP>
  • CLI>
  • SDK>
  • Pricing>

Developers

  • Getting Started>
  • Docs>
  • Docs for agents>
  • FAQ>
  • llms.txt>
  • start.md>

Company

  • About>
  • Blog>
  • Careers>
  • Talk to the Founder>

Community

  • LinkedIn>
  • GitHub>
  • X (Twitter)>
All systems normal
Terms of Service
·Privacy Policy
·Subprocessors
·Report Abuse
Landing text logo

Let your agent
see the web

Fetch and crawl with frontier system one models.

Trusted by engineers at
OpenAIFlumeMixedbreadMixedbreadAmazon ScienceThe Prompting Company

Set up expand.ai/start.md

Frontier models can't answer
basic questions about the web.

Pricing page
ordinary-markdown.md
## BusinessUptime SLASAML SSO## EnterpriseUptime SLASAML SSO
Which plan has uptime SLAs?Which plan has uptime SLAs?
User
Bot
Both. Business and Enterprise each include an uptime SLA.Both. Business and Enterprise each include an uptime SLA.
Wrong answer
Icons dropped → Confidently wrong.
expand-markdown.md
| Business | Enterprise ||--------------|--------------|| x Uptime SLA | ✓ Uptime SLA || x SAML SSO | ✓ SAML SSO |
Which plan has uptime SLAs?Which plan has uptime SLAs?
User
Bot
Only Enterprise. Business shows an 'x' next to it.Only Enterprise. Business shows an 'x' next to it.
Right answer
Expand preserves the details.
Benchmark icon

Benchmarked Performance

MDBench Hard

v1

Hard Markdown extraction benchmark

MDBench Hard v1: questions answered correctly per API
APIQuestions answered correctly95% confidence interval
Expand74.1%70.4% to 77.6%
Exa55.3%50.9% to 60.1%
Firecrawl27.2%24.2% to 30.5%
Questions answered correctlyHigher is better ↑
0%25%50%75%100%
0%
0%
0%
ExpandExaFirecrawl

1,094 questions on 326 hard pages. Claude Sonnet 5.5 answers from each API's Markdown, at its default settings, graded strictly. Expand is the only provider tested that includes the hidden JSON from the page, via X-Ray.

How we measured

MDBench Hardv1

A set of hard web extraction cases that we curated together with our customers. They span enrichment, procurement, pricing and competitive intelligence, among other areas.

It intentionally targets what existing web-to-Markdown systems get wrong.

It is a question-answering benchmark: an agent gets only the page Markdown that each API returns and answers a question about what it says.

Tested on October 8, 2026.

Try it on any page.

Paste a URL, or open one of the examples, and see what your agent gets back.

New Fetch
Datadog
Our World in Data
arXiv paper (PDF)
YouTube video

What should your agent see next?

Examples

Arrowless noise, fewer tokens
reads the hidden JSONArrow
ArrowPDFs become clean Markdown
watches the video for youArrow

Instant web data on tap.

Fetch a page, crawl a site, or subscribe to changes.

Every page comes with accurate Markdown, plus the hidden JSON and a snapshot you can cite.

Fetch

Frontier quality web data.

Send a URL. One call returns page.md, state.json and a snapshot.

Iris

Let your agent pay attention to what matters.

Progressive disclosure

The best of both worlds.

Other tools make you choose the full page or a trimmed one. Your agent reads the main content first and asks for the rest only when it needs it: nothing lost, far fewer tokens.

docs.stripe.com/webhooksTokens
page.mdthe main contentread first6,800
One call away
appendix.mdnav, footer, related links+1,616
state.jsonthe hidden JSON+253
network.harevery request+509,189
Your agent reads 6,800 of 517,858 tokens first.

Lossless

Nothing is thrown away.

Existing web-to-Markdown tools follow hard-coded rules and lose crucial details in the conversion. The web is too complex for rules.

If something is still missing, progressive disclosure has you covered.

expand.land/s/ng0EFjewTRF6Stored with every fetch
  • page.mdMarkdown
  • appendix.mdthe rest
  • state.jsonhidden JSON
  • network.harrequests
  • screenshot.pngif requested
  • assets/142 files
  • archive.waczreplay
Landing icon play

Getting Started

It works out of the box without any configuration—JavaScript rendering, residential proxies, and bot protection are handled automatically for every request.

all products, one command away

Jev for the web.

Iris looks at the rendered page and keeps tables and icons intact.

X-Ray

The hidden data, without a browser.

Coordinates, flight gates and diagrams often hide in JSON. X-Ray keeps what matters.

Wayback Machine

Every fetch becomes an asset you own.

Verify every answer, down to the element on the page it came from.

Highlights

Let your agent focus on what matters.

Already know what you need? Save over 95% of tokens with no loss in accuracy.

Crawl

Crawl like the big boys.

One API call crawls any website, every page a full fetch at one credit.

WebSync

Subscribe to a website.

Monitor it, or keep a constant change feed. Sync it into your agent's files: a Markdown file per page.

Fetch

Frontier quality web data.

Send a URL. Get accurate Markdown, plus the hidden JSON and a snapshot you can cite.

Fetch docs →
  • Iris

    Jev for the web.

    Iris is a vision model for the web. It reads the rendered page like you do and writes the main content as accurate Markdown. Navigation and footers go to the , one call away. The rest is noise, so it goes.

    Iris docs →

    On a pricing page, Iris preserves the pricing table as Markdown, moves the navigation and footer to the appendix, and removes promotional and cookie banners.

  • Token efficient

    24% fewer tokens at scale.

    At 5 million requests a month on Sonnet 5.5, that is $2.9M a year.*

    *With JSON mode off.

    DescriptionPer month

    Other Markdown APIs

    20,000 tokens a page · 100B tokens

    $1,000,000

    Expand, JSON mode off

    15,200 tokens a page · 76B tokens

    $760,000
    Saved-24%$240,000
    At 5M requests a month with Sonnet 5.5 ($10/M)You save ~$2,880,000 a year

    Use the SDK

    TypeScript. Python SDK coming soon.

    npm i @expandai/sdk
    export EXPAND_API_KEY="xpnd_..."

    One call returns the page as accurate Markdown, read by Iris, plus the hidden JSON when you ask for it.

    import { ExpandClient } from "@expandai/sdk"
    
    const expand = new ExpandClient({ apiKey: process.env.EXPAND_API_KEY })
    
    const markdown = await expand.fetch({ url: "https://news.ycombinator.com" })
    console.log(markdown)
    Landing icon tag

    Pricing
    Only pay for what you need

    Free

    Try the platform at no cost.

    10,000 free credits ($10) to explore everything below.

    Get Started
    Everything below is billed in credits: 1,000 credits cost $1, and a successful Fetch is one credit. Buy them as you go; they do not expire. Failed, blocked, and empty requests cost nothing.
    10,000 free
    One credit per successful Fetch, or $1 per 1,000. Asking for Highlights alongside a Fetch adds one credit. A fetch that fails costs nothing.
    1 credit

    Pay as you go

    Popular

    FAQ

    Questions

    Isn't turning a web page into Markdown a solved problem?

    It works for a news article and breaks on many other layouts. Converters guess the main content with fixed rules, the way reader mode does. On a pricing table, a product page or a dashboard, that guess drops the icons, flattens the table and misses the data the page loads. Iris looks at the rendered page instead, every element with its position, size and weight, and sorts each one into preserve, prune or appendix.

    Why not hand my agent the raw HTML, or a browser?

    Raw HTML is mostly markup and scripts your agent pays tokens to read, and a JavaScript app arrives as an empty shell. A browser with screenshots works, but it is slow and expensive, and the tokens add up fast. Expand renders the page in a real browser for you and returns what it shows as Markdown, at API speed.

    How do I know what my agent actually read?

    Give your agent reading glasses.

    Expand your agent's vision.

    Set up expand.ai/start.md

    meridian.com/pricing
    MeridianProductDocsSign in
    appendix
    New: Meridian AI is here. Join the waitlist →
    prune
    main content

    Plans and pricing

    FreePlusBusiness
    Price$0$12Custom
    SAML SSO✗✓✓
    Uptime SLA✗✗✓
    Audit log✗
    page.md

    ## Plans and pricing

    | | Free | Plus | Business |

    | ---------- | ---- | ---- | -------- |

    | Price | $0 | $12 | Custom |

  • X-Ray

    The hidden data, without a browser.

    Coordinates, flight gates and diagrams often live in JSON the page loads, not in its HTML. X-Ray, our second System 1 model, finds the parts that matter and drops the rest.

    X-Ray docs →

    Linear's pricing page contains 17,374 tokens of hidden JSON, including customer stories. X-Ray identifies the relevant information, like the fact that Commure has logged over 80,000 requests across thousands of healthcare customers.

    linear.app/pricingstate.json

    // 17,374 tokens of JSON the page never shows

    $[2].customers[0].body[7]

    "Ramp has run its entire product development process through Linear since 2019…"

    $[2].customers[7].intro

    "…Commure has logged over 80,000 requests across 1000s of its healthcare customers…"

  • Wayback Machine

    Every fetch becomes an asset you own.

    Verify every answer precisely. Every line links back to the element on the page it came from, even after the site changes.

    Hover to debug. Share to cite.

    Wayback Machine docs →
    A snapshot with the cited line outlined
  • Highlights

    Let your agent focus on what matters.

    If your agent already knows what it's looking for, Highlights saves over 95% of tokens with no loss in accuracy. Pass a query and get back only the passages that answer it.

    • Faster TTFT

    • Zero noise

    Highlights docs →

    Stripe's webhooks guide as Expand captured it, with the playground's Highlights. Ask it a question and the passages that answer it are framed, a few hundred of the page's 6,800 tokens.

    docs.stripe.com/webhooks6,800 tokens
    6,800 tokens
    Try
  • Crawl

    Crawl like the big boys.

    One API call crawls any website. Every page comes back as a full Fetch: Markdown from Iris, State JSON from X-Ray and a snapshot.

    Crawl docs →
    • Crawl anything with one command.

      Our crawler scales to millions of pages, so you don't need to manage state or processes.

      No extra cost for crawling: each page is one credit, the same as a Fetch.

      • Rendering
        stripe.com8/9Collapse
      • Done
      • Done
      • Done
        /api
      • Done
        /webhooks
      • Done
        /pricing
      • Rendering
        /blog
      stripe.com
      StatusCrawling
      Pages
      8 / 9
      In flight
      1
      Failed
      0
      DiscoverRenderFinish
      8 of 9 pages settled1 rendering
      crawl
    WebSync

    Subscribe to a website.

    Monitor a crawl for what changed, or keep a constant change feed. Every added, changed and removed page arrives in order on a durable stream you can resume from where you left off.

    WebSync docs →
    • A syncing engine for the web.

      WebSync rechecks every page on your schedule and streams each change as an event: a page added, a page changed with its diff, a page removed with the evidence.

      • Monitor a site for changes

    Fetch docs

    Prepaid credits, $1 per 1,000.

    Pay only for what you need. No monthly commitments.

    Get Started
    Everything below is billed in credits: 1,000 credits cost $1, and a successful Fetch is one credit. Buy them as you go; they do not expire. Failed, blocked, and empty requests cost nothing.
    $1 / 1,000
    One credit per successful Fetch, or $1 per 1,000. Asking for Highlights alongside a Fetch adds one credit. A fetch that fails costs nothing.
    $1 / 1,000

    Enterprise

    Web-scale with white-glove support at enterprise security.

    Contact Us
    Everything below is billed in credits: 1,000 credits cost $1, and a successful Fetch is one credit. Buy them as you go; they do not expire. Failed, blocked, and empty requests cost nothing.
    Custom allocation
    One credit per successful Fetch, or $1 per 1,000. Asking for Highlights alongside a Fetch adds one credit. A fetch that fails costs nothing.
    Contact sales
    Feature

    Compare plans

    What each plan includes and what it costs.

    Free

    Try the platform at no cost.

    10,000 free credits ($10) to explore everything below.

    Get Started

    Pay as you go

    Popular

    Prepaid credits, $1 per 1,000.

    Pay only for what you need. No monthly commitments.

    Get Started

    Tiers

    Expand's concurrency is controlled by tiers.
    These tiers are unlocked permanently, for successful spend and time since first successful transaction:

    TierQualificationConcurrency Limit
    0Free Tier2
    1$10 in successful spend

    See the pricing page and the savings calculator

    Each browser page fetch saves the captured page with every asset. Open expand.land/s/<snapshotId>/playground and click any line of the Markdown to see where it came from on the page, even after the site has changed. Share the link to cite it.

    What is the hidden JSON?

    The data behind what a page shows, including values that never appear as text: a product's price, rating and stock, the coordinates on a map, a flight's gate. X-Ray reads that JSON, keeps the parts a question could be asked about and drops the analytics and configuration. It comes back next to the Markdown, in the same call.

    My agent needs one answer. Does it have to read the whole page?

    No. Pass a question with the fetch and Highlights returns only the passages that answer it, ranked. That saves over 95% of tokens with no loss in accuracy, and your agent gets to its first token sooner.

    What about sites behind bot protection?

    That is what Stealth Mode is for, and it is on for every plan. Each fetch runs a real browser through residential proxies with state-of-the-art bot-detection avoidance, so many pages that block automated access still render. There is nothing to configure. It won't get past every bot check, CAPTCHA or login wall. When a page is blocked, you get a 403 that says why, and it costs nothing.

    Can it read PDFs, spreadsheets and YouTube videos?

    Yes, on the same endpoint. Send the URL and Fetch converts PDFs, images, office files, ebooks and data files into the same Markdown. A YouTube link returns the transcript, and a video without captions is transcribed from its audio.

    How fast is a fetch?

    Most pages come back in a few seconds, browser render included. Iris itself reads about 500,000 tokens a second.

    Which agents does it work with?

    Paste the setup prompt into Claude Code, Codex, Cursor or OpenCode. It connects your agent to Expand and installs the CLI when it needs one. Approve the sign-in in your browser when asked. From your own code, call the TypeScript SDK or the API.

    ✓
    ✓

    Company

    About

    Careers

    Resources

    Blog

    Guides

    Legal

    Privacy

    Terms

    © 2026 Meridian, Inc. All rights reserved.

    appendix
    We use cookies.Accept
    prune
    |
    SAML SSO
    |
    ✗
    |
    ✓
    |
    ✓
    |

    | Uptime SLA | ✗ | ✗ | ✓ |

    | Audit log | ✗ | ✓ | ✓ |

    Nav and footer → appendix.md

    Banners pruned

    $[2].customers[7].body[9]

    "So Commure connected a Linear view for each customer to their Slack channel…"

    A constant change feed

  • A durable stream you can resume from where you left off

  • Give your agent a brain on disk: a Markdown file per page, kept in sync.

    npx expandai sync https://stripe.com ./stripe --watch
    Ttype: 'page.added',url: '/blog/launch-week',TdiscoveredBy: 'sitemap',12depth: 1Ttype: 'page.changed',url: '/pricing',▼{}diff▼{}price12from: 16,12to: 19Ttype: 'page.changed',url: '/status',▼{}diff▼{}incidents12from: 0,12to: 1Ttype: 'page.removed',url: '/careers/designer',▼{}evidenceTkind: 'http-404'Ttype: 'page.added',url: '/docs/auth',TdiscoveredBy: 'link',12depth: 2Ttype: 'page.changed',url: '/enterprise',▼{}diff▼{}seats12from: 5,12to: 10
    Ttype: 'page.added',url: '/blog/launch-week',TdiscoveredBy: 'sitemap',12depth: 1Ttype: 'page.changed',url: '/pricing',▼{}diff▼{}price12from: 16,12to: 19Ttype: 'page.changed',url: '/status',▼{}diff▼{}incidents12from: 0,12to: 1Ttype: 'page.removed',url: '/careers/designer',▼{}evidenceTkind: 'http-404'Ttype: 'page.added',url: '/docs/auth',TdiscoveredBy: 'link',12depth: 2Ttype: 'page.changed',url: '/enterprise',▼{}diff▼{}seats12from: 5,12to: 10

    GET /v1/crawls/:id/events?offset=-1&live=sse

    events
    import { ExpandClient } from "@expandai/sdk"
    
    const expand = new ExpandClient({ apiKey: process.env.EXPAND_API_KEY })
    
    // A crawl with a sync policy keeps going, rechecking every page daily
    const [crawl] = await expand.crawls.create(
      { sources: ["https://stripe.com"], sync: { freshness: "24h" } },
      { idempotencyKey: "stripe-watch" },
    )
    
    for await (const event of crawl.events({ from: savedOffset, live: true })) {
      // page.added, page.changed with its diff, page.removed with the evidence
      apply(event)
      savedOffset = event.offset
    }

    Enterprise

    Web-scale with white-glove support at enterprise security.

    Contact Us
    Everything below is billed in credits: 1,000 credits cost $1, and a successful Fetch is one credit. Buy them as you go; they do not expire. Failed, blocked, and empty requests cost nothing.
    10,000 free
    $1 / 1,000
    Custom allocation
    One credit per successful Fetch, or $1 per 1,000. Asking for Highlights alongside a Fetch adds one credit. A fetch that fails costs nothing.
    1 credit
    $1 / 1,000
    5
    2$50 in successful spend + 7 full days since first successful transaction10
    3$200 in successful spend + 14 full days since first successful transaction20
    4$500 in successful spend + 30 full days since first successful transaction50
    5$1000 in successful spend + 60 full days since first successful transaction100

    Example: If I have $250 in successful spend:

    • Immediately: Tier 1
    • After 7 full days since first successful transaction: Tier 2
    • After 14 full days since first successful transaction: Tier 3

    Provisioned Concurrency

    Need instant concurrency without waiting for the tier to upgrade?
    Just $1 per browser a month, as many as you need (up to 1,000):

    Nr. of browsers

    40

    Price per month

    $40

    Perfect for short or long bursts. Billed by card, separately from your credits. Adding browsers mid-month is prorated; lowering the count or cancelling takes effect at the end of the billing month, so you keep what you paid for.

    Contact us for more info.

    Contact sales
    Search a page you already fetched for the exact passages you need. You get ranked, cited snippets without a re-fetch. One credit per request, or $1 per 1,000, independently of Fetch.
    99% token reduction99% accuracy
    1 credit
    $1 / 1,000
    Contact sales
    PDFs convert to Markdown at one credit a page, or $1 per 1,000, on top of the Fetch. Office files, ebooks, and data files convert locally and cost nothing extra.
    PDF, office, ebook, data
    1 credit / page
    $1 / 1,000 pages
    Contact sales
    A page with no usable text layer is read by a vision model, which adds five credits ($0.005) to that page. Every image is one such page.
    vision model
    5 credits / page
    $5 / 1,000 pages
    Contact sales
    A YouTube URL returns the transcript with timestamps, chapters, and a frame for every moment, for five credits ($0.005) a video on top of the Fetch, whatever its length. A video with no captions is transcribed instead and adds ten credits a minute.
    YouTube
    5 credits / video
    $5 / 1,000 videos
    Contact sales
    Audio files transcribe to Markdown at ten credits ($0.010) a minute, rounded up, with a one-minute minimum.
    MP3, WAV, M4A, FLAC
    10 credits / minute
    $0.010 / minute
    Contact sales
    Iris uses small models to keep only the high-signal fields and elements, so your agent gets the useful data without the full page JSON flooding its context.
    Main content is split from secondary regions like nav, footers, and related links. Your agent reads the main document first and pulls the appendix in only when needed.
    We handle bot-detection avoidance, proxy rotation, and browser infrastructure for you, so pages that block automated access still render. Fully managed, with nothing to configure.
    Layout-aware Markdown that preserves tables, grids, pricing pages, and icons instead of flattening them into loose paragraphs, so the structure your agent needs survives extraction.
    Concurrency
    2
    Burst up to 100 concurrent requests.
    200+
    Storage
    7 days
    30 days
    30+ days
    Proxies
    Support
    Email support only
    Standard support
    High priority support: opt-in Slack channels and live chats
    SSO
    —
    —