PDF to Markdown converter

PDF in. Clean Markdown out.

Convert PDF to clean, LLM-ready Markdown for humans and agents – tables, formulas and OCR, in the browser, via API or MCP.

PDFUpload / import
queuedIn line
processingOCR • Parse
readyVerified
MarkdownClean • structured
The PDF to Markdown converter: a PDF dropped into the extension, converting to clean Markdown with live job slots
Built for real documents

Clean Markdown you can hand straight to a model

The same conversion engine powers every entrypoint. Whether a person uses the PDF to Markdown converter in the browser or an agent posts a URL to the API, the output is structured Markdown – not a flat text dump.

  • Headings, lists and reading order preserved
  • Real Markdown tables instead of broken columns
  • Formulas kept, images embedded or placeholdered
  • OCR for scans, including Cyrillic
Entry points

One converter, multiple ways in

Pick the surface that fits your workflow. They share the same slots, limits and retention rules – the API and MCP never bypass product rules.

Chrome extension

Drag, drop or paste a PDF URL; convert from the popup or the inline button on any page. Use it anonymously, or sign in for API keys, MCP and paid tiers – same capabilities as the web app.

Add to Chrome

Web converter

The full workbench on the site: upload or URL, settings, slots, status, preview and download – anonymous, or signed in for higher tiers.

Open the web app

REST API

Create jobs, poll status, fetch Markdown and clean slots over HTTPS with a bearer API key. Stable DTOs, predictable errors, OpenAPI spec.

See the API

Hosted MCP

Connect compatible agents to a managed MCP endpoint – a thin wrapper over the same API, so tool calls obey the same limits and slots.

Connect MCP

ChatGPT Custom GPT

Import our ready-made action spec into a ChatGPT Custom GPT, and your GPT can convert PDFs to Markdown as a built-in tool – no code.

Set up the action
Agent workflow

Create a job, wait, fetch Markdown, clean the slot

One predictable lifecycle, two ways to drive it: call the REST API from your own code, or use the equivalent hosted MCP tools in a compatible agent. Never claim a result before status=ready.

REST API Hosted MCP
1

Create the job

POST a PDF URL or upload bytes. Get back a job id and slot. Idempotency-Key is honored but optional.

POST /api/v2/jobsmcp · pdf_to_markdown_create_job_from_url
2

Check status

Poll the job until ready or error, or register a signed webhook on paid tiers instead of polling.

GET /api/v2/jobs/{id}mcp · pdf_to_markdown_get_job
3

Fetch the Markdown

Download the result once ready. Read truncated and pages to know if a long document was returned partially.

GET /api/v2/jobs/{id}/downloadmcp · pdf_to_markdown_get_markdown
4

Delete / clean the slot

Free a slot when you're done. Deleting queued or processing jobs is destructive – confirm it in user-facing clients.

DELETE /api/v2/jobs/{id}mcp · pdf_to_markdown_delete_job
# 1. create a job from a PDF URL
curl -X POST https://pdf2md.dev/api/v2/jobs \
  -H "Authorization: Bearer p2m_…" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/report.pdf"}'
# → { "job_id": "job_9f3c…", "status": "queued" }

# 2. poll status
curl https://pdf2md.dev/api/v2/jobs/job_9f3c… \
  -H "Authorization: Bearer p2m_…"
# → { "status": "ready", "pages": 24, "truncated": false }

# 3. fetch the Markdown
curl https://pdf2md.dev/api/v2/jobs/job_9f3c…/download \
  -H "Authorization: Bearer p2m_…"

# 4. free the slot
curl -X DELETE https://pdf2md.dev/api/v2/jobs/job_9f3c… \
  -H "Authorization: Bearer p2m_…"
Output quality

What survives the conversion

OCR for scans

Image-only and scanned PDFs are OCR'd into selectable Markdown, including Cyrillic. Force OCR when you need it.

Real tables

Columns become genuine Markdown tables instead of jumbled lines, so structure stays readable for people and models.

Formulas kept

Mathematical notation is preserved rather than flattened into garbled characters.

Image policy

Embed images as base64 or use lightweight placeholders – your choice, depending on whether you need the pixels.

