Introducing the Save API: turn any URL into clean Markdown

·

For two years, Save has done one thing well: turn a messy web page into clean Markdown with a single click. Today that same engine is available as an API.

If you build with LLMs, you already know the problem. Models read Markdown, not HTML. But the web ships HTML wrapped in navigation, ads, cookie banners, and JavaScript. Turning a URL into clean context is a surprisingly deep problem, and most teams end up maintaining a brittle pile of fetchers, headless browsers, and readability hacks to solve it.

The Save API solves it with one call.

One request, clean Markdown back

curl -X POST https://api.savemarkdown.co/v1/convert \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/article"}'

You get back the article as Markdown — headings, lists, links, images and code preserved, everything else stripped:

{
  "markdown": "📄 Title: Example Article\n🔗 Source: ...\n\n---\n\n## Heading\n\nClean body...",
  "meta": { "tier": 1, "cached": false, "domain": "example.com", "template": "markdown" },
  "usage": { "credits": 1 }
}

No DOM library to ship. No headless browser to babysit. No readability heuristics to tune.

A tiered engine that only spends what it must

The API doesn’t brute-force every page through an expensive pipeline. It escalates only when it has to:

  1. Fetch — a server-side request with a real browser fingerprint and a strict SSRF guard. Static and server-rendered pages stop here. This is the fast, cheap path that handles most of the web.
  2. Render — if a page turns out to be a JavaScript shell with no real content, the request escalates to a headless render, then extracts. This happens automatically, only when the cheap path comes back thin.
  3. Extract — navigation, ads, cookie banners and boilerplate are removed. You keep the content that matters.

You can force or disable rendering per request with render: "always" | "never" | "auto". The response always tells you which tier handled the page, so there are no billing surprises.

Optional AI formatting

By default you get faithful Markdown extraction with no LLM in the loop — which is why it’s cheap and fast. When you want more than raw extraction, pass a template (clean, summary, outline, and more) and the API runs an LLM pass to reshape the content. That tier is token-metered, like the Claude API, so you only pay for the formatting you actually use.

Pricing that makes sense

TierPrice
Markdown (fetch + extract, no LLM)$2 / 1,000 pages
Rendered (JavaScript pages)$8 / 1,000 pages
AI-formatted (templates)$3 / $25 per 1M input / output tokens

Start with a free trial of 500 pages, then pay as you go. No seats, no minimums.

Built to be called by agents

Save has always been agent-friendly, and the API is discoverable the same way: it’s listed in our llms.txt, our agent-skills index (skill id save.api.url-to-markdown), and our API catalog. Point an agent at a URL and it gets back tokens worth keeping.

Read the docs and request access →

## Continue reading

Jean-Sébastien Wallez

Written by

Jean-Sébastien Wallez

I've been making internet products for 10+ years. Built Save on weekends because I wanted my own reading library in clean markdown for Claude and Obsidian. Write here about web clipping, AI workflows, and the small things that make a personal knowledge base actually useful.