โ† PDF โ†’ Markdown (quality): all libraries ยท Reader board

pymupdf4llm vs markitdown: which one passes more of the page checks?

pymupdf4llm 2.1 and markitdown 0.1.9 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 from olmOCR-bench (AI2), 190 pages. Measured, not opinion; re-tested by itself on every new PyPI release. Updated 06 November 2026.

More checks passedpymupdf4llm38.6% vs 27.0%
Faster on this setmarkitdown99.0 s vs 116.5 s total (about as fast)
Both read134only pymupdf4llm: 1 ยท only markitdown: 1

pymupdf4llm passed more page checks: 38.6% vs 27.0%. pymupdf4llm broke (error, hang or crash) on 0 files that markitdown read; markitdown broke on 1 files that pymupdf4llm read.

LibraryText from๐Ÿ”ด Fails where
the other reads
๐ŸŸก Empty where
the other reads
โฑ Hangs or
crashes
โœ… Checks
passed
Median
ms/file
Total
seconds
pymupdf4llm 2.113501038.6%407116.5
markitdown 0.1.913510027.0%38199.0

By kind of page: checks passed

Pagespymupdf4llmmarkitdown
headers & footers 40 pages40.4%38.5%
multi-column 40 pages61.2%47.4%
old scans 40 pages0.0%0.0%
tables 40 pages64.1%25.0%
tiny text 30 pages34.5%32.7%

Files only pymupdf4llm reads (1)

pdfs/multi_column/0da8fcaacd0a502c317f9d222a55ffbb81e1_page_7_pg1.pdfmarkitdown: FileConversionException: File conversion failed after 1 attempts: - PdfConverter threw PDFKeyError with message: "PDF stream object 69 does not have attribute

Files only markitdown reads (1)

pdfs/multi_column/0cf93d937e0f519965d4ff67daec8dd5dea1_page_5_pg1.pdfpymupdf4llm: no text

What this does not tell you

This compares not breaking: whether each library gets any text out of each file. It does not rank text quality (reading order, tables, headings), and speed is one GitHub-hosted runner, default settings, no OCR switched on. If you need structure for RAG, also look at the output on your own files.

How this is measured