← Reader board: all formats

Which Python tool turns PDFs into the most faithful Markdown?

Docling, pymupdf4llm, Marker, Kreuzberg, markitdown: each one tested on the same 190 PDF pages with checks written by AI2's olmOCR-bench: multi-column articles, tiny print, old scans, tables, pages with headers and footers. New PyPI releases are tested again by themselves. Updated 06 November 2026.

190 files from olmOCR-bench (AI2), 190 pages; 190 of them give text to at least one library.
Library🔴 Fails where
another reads
🟡 Empty where
another reads
⏱ Hangs or
crashes
✅ Checks
passed
Median
ms/file
Total
seconds
1 Docling 2.148.000064.1%56971,564.0
2 pymupdf4llm 2.1055038.6%407116.5
3 Marker 2.1.0
Note: Marker 2 runs its OCR model (Surya 2.5, 1.2 GB) through llama.cpp's llama-server, installed separately as its docs say: official CPU build b12177.
930036.6%636228.9
4 Kreuzberg 4.10.4054028.8%209.1
5 markitdown 0.1.9154027.0%38199.0

By kind of page: checks passed

PagesDoclingpymupdf4llmMarkerKreuzbergmarkitdown
headers & footers 40 pages89.0%40.4%72.5%61.5%38.5%
multi-column 40 pages73.7%61.2%47.4%56.6%47.4%
old scans 40 pages20.9%0.0%0.0%0.0%0.0%
tables 40 pages68.8%64.1%32.8%0.5%25.0%
tiny text 30 pages79.2%34.5%46.9%43.4%32.7%

How this is measured