Benchmarks · Extract stage

Real numbers.
Head to head.

Extraction is the stage where pipelines bottleneck — and where marketing gets loud. This page is Xberg measured head-to-head against the frameworks teams actually consider, on the documents production actually sees.

Figures from the latest benchmark run — reproducible from the open-source harness.

01 · The setup

Benchmarking
the landscape.

We could tell you Xberg is the best way to turn messy documents into clean text. Instead, we'll show you the data and let you decide.

8,949extractions per run
683test documents
52file types
9frameworks head to head

How we evaluated

We benchmarked Xberg against seven open-source extraction frameworks — Docling, Unstructured, Tika, MarkItDown, PyMuPDF4LLM, LiteParse and MinerU — on a corpus of 518 real-world documents across 52 file types: 8,949 extractions per run. The documents reflect messy production reality: scanned and rotated pages, malformed email, right-to-left text, academic PDFs, and spreadsheets with merged everything. We measured performance across seven dimensions:

Throughput

How many megabytes of mixed real-world documents become clean text per second — the number that sizes your worker fleet and your bill.

See the results ↓
Latency

Wall-clock time to extract one document, end to end — the number a user or an agent actually waits on.

See the results ↓
Cold start

Process start to first extracted document. Serverless functions and autoscaled workers pay this tax on every scale-up.

See the results ↓
Quality against ground truth

TF1 scores text completeness and SF1 scores structural precision, both against hand-verified extractions. Extraction quality is the ceiling on everything downstream.

See the results ↓
Reliability

Every attempted extraction lands in exactly one bucket — completed, errored, timed out, or empty — and nothing leaves the denominator.

See the results ↓
Memory under load

Peak resident memory per document — the number that sizes your containers and how many workers fit on a node.

See the results ↓
Install footprint

A fresh install including required system dependencies: deploy weight, image size, and whether it runs at the edge at all.

See the results ↓
Showing results for
52 of 96 supported formats have head-to-head data in this run · markdown: structured output with headings & tables — scored on TF1 and SF1
Output
Run mode
Overall
Documents
Word & rich text
Spreadsheets
Presentations
Web & markup
Data
Email
Images & OCR
eBooks & notebooks
Citations
Archives
Plain text
02 · Overall outcome

The landscape,
across the tools.

Every framework × every dimension for the full corpus. #1 marks each column's leader — Xberg rows always show their true rank. Switch formats above and the whole board re-ranks.

FrameworkThroughputCold startTF1 · textSF1 · layoutSuccess ratePeak memoryInstall size
Xberg#11.70 MB/s#1203 ms#40.982#40.620#1100.0%#132 MB#7
Xberg Layout#20.82 MB/s#3512 ms#50.979#30.631#2100.0%#232 MB#8
LiteParse0.10 MB/s206 ms0.9730.415100.0%68 MB#135 MB
Unstructured0.01 MB/s3.2 s0.9930.65192.9%303 MB1.36 GB
Docling0.09 MB/s19.6 s#11.000#10.88451.4%1.01 GB2.97 GB
MinerU0.00 MB/s62.8 s0.9070.61845.5%3.59 GB2.65 GB
MarkItDown0.27 MB/s4.0 s1.0000.49597.5%187 MB205 MB
PyMuPDF4LLM0.14 MB/s2.2 s0.8250.45197.7%355 MB52 MB
READ

Across the corpus, Xberg leads 4 of 7 columns; Docling takes tf1 · text, Docling takes sf1 · layout, LiteParse takes install size.

Always p50 · #1 = column leader · cold start & install size are framework-level

03 · Throughput

Megabytes in,
clean text out.

WHAT WE MEASURE

Megabytes of documents converted to clean, structured text per second.

WHY IT MATTERS

Ingestion is throughput-bound — this decides how many workers you run and what the bill says.

HOW WE MEASURE

Single-file mode, OCR off, identical hardware. Showing p50 of per-document throughput.

Xberg
1.70 MB/s
Xberg Layout
0.82 MB/s
MarkItDown
0.27 MB/s
PyMuPDF4LLM
0.14 MB/s
LiteParse
0.10 MB/s
Docling
0.09 MB/s
Unstructured
0.01 MB/s
MinerU
0.00 MB/s
READ

Across the corpus, Xberg leads throughput at 1.70 MB/s.

04 · Latency

Milliseconds per document,
not seconds.

WHAT WE MEASURE

Wall-clock time to extract one document, end to end.

WHY IT MATTERS

Latency is what a user or an agent actually waits on — and the tail is what pages you at 2am.

HOW WE MEASURE

Per-document duration at p50, log scale. Extraction-only timings ship in the raw release.

Xberg
22 ms
Xberg Layout
24 ms
MarkItDown
1.3 s
LiteParse
1.5 s
PyMuPDF4LLM
1.7 s
Unstructured
3.0 s
Docling
7.8 s
MinerU
35.1 s
READ

Across the corpus, Xberg leads per-document latency at 22 ms.

05 · Cold start

The first document
shouldn't cost seconds.

WHAT WE MEASURE

Time from process start to the first extracted document — model loads, JVM boots and import chains included.

