The best PDF to Markdown converters in 2026, honestly compared

Short version. For clean born-digital PDFs, almost any extractor works — don't overthink it. The tools split where documents get hard: multi-column pages, merged tables, scans, formulas. Below: the named tools in each class, three failure cases you can reproduce yourself, and what the output actually looks like. We build Markovo — disclosure done — our measured numbers are on the benchmarks page.

The PDF to Markdown landscape in 2026

"PDF to Markdown" isn't one technique — it's four distinct generations of tooling, and most of what's sold today sits in generation three:

GenerationReal tools in this classHow it reads the pageWhere it breaks
Gen 1 · text layerpdfminer.six, PyPDF2/pypdf, pdf.js, pdftotextDumps the embedded text stream in file orderAny page without a clean text layer; all layout semantics lost
Gen 2 · rules + heuristicsPyMuPDF text-dict pipelines, font-size→heading heuristics, hand-rolled table findersText + geometric hints (font sizes, line positions)Anything the rule author didn't anticipate — which is most real documents
Gen 3 · extraction + small OCROCRmyPDF/Tesseract pipelines, pdfplumber table extraction, template-driven converters, most free "PDF→MD" websitesText layer first; pixels only when forced; small models for the restMulti-column reading order, merged/nested tables, formulas, low-DPI scans, handwriting
Gen 4 · document modelsolmOCR-class pipelines, MinerU, Docling layout models, end-to-end document vision models — and Markovo's production pipelineRenders the page; a document-scale model reads layout, cells, math regions, captionsCosts real compute; still needs review on handwriting and dense notation

Read the technique column, not the label: if a tool's docs say "extract the text layer, OCR when needed," it's generation three whatever the marketing says.

The tools you'll actually run into

Named, not abstract — the ones that show up in every "pdf to markdown" thread, with the limits people find after they've already committed:

ToolRuns where / costGood atWatch out for
pdftotext / pdfminer.sixLocal CLI or library · freeInstant on born-digital, single-column pagesNo structure at all — you get a text dump
PyMuPDF4LLM (Artifex)Local Python · AGPLVery fast text-layer MarkdownReading order breaks around figures and columns; the AGPL license matters for commercial pipelines
MarkItDown (Microsoft, MIT)Local Python · freeMany input formats through one APIEmits no heading structure from PDFs — section titles come out as plain text; no built-in OCR
pdfplumberLocal Python · freeTable-region extraction you controlAn extraction toolkit, not a document converter — you assemble the pipeline yourself
Docling (IBM Research, MIT)Local Python · freeStructured document model; marks undecodable content instead of inventing itDrops formulas and figures rather than recovering them; model downloads required
Marker (Datalab)Local models · check commercial-use termsFormulas and figures; consistent across document typesMulti-column signature and reference blocks can interleave; wants a GPU
MinerU (OpenDataLab)Local VLM · open sourceTop-end tables and formulas on public benchmarksKnown to drop footnote text and promote contents lines to headings; GPU effectively required
MathpixHosted API · per-page pricingEquations and scientific PDFsHosted only; one independent test caught silent number changes in dense tables — verify totals
MarkovoHosted · per-page Credits, web + API + CLI + MCP15 input types to one verified Markdown bundle; page-aware routing; 4th of 13 on OpenDataLoader-Bench's own leaderboardCosts Credits; handwriting and dense notation still get flagged for review

The pattern across independent benchmarks: every tool above fails somewhere — the honest ones fail visibly. Whichever you pick, check the failure mode, not the demo page.

Three failure cases you can reproduce yourself

These aren't hypothetical — they're the same categories public benchmarks score.

Case 1 · Multi-column reading orderany two-column paper or magazine
What gen-3 outputs
The quarterly results  In other news, the
showed strong growth   committee announced
across all regions,   that the quarterly
with revenue up 12%   results showed strong
year over year.       growth across all…
What the document actually says
The quarterly results showed strong
growth across all regions, with revenue
up 12% year over year.

