Benchmarks

July 8, 2026 · View on GitHub

Evaluated on 200 PDF documents with hand-annotated Markdown ground truth from the DP-Bench corpus.

  • Benchmark date: 2026-07-06 (vision arm re-run 2026-07-07 on nutrient 1.3.1)
  • Corpus: 200 documents with ground-truth Markdown annotations (42 with tables, 107 with headings)
  • Hardware: Apple M3 Ultra (no discrete GPU)
  • Metrics: NID (reading order), TEDS (table structure), MHS (heading hierarchy)
  • All scores normalized to [0, 1] — higher is better
  • All competitor libraries pinned to their latest versions as of the benchmark date
  • Nutrient --vision is the licensed machine-vision ICR tier of the same binary (--provider auto); its numbers below are from the 1.3.1 build, which is ~3× faster than 1.3.0 (1.045 → 0.354 s/page) with accuracy identical to four decimals

Accuracy Metrics

SolutionVersionExtraction accuracyReading order (NID)Table structure (TEDS)Heading level (MHS)
Nutrient --vision1.3.10.9330.9590.9380.868
docling2.110.00.8920.9050.9330.829
Nutrient1.3.00.8890.9260.7390.824
pymupdf4llm1.28.00.8590.9020.7310.777
opendataloader2.4.70.8310.9020.4830.739
markitdown0.1.60.5890.8440.2730.000
pypdf6.14.20.5760.8700.0000.000
liteparse2.4.10.5700.8570.0000.000

opendataloader-hybrid was not re-run in this pass (requires a separate docling backend service); its 2026-04-23 numbers were 0.87 / 0.91 / 0.68 / 0.81.

Speed

SolutionSeconds per page
Nutrient0.004
liteparse0.004
opendataloader0.015
pypdf0.015
markitdown0.069
pymupdf4llm0.218
Nutrient --vision0.354
docling0.549

Nutrient and liteparse convert batch-parallel; the other engines run sequentially in-process. Timing is wall-clock over the whole corpus on the hardware above. The --vision timing is per-document invocation; a single batch invocation over all 200 documents times the same (0.356 s/page), so process startup and model initialization are negligible once the models are cached.

Relative Speed Callouts (default engine)

  • Nutrient is 134x faster than docling
  • Nutrient is 53x faster than pymupdf4llm
  • Nutrient is 17x faster than markitdown
  • Nutrient is 4x faster than pypdf
  • Nutrient is 4x faster than opendataloader

Reproduction

Run on the private PSPDFKit-labs/opendataloader-bench harness (branch benchmark-update-with-new-parsers): uv run src/pdf_parser.py --engine <name> then uv run src/evaluator.py --engine <name>. The vision arm uses the nutrient-vision-cli engine with the 1.3.1 CDN binary (requires a vision license key).