Free to start · Pro $9/mo for 5,000 pages

Turn any URL into
clean markdown for your AI

POST a URL, get LLM-ready markdown back. Every page lands in a searchable index.

Try:
Options

No signup needed for the demo. Get a free key for the API and your own index.

~1s typical response
90%+ median token cut vs raw HTML
$0 while in beta
MCP remote server, no install
[ 01 ] · API

Start extracting in one request

Plain JSON over HTTPS. No SDK required.

curl -X POST https://tomsindex.com/v1/extract \
  -H "X-API-Key: srch_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://docs.python.org/3/tutorial/"}'
[ .JSON ]
{
  "results": [{
    "url": "https://docs.python.org/3/tutorial/",
    "markdown": "# The Python Tutorial\n\nPython is an easy to learn…",
    "metadata": { "title": "The Python Tutorial", "description": "…" },
    "links": [{ "href": "…/appetite.html", "text": "Whetting Your Appetite" }]
  }],
  "failed_results": [],
  "response_time": 0.84
}
[ 02 ] · Features

Only the content. Far fewer tokens.

Nav, footers, ads and scripts are stripped. Measured on real pages:

github.com/expressjs/express
90k
2.3k
−97%
react.dev/learn
66k
3.5k
−95%
developer.mozilla.org · HTTP status
59k
5.5k
−91%
en.wikipedia.org · Web scraping
59k
12.3k
−79%
Raw HTML tokens TomsIndex markdown tokens tokens ≈ characters ÷ 4, measured Oct 2026
1,177/1,178code blocks kept
99.6%of section headings kept
96.1%of data tables kept
Measured on 33 docs and blog pages (Oct 19, 2026) — see each page
PageCodeHeadingsTables
docs.python.org · asyncio tasks32/3215/151/1
docs.python.org · control flow57/5718/18—
MDN · Using the Fetch API23/2318/19—
react.dev · Quick Start24/2412/12—
react.dev · useEffect31/3221/21—
nextjs.org · Installation17/1714/14—
nextjs.org · Layouts and Pages10/1015/15—
vuejs.org · Reactivity36/3617/17—
vite.dev · Guide28/2810/101/1
docusaurus.io · Installation12/129/9—
Rust book · Ownership15/158/8—
go.dev · Effective Go153/15358/58—
requests · Quickstart36/3615/15—
FastAPI · First Steps21/2115/15—
kubernetes.io · Pods4/421/21—
tailwindcss.com · flex-basis9/98/81/1
docs.github.com · REST repos—165/165113/121
github.com · astral-sh/uv16/1613/13—
overreacted.io · useEffect guide62/6222/22—
jvns.ca · Inside .git13/1315/15—
docs.stripe.com · Create a charge6/66/8—
typescriptlang.org · Narrowing35/359/9—
postgresql.org · SELECT37/3737/371/1
pkg.go.dev · net/http230/23010/101/1
Wikipedia · Comparison of languages—9/93/5
supabase.com · JS select13/1317/17—
djangoproject.com · Expressions49/4918/18—
nodejs.org · fs105/1059/9123/123
docs.astro.build · Routing30/3020/20—
Cloudflare Workers · Guide10/106/6—
martinfowler.com · Test pyramid18/1835/35—
docs.pydantic.dev · Models45/4528/28—
paulgraham.com · Great work———

Counts compare the page's own <pre> blocks, h2/h3 headings and data tables with the markdown. When the markdown looks incomplete, the API response usually says so in warnings. Known gaps: diagrams drawn as SVG or images.

MD

Real markdown

Headings, links, tables, fenced code.

#

CSS selector

Extract just article or main.

?

Query chunks

Keep only the parts that match a question.

</>

Links & metadata

Title, description, every link tagged.

IDX

Auto index

Every extract saved and full-text searchable.

API

Sources agents need

npm, PyPI, Stack Overflow and GitHub files, issues and folders via their official APIs.

[ 03 ] · Index

Extract once.
Search it forever.

Every page you extract is saved and searchable. No second pipeline.

  • Full-text search over every page
  • Private to your account
  • Read markdown back via API
Index API reference →
GET /v1/index?q=tutorial
{
  "results": [
    { "id": "9b2c…", "url": "https://docs.python.org/3/tutorial/",
      "title": "The Python Tutorial", "fetched_at": "2026-10-19T…" },
    { "id": "4e1a…", "url": "https://react.dev/learn",
      "title": "Quick Start – React", "fetched_at": "2026-10-18T…" }
  ]
}
[ 04 ] · Agents

A remote MCP server. Nothing to install.

Point Claude Code, Cursor or Codex at one URL. Works without a key as a trial (20 extracts/day); add a free key for 10/minute and your private index.

extractURL → markdown
index_searchsearch what it already read
index_getread a saved page back
# try it now, no key
$ claude mcp add --transport http tomsindex https://tomsindex.com/mcp

# with your free key (10/min + private index)
$ claude mcp add --transport http tomsindex https://tomsindex.com/mcp \
    --header "X-API-Key: srch_your_key"
[ 05 ] · Why TomsIndex

Simple and fast

One endpoint, about a second per page, nothing to configure.

What you get

  • ~1s typical response, clean markdown back
  • One endpoint and one key — no SDK, no credits to track
  • 90%+ fewer tokens than raw HTML
  • A private index of every page your agent has read

Built for reading, not for

  • Clicking through pages or logging in
  • Sites behind bot protection (e.g. Medium)
  • Whole-site crawls, PDFs, screenshots
[ 06 ] · Pricing

Half the price of Firecrawl

Start free. Upgrade when you outgrow it — no credits to decode.

Free
$0/month
Get a free API key
  • 100 extracts / month
  • 10 requests / minute per key
  • Searchable index · remote MCP server
  • Export or delete your index any time
Pro
$9/month
Start with Pro
  • 5,000 extracts / month
  • Everything in Free
  • JavaScript rendering on pages that need it
  • Cancel any time, no contract
[ 07 ] · FAQ

Frequently asked questions

Does it render JavaScript?

When it needs to. Pages are read as server-rendered HTML first (fast and free); if a page needs JavaScript or comes back incomplete, it's rendered in a headless browser (Crawl4AI) and run through the same pipeline.

Can it read npm, PyPI, Stack Overflow and GitHub?

Yes. Those block scrapers, so TomsIndex reads them through their official APIs: package READMEs, questions with top answers, and raw source files in a fenced block.

What if a page fails?

You get HTTP 200 with the reason in failed_results, e.g. "Target responded with HTTP 403."

Who can see my index?

Only you. Each account's index is private. Pass "save": false to skip saving a page.

What are the limits?

10 requests/min per key. The homepage demo is 5/min per IP and isn't saved.

Give your agent clean pages

Free key in under a minute.