In other news, the committee announced
that the quarterly results showed…
Why it happens: the extractor reads text fragments in file order — left column line 1, right column line 1 — with no concept of columns.
Case 2 · Table structureany financial report or spec sheet
What gen-3 outputs
Quarter Success P95 seconds Status
Q1 96.2% 4.8 Ready Q2 97.4% 4.4
Ready Q3 98.1% 4.1 Ready
What you need
| Quarter | Success | P95 seconds | Status |
|---------|---------|-------------|--------|
| Q1      |   96.2% |         4.8 | Ready  |
| Q2      |   97.4% |         4.4 | Ready  |
| Q3      |   98.1% |         4.1 | Ready  |
Why it happens: a table has no "table" in the PDF — just positioned text fragments and maybe some ruled lines. Rebuilding cells requires understanding the grid, not reading lines.
Case 3 · Scans and formulasold scans, contracts, academic PDFs
What small OCR outputs
Tfie clalnt frmn tho Sh3ll Deed of
1844  dEaAwitn d* E = mc2 appearz
hereln  tha Purchasor c0venants…
What a document model reads
The clause from the Shell Deed of
1844 drawing on E = mc² appears
herein; the Purchaser covenants…
Why it happens: a Tesseract-class model reads glyphs at word scale, not document scale — it can't use layout context to fix "Tfie" → "The."

These three categories are exactly what public benchmarks score — our measured numbers on the full 200-document OpenDataLoader-Bench and DP-Bench are on the benchmarks page.

What the output actually looks like

A real output.md from a converted dashboard-style document — straight from the bundle, nothing prettied up for the screenshot:

output.mdproofs/table bundle
**Quarterly quality dashboard**

| Quarter | Success | P95 seconds | Status |
|---------|---------|-------------|--------|
| Q1      |   96.2% |         4.8 | Ready  |
| Q2      |   97.4% |         4.4 | Ready  |
| Q3      |   98.1% |         4.1 | Ready  |

![Quality dashboard embedded image 1](assets/sheet-1-image-1-d09aca096ccd3886.png)

Success rate. Success rises from 96.2% at Q1 to 98.1% at Q3; highest 98.1% at Q3; lowest 96.2% at Q1.

![Success rate](assets/sheet-1-chart-1-336c797e94ae8a26.svg)

Headings as headings, a table as a real pipe table, chart figures described in text, images as references to actual files in assets/. It opens as-is in Obsidian, VS Code, GitHub — anything that reads Markdown. The bundle also carries source_map.json (which page each line came from) and quality_report.json (per-page confidence and review flags), so verification doesn't mean trusting the converter.

Why the model route exists — and what it costs

Document-model pipelines treat the page as an image first: a document-scale model sees that twelve fragments form a 3×4 table, that this block is a formula, that the right column continues the left — the same cues you use. The output is the structure the page was showing, not the bytes that were in the file.

The trade-off: vision models cost GPU time, so they're slower per page and billed per page of work — which is why we show the Credit estimate before conversion. In practice the answer is both, routed per page: clean text-layer pages take the fast extraction route, pages that need vision take the document model. One merged output.md, per-page provenance in source_map.json.

Which do you actually need?

What the PDF-only comparisons skip

Most roundups test PDFs and stop. But the documents that actually reach a pipeline aren't all PDFs — they're Word exports, slide decks, EPUB books, screenshots, meeting recordings, web pages. A different converter per type means a different output shape per type.

Markovo runs one route for all of it: Word, Excel, PowerPoint, EPUB, images, audio, video, Notion, GitHub, YouTube, Hacker News, public URLs — each lands as the same Markdown bundle with the same verification artifacts. And it's scriptable end to end: the API, CLI and MCP server return the same bundle, so the pipeline that handles your PDFs handles the rest of the corpus.

FAQ

Which PDF to Markdown converter is actually the best in 2026?

Depends on your documents. For clean born-digital files, any text-layer extractor works — don't pay for a model to re-read correct text. For tables, multi-column layouts, scans, or anything feeding RAG, you want a document-model pipeline. On OpenDataLoader-Bench's own leaderboard we sit 4th of 13 overall, with the second-best published reading-order and table scores — methodology and numbers on the benchmarks page.

Is Markovo a document-model converter?

It routes each page: clean text-layer pages take fast extraction, pages needing vision take document models — and every bundle attaches quality evidence (per-page confidence, source maps, extracted assets). Pages that need human eyes are flagged, not silently approximated.

Is text-layer extraction ever the right answer?

Yes — for born-digital single-column PDFs it's fast, cheap, and accurate. The mistake is using it as the only route and calling the result "conversion" for documents it can't see.

How can I compare converters objectively?

Run a public benchmark instead of screenshots: OpenDataLoader-Bench and DP-Bench score real outputs against fixed rules and publish their baselines. Our runs — method, dataset, scores — are on the benchmarks page.