Rendered & raw

Preview the rendered Markdown or read the raw source, then copy to clipboard or download a .md file.

Links & footnotes

Hyperlinks and footnotes are carried over as Markdown links, not dropped or flattened into plain text.

Limits & privacy

Honest defaults, clear about accounts

Free tier limits

Active slots (queue depth)3
Max PDF size10 MB
Time budget per document15 min
Ready result retention1 hour
QueueShared pool

We convert up to the time budget and return what we managed – the rest is truncated. Paid tiers raise every limit. Compare plans →

Privacy & access

Anonymous by default. Convert in the Chrome extension or the web app with no sign-up – requests are device-signed.
Sign in for more. A free Google account unlocks API keys, hosted MCP and paid tiers – in both the extension and the web app, with the same capabilities everywhere.
Keys are secrets. Sent as Authorization: Bearer p2m_… over HTTPS; revoke any key at any time.
Files auto-deleted. Results are removed after your tier's retention window, or delete them manually whenever you like.
Pricing

Start free. Upgrade for capacity and priority.

Paid plans add queue capacity, larger files, longer time budgets, retention, webhooks and higher queue priority backed by a dedicated paid conversion pool – so paid jobs don't wait behind the free backlog.

Free
$0
Anonymous in the browser
  • 3 slots · 10 MB
  • 15-min time budget
  • 1-hour retention
  • API key + hosted MCP (free account)
Builder
$9/mo
For steady automation
  • 10 slots · 25 MB
  • 25-min time budget
  • 6-hour retention
  • Webhooks · batch create
Business
$49/mo
For teams & pipelines
  • 50 slots · 100 MB
  • 55-min time budget
  • 24-hour retention
  • Priority support
View full pricing Live limits and prices are shown on the pricing page. Enterprise is available with custom limits.

Discovery built for agents and developers

Everything an agent needs to integrate without reading source code: setup hub, machine-readable manifests and an OpenAPI spec.

FAQ

Common questions

Do I need an account?

No account is needed for everyday conversion in either the Chrome extension or the web app. A free Google account unlocks API keys, hosted MCP and paid tiers – and those work the same in both the extension and the web app.

How do API keys work?

Sign in with Google, generate a key, and send it as Authorization: Bearer p2m_… over HTTPS. Keys are secrets you store securely and can revoke at any time. This is separate from the device-signed path the extension uses.

What is the hosted MCP?

A managed Model Context Protocol endpoint that exposes conversion as agent tools. It's a thin wrapper over the same REST API, so tool calls respect the same slots, limits and retention.

What do paid tiers add?

More slots, larger files, longer time budgets, longer retention, webhooks, batch create, higher rate limits, and higher queue priority backed by a dedicated paid conversion pool so paid jobs don't wait behind the free backlog. See the pricing page for live limits.

How long is my data kept?

Converted results are stored temporarily and auto-deleted after the retention window for your tier (1 hour on free, longer on paid). You can also delete any job manually at any time.

What happens with very long documents?

Each tier has a time budget. We convert up to that budget and return what we managed as a partial result flagged with truncated=true and a per-tier note, rather than failing outright. Higher tiers have longer budgets.

Is it really free?

Yes. The free tier gives 3 slots, 10 MB files, a 15-minute time budget and 1-hour retention – anonymous in the browser, no card. A free Google account additionally enables an API key and hosted MCP.

Does it work on scanned PDFs?

Yes. Image-only and scanned PDFs are OCR'd into selectable Markdown, including Cyrillic. You can also force OCR in the settings when a PDF has a bad text layer.

Which languages are supported?

Conversion and OCR handle a wide range of languages, including mixed-language documents and Cyrillic. The Chrome extension's interface is localized in 50+ languages.

Can I convert straight from a URL?

Yes. Paste a direct PDF URL in the extension or the web app, or POST a url to the API – no need to download the file first.

Are webhooks available?

On paid tiers you can register signed webhook endpoints (and per-job callback_url) to be notified when a job is ready, instead of polling for status.

Do you use my files to train models?

No. Files and results are stored only temporarily to run the conversion and are auto-deleted after the retention window. We don't use your documents to train models.