WHY IT MATTERS

Serverless functions, autoscaled workers and CLIs pay this startup tax on every scale-up.

HOW WE MEASURE

First-document latency at p50, log scale. Framework-level — identical across formats.

Xberg
203 ms
LiteParse
206 ms
Xberg Layout
512 ms
PyMuPDF4LLM
2.2 s
Unstructured
3.2 s
MarkItDown
4.0 s
Docling
19.6 s
MinerU
62.8 s
READ

Framework startup, Xberg leads cold start at 203 ms.

06 · Quality

Fidelity, measured against
ground truth.

WHAT WE MEASURE

Two F1 scores against hand-verified ground truth: TF1 measures how complete the extracted text is, SF1 how precise the layout structure — headings, tables, hierarchy — comes out.

WHY IT MATTERS

Extraction quality caps everything downstream: retrieval can't find what extraction dropped.

HOW WE MEASURE

Per-document F1 at p50. Rows ordered by corpus coverage, not score — a fidelity number counts for more when it spans more documents.

Xberg568 scored
TF1
0.98
Numeric
1.00
SF1
0.62
Xberg Layout568 scored
TF1
0.98
Numeric
1.00
SF1
0.63
Unstructured488 scored
TF1
0.99
Numeric
1.00
SF1
0.65
MarkItDown391 scored
TF1
1.00
Numeric
1.00
SF1
0.49
PyMuPDF4LLM211 scored
TF1
0.82
Numeric
0.67
SF1
0.45
Docling206 scored
TF1
1.00
Numeric
1.00
SF1
0.88
LiteParse172 scored
TF1
0.97
Numeric
0.96
SF1
0.41
MinerU83 scored
TF1
0.91
Numeric
0.67
SF1
0.62
READ

A high F1 near the bottom of the list is measured on a narrow slice of the corpus — rows are ordered by coverage, so the top rows earn their scores across the whole gauntlet.

07 · Reliability

Every file counts.
No hand-picking.

WHAT WE MEASURE

The outcome of every attempted extraction: completed, errored, timed out, or empty.

WHY IT MATTERS

Production doesn't skip weird files — the failures are exactly the ones that page you at 2am.

HOW WE MEASURE

Every attempt kept in the denominator. OCR off.

CompletedErrorsTimeoutsEmpty output
Xberg
100%
Xberg Layout
100%
LiteParse
100%
PyMuPDF4LLM
97.7%
MarkItDown
97.5%
Unstructured
92.9%
Docling
51.4%
MinerU
45.5%
READ

Across the corpus, Xberg leads reliability at 100.0%.

08 · Memory

Peak memory,
under real load.

WHAT WE MEASURE

Peak resident memory per document during extraction.

WHY IT MATTERS

Peak memory sets container size — and container size sets how many workers fit on a node.

HOW WE MEASURE

RSS sampled across each run; per-document peak at p50.

Xberg
32 MB
Xberg Layout
32 MB
LiteParse
68 MB
MarkItDown
187 MB
Unstructured
303 MB
PyMuPDF4LLM
355 MB
Docling
1.01 GB
MinerU
3.59 GB
READ

Across the corpus, Xberg leads peak memory at 32 MB.

09 · Install footprint

Deploy weight,
not dead weight.

WHAT WE MEASURE

Disk size of a fresh install, including required system dependencies.

WHY IT MATTERS

Image size drives cold deploys, autoscaling lag, and whether it runs at the edge at all.

HOW WE MEASURE

Fresh install incl. system dependencies, log scale. Framework-level — identical across formats.

LiteParse
35 MB
PyMuPDF4LLM
52 MB
MarkItDown
205 MB
Tika
272 MB
Unstructured
1.36 GB
MinerU
2.65 GB
Docling
2.97 GB
READ

Data issue: Xberg's install size is missing from this run's disk-size measurements, so it is shown as unavailable. Among measured frameworks, LiteParse is leanest at 35 MB while Docling's install tops 2.9 GB.

10 · The corpus

One gauntlet,
no favorites.

518 documents across 52 file types — chosen to be awkward, not flattering. Academic PDFs, scanned and rotated pages, malformed email, right-to-left text, spreadsheets with merged everything.

PDF×177Markdown×110JSON×110Word & rich text×66Email×50HTML×37Spreadsheets×32Images & OCR×24LaTeX & markup×18eBooks & notebooks×13Presentations×10Archives×4
SAME ARENA

Every framework runs the identical corpus on identical hardware, driven by the same open-source harness — no vendor-tuned configs.

PERCENTILES, NOT AVERAGES

Every chart reads at p50 by default and flips to the p95 / p99 tail with one toggle. Averages hide the tail, and the tail is where pipelines fall over.

FAILURES COUNT

Errors, timeouts and empty output are recorded against the run — a framework doesn't get to skip the documents it can't handle.

OPEN HARNESS

The harness, the corpus and the raw results are public. One command reproduces every number on this page.

Open-source primitives, composed into one backend. Curated cohort of design partners. Apply to work with us.

Cookies

We value your privacy

Xberg uses cookies to improve your experience, personalize content, and analyze traffic. You can manage your preferences at any time.