Last updated

PDF Parsing Benchmark 2026: Speed, Table and OCR Statistics for 6 Parsers

Measured statistics from the Parsebridge PDF Parser Benchmark 2026. Docling, PyMuPDF4LLM, Marker, MinerU, MarkItDown and Unstructured on the same five PDFs, with speed, table accuracy, OCR, install size and chunking numbers.

This page collects the numbers from the Parsebridge PDF Parser Benchmark 2026. Between October 12 and November 2, 2026 we ran six open-source PDF parsers on the same five PDFs on one machine: Docling, PyMuPDF4LLM, Marker, MinerU, MarkItDown and Unstructured. We measured every figure here ourselves, except in the section marked as other sources. Each section links to the test post with the setup, the versions and the verbatim output.

Disclosure: Parsebridge sells a hosted Docling API. The test set is five PDFs on one Mac, so these numbers describe those files and that machine. They do not rank the parsers for every document.

Key findings

  • The Parsebridge PDF Parser Benchmark 2026 measured Docling at 3.8 to 4.1 seconds per page on a 60-page report, with default settings on an Apple M4 (229 to 244 seconds across Docling 2.138 to 2.141).
  • In the Parsebridge PDF Parser Benchmark 2026, MarkItDown converted a 60-page report in 4.5 seconds, 53 times faster than Docling, and returned no table for a dense numeric table and no text for a scanned page.
  • The Parsebridge PDF Parser Benchmark 2026 found that PyMuPDF4LLM 2.0 converted a 60-page report in 13.1 seconds, about 17 times faster than Docling, and that both parsers got 20 of 22 rows of a dense 15-column table exactly right.
  • In the Parsebridge PDF Parser Benchmark 2026, MinerU’s advanced tier and Marker were the only configurations that put all 330 values of the dense table in the right cells. Marker dropped the series names from the row labels, and MinerU advanced took 18 minutes on the 60-page report.
  • The Parsebridge PDF Parser Benchmark 2026 found that the open-source Unstructured library got 10 of 22 rows of the dense table right in its hi_res strategy, against 20 of 22 for Docling.
  • In the Parsebridge PDF Parser Benchmark 2026, two of six parsers returned an empty string for a scanned page as installed with pip: PyMuPDF4LLM and MarkItDown.
  • The Parsebridge PDF Parser Benchmark 2026 found that OCR accounted for 16 to 19% of Docling’s conversion time on a born-digital 60-page report.
  • In the Parsebridge PDF Parser Benchmark 2026, install size ranged from 182 MB for MarkItDown to 2.7 GB for MinerU with its models. Docling took 1.7 to 1.9 GB.
  • The Parsebridge PDF Parser Benchmark 2026 measured the Granite-Docling vision language model at 74 to 110 seconds per page on CPU and 3 to 15 seconds per page on the Apple GPU.
  • In the Parsebridge PDF Parser Benchmark 2026, switching Docling’s HybridChunker to Markdown tables cut a 60-page report from 5,592 chunks to 1,107 and chunking time from 383 seconds to 2.3 seconds.

PDF parsing speed on a 60-page report

The report is the 60-page EIA Short-Term Energy Outlook, October 2026, a born-digital PDF with prose, 16 pages of charts and more than 30 tables. Times are warm conversions with default settings, from the second of two runs.

Parser and configurationSecondsPages per second
MarkItDown 0.1.84.513.3
PyMuPDF4LLM 2.0, no OCR engine13.14.6
MinerU 4.0.12 flash13.64.4
PyMuPDF4LLM 1.28.215.53.9
PyMuPDF4LLM 2.0 with RapidOCR23.62.5
MinerU 4.0.12 basic34.21.8
MinerU 4.0.12 standard (default)59.61.0
Marker 2.0.0, fast mode81.30.74
Unstructured 0.27.33 ocr_only224.70.27
Docling 2.138 to 2.141229.4 to 243.70.25 to 0.26
Unstructured 0.27.33 hi_res236.60.25
MinerU 4.0.12 advanced1,093.30.05

Docling took 238.8, 243.7, 229.4 and 230.4 seconds in four separate test rounds on versions 2.138, 2.139, 2.140 and 2.141.

Unstructured’s fast strategy returned an empty string for this report in 0.1 seconds. One page of charts with 14,963 graphics operations made the library skip the text layer for the whole file.

With OCR turned off, Docling took 197 seconds instead of 244 (version 2.139) and 193 seconds instead of 229 (version 2.140).

MinerU standard converted the report about four times faster than Docling. Marker converted it about three times faster.

Sources: tested roundup, Docling vs MinerU, Docling vs PyMuPDF4LLM, Docling vs Unstructured.

Conversion time per document

Seconds per document, warm, second of two runs. “Cold” is a fresh process converting a one-page PDF, including imports and model loading, with models already downloaded.

Parser and configurationColdPaper (10 p.)Table (1 p.)Scan (1 p.)Form (1 p.)
MarkItDown 0.1.80.50.40.20.0 (no text)0.1
PyMuPDF4LLM 2.0, no OCR engine0.61.40.30.2 (no text)0.4
PyMuPDF4LLM 2.0 with RapidOCR0.94.80.30.90.4
MinerU flash0.91.40.20.80.1
Unstructured fast2.50.90.40.0 (no text)0.2
MinerU basic4.412.20.71.41.6
MinerU standard (default)5.024.50.74.158.5
Unstructured ocr_only7.542.15.51.04.4
Docling 2.138 to 2.1418.2 to 11.06.6 to 7.64.4 to 4.83.7 to 3.93.9 to 4.2
Unstructured hi_res10.228.75.51.34.3
Marker 2.0.0, fast mode12.924.80.614.80.7
MinerU advanced44.688.241.411.7127.8

MinerU standard spent 58.5 seconds on a one-page tax form. Its vision language model generated about 15,000 characters of dot leaders in one table cell.

The same timings are available as a CSV file.

PDF table extraction accuracy

The dense table is Table 1 of the EIA report: 22 data rows and 15 numeric columns under year and quarter headers, 330 values in total. A row counts as right when all 15 values are in the right cells. Row labels and headers are described separately.

Parser and configurationRows right, of 22What went wrong
MinerU advanced22Nothing in the values. Some row labels lost their spacing.
Marker 2.0.0, fast mode22Nothing in the values. The series names were dropped from the row labels and the year header was missing.
Docling 2.139 to 2.14120The last two rows were merged into one.
PyMuPDF4LLM 2.020Thousands separators of one row moved into the next. Year header split.
Unstructured hi_res10Shifted labels, merged cells and OCR misreads such as 44 for 4.4.
Granite-Docling VLM pipeline9 on the Apple GPU, 8 on CPUValues moved up a row. Counted with empty cells ignored.
MinerU flash, basic, standardNo usable rowsThe table body collapsed into two cells.
MarkItDown 0.1.8, Unstructured fastNo tableLabels and numbers came out as separate lines.

The standard pipeline of docling-serve 1.32.0, which runs Docling 2.124, also got 20 of 22 rows right.

On a two-column research paper with four tables, MinerU advanced got all four tables right.

On the same paper, PyMuPDF4LLM 2.0 got three of four tables cell for cell and split the header of the fourth.

On the same paper, Docling got two of four tables cell for cell, moved one header cell in the third, and shifted the last column and merged two rows of the fourth.

Sources: tested roundup, Docling vs MinerU, Docling vs PyMuPDF4LLM, Docling vs Unstructured, Granite-Docling VLM pipeline.

OCR on scanned PDFs

The scan is a one-page, image-only PDF with a small table and no text layer.

Docling and MinerU’s default tier returned all of the text and the table with no extra install.

Marker returned all of the text and the table after one extra install step, a llama.cpp binary, and took 14.8 seconds for the page.

PyMuPDF4LLM returned an empty string until an OCR engine was installed. With RapidOCR it read the page in 0.9 seconds.

MarkItDown returned an empty string. Its PDF converter has no OCR step.

Unstructured needs the Tesseract binary, which pip install "unstructured[pdf]" does not install. Its ocr_only strategy read every word correctly, its hi_res strategy lost both quantities in the table, and its fast strategy returned an empty string.

Docling took 3.7 to 3.9 seconds for the scanned page.

Sources: tested roundup, Docling vs PyMuPDF4LLM, Docling vs Unstructured. Docling’s OCR settings are covered in the Docling OCR guide.

Install size and cold start

ParserEnvironmentModelsCold start
MarkItDown 0.1.8182 MBNone0.5 s
PyMuPDF4LLM 2.0262 MB (about 440 MB with RapidOCR)Included0.6 s (0.9 s with RapidOCR)
Docling 2.138 to 2.1411.2 to 1.4 GB0.5 GB8.2 to 11.0 s
Unstructured 0.27.331.8 GB, plus Tesseract0.3 GB2.5 s (fast) to 10.2 s (hi_res)
MinerU 4.0.121.3 GB1.4 GB0.9 s (flash) to 44.6 s (advanced)

A fresh Docling process needed 4 to 7 seconds more than a warm conversion of the same page.

Sources: the four comparison rounds listed under Method.

Granite-Docling VLM speed

Seconds per page in docling-serve 1.32.0, on four single pages.

PipelineTableScanEquationCode
Standard pipeline, defaults9.72.22.10.2
Granite-Docling, MLX on the Apple GPU14.83.05.86.5
Granite-Docling, Transformers on CPU109.474.583.186.1

Granite-Docling on CPU was 7 to 25 times slower than on the Apple GPU.

The standard pipeline ran at the same speed on CPU (9.6, 2.2, 2.1 and 0.3 seconds), which made Granite-Docling on CPU 11 to 310 times slower than the standard pipeline.

At 74 to 110 seconds per page, a 100-page document takes two to three hours on one CPU worker.

SmolDocling gave no usable output on any of the four pages on the Apple GPU.

Source: Granite-Docling VLM pipeline in docling-serve.

Docling chunking statistics

Measured with Docling 2.145 on the 60-page report, with the MiniLM tokenizer and a 256-token limit.

HybridChunker with its default triplet tables produced 5,592 chunks and 1.2 million tokens in 383 seconds.

HybridChunker with Markdown tables produced 1,107 chunks and 233,000 tokens in 2.3 seconds.

HierarchicalChunker has no size limit, and its largest chunk was 197,486 tokens.

A fixed-size split of the Markdown produced 621 chunks, and LangChain’s header splitter followed by a recursive split produced 881.

A Docling document rebuilt from its own Markdown kept all 92 section headers and all 33 tables, and lost every page number and bounding box (595 of 595 items had them before, 0 of 561 after).

Source: Docling chunking: HybridChunker vs HierarchicalChunker.

Numbers from other sources

We did not measure these. Each one names its source and the date we checked it.

LlamaParse costs $1.50 to $37.50 per 1,000 pages at pay-as-you-go rates across its four tiers, at 1 to 25 credits per page (LlamaIndex pricing page, checked November 9, 2026).

Unstructured’s hosted API costs $15 per 1,000 pages after 10,000 free pages (Unstructured pricing page, checked November 9, 2026).

Marker’s model weights are free for research, personal use and companies under $5 million in revenue and funding (Marker repository, checked October 2026).

MinerU requires a separate commercial license above 100 million monthly active users or $20 million in monthly revenue (MinerU Open Source License, checked October 2026).

Granite-Docling has 258 million parameters (IBM model card, checked October 29, 2026).

The Docling maintainers report 2.0 to 3.8 pages per second for Granite-Docling behind an inference server on NVIDIA GPUs (Docling GPU guide, checked October 29, 2026).

For comparison, Parsebridge’s three monthly plans work out to $3.40, $1.32 and $0.86 per 1,000 pages when the full page allowance is used. More detail is in LlamaParse vs Docling vs Marker.

Method

The PDFs. Each one stresses one thing.

FileWhat it testsSource
Paper, 10 pagesTwo columns, four tables, figuresPubTables-1M (Smock, Pesala, Abraham), CC BY 4.0
Table, 1 page15 numeric columns, 22 data rows, two-line row labelsPage 31 of the EIA Short-Term Energy Outlook, October 2026, public domain
Scan, 1 pageImage-only page with a small tableOur scanned order fixture, synthetic
Form, 1 pageBoxes, checkboxes, dot leadersPage 1 of the 2026 IRS Form W-4, public domain
Report, 60 pagesTimingThe full EIA Short-Term Energy Outlook

The machine. Mac mini, Apple M4 (4 performance and 6 efficiency cores), 16 GB RAM, macOS 26.6, Python 3.12.15. Each parser had its own virtual environment.

Settings. Every parser ran with its documented defaults unless a row names a tier, strategy or option. Docling ran as DocumentConverter() with no options, with OCR on and its models on the Apple GPU.

Timing. In the four comparison rounds, each document was converted twice in one process, and we report the second run. In the roundup, the two runs of the 60-page report differed by 2 to 13% per parser. The Granite-Docling round sent one warm-up request and then two timed requests per page, with one timed request per page on CPU and three on the table page, and reports the server’s own processing time. The chunking round converted each PDF once and ran each chunking method twice, reporting the second run, except that a first run over 60 seconds was reported as it was.

Quality. Every judgment comes from reading the saved output against the PDF page.

Test rounds.

RoundPublishedParsers and versions
RoundupOctober 12, 2026Docling 2.138.0, PyMuPDF4LLM 1.28.2, Marker 2.0.0, MinerU 4.0.12, MarkItDown 0.1.8
Docling vs MinerUOctober 16, 2026Docling 2.139.0, MinerU 4.0.12 in four tiers
Docling vs PyMuPDF4LLMOctober 20, 2026Docling 2.140.0, PyMuPDF4LLM 2.0
Docling vs UnstructuredOctober 22, 2026Docling 2.141.0, Unstructured 0.27.33 in three strategies
Granite-Docling VLM pipelineOctober 29, 2026docling-serve 1.32.0 with Docling 2.124.0
Docling chunkingNovember 2, 2026Docling 2.145.0, docling-core 2.105.0

Limits. Five PDFs cannot rank these parsers for your documents. We did not test hosted services such as LlamaParse, the Datalab API, Mistral OCR or Azure Document Intelligence, and we did not test NVIDIA GPUs. Where the roundup and a later round measured the same configuration, the tables above use the later round.

How to cite

Cite this page as the Parsebridge PDF Parser Benchmark 2026, with a link to https://parsebridge.com/pdf-parsing-benchmark/. You can quote any number here with that credit.

We add to this page each time we run a new test round, and the address stays the same.

Run Docling without the install

Parsebridge is a hosted Docling API. You send a PDF as a file upload or a URL and get Markdown back, with no servers or model downloads to manage. Signing up gives you 50 free pages, and plans start at $17 a month for 5,000 pages. To see Docling’s output on one of your own PDFs first, the free PDF to Markdown converter converts the first page without an account.