In its default auto tier, PDFluent 1.3.0 scores 0.9168 overall on opendataloader-bench, above the 0.907 of opendataloader [hybrid], the highest of the 12 engines on the benchmark's public leaderboard.* The score was measured with the benchmark's own harness and evaluator on its 200 documents; PDFluent is not on that leaderboard yet.
Two rows, one per extraction tier, each scored on all 200 documents of the benchmark.
Overall score, default tier: layout and table models, OCR for pages without a text layer.
Overall score, fast tier: the engine alone, no models installed.
7af1d8f4d0c09f51ea1a5c6ba5f66e993286d109, its own evaluator*Measured with the benchmark's own harness and evaluator. PDFluent is not on its public leaderboard yet. opendataloader-bench at commit 7af1d8f.
The auto tier has the highest overall score in the table, +0.010 on opendataloader [hybrid]. The fast tier is in fifth place on overall against the same 12 engines.
Sorted by overall. Sorted by one measure: reading order · table structure · heading hierarchy
| # | Engine | Overall | Reading order | Table structure | Heading hierarchy | Licence |
|---|---|---|---|---|---|---|
| 1 | PDFluent 1.3.0 auto | 0.9168 | 0.9357 | 0.8922 | 0.8678 | AGPL-3.0-only or the PDFluent Commercial Licence, at your option |
| 2 | opendataloader [hybrid] | 0.907 | 0.934 | 0.928 | 0.821 | Apache-2.0 |
| 3 | nutrient | 0.885 | 0.925 | 0.708 | 0.819 | Commercial |
| 4 | docling | 0.882 | 0.898 | 0.887 | 0.824 | MIT |
| 5 | marker | 0.861 | 0.890 | 0.808 | 0.796 | GPL-3.0 |
| 6 | PDFluent 1.3.0 fast | 0.8577 | 0.9000 | 0.6347 | 0.8147 | AGPL-3.0-only or the PDFluent Commercial Licence, at your option |
| 7 | unstructured [hi_res] | 0.841 | 0.904 | 0.588 | 0.749 | Apache-2.0 |
| 8 | edgeparse | 0.837 | 0.894 | 0.717 | 0.706 | Apache-2.0 |
| 9 | opendataloader | 0.831 | 0.902 | 0.489 | 0.739 | Apache-2.0 |
| 9 | mineru | 0.831 | 0.857 | 0.873 | 0.743 | AGPL-3.0 |
| 11 | pymupdf4llm | 0.732 | 0.885 | 0.401 | 0.412 | AGPL-3.0 |
| 12 | unstructured | 0.686 | 0.882 | 0.000 | 0.388 | Apache-2.0 |
| 13 | markitdown | 0.589 | 0.844 | 0.273 | 0.000 | MIT |
| 14 | liteparse | 0.576 | 0.866 | 0.000 | 0.000 | Apache-2.0 |
On opendataloader-bench, PDFluent in the auto tier is highest on 2 of the 3 measures (reading order and heading hierarchy) and second on table structure, against the 12 leaderboard engines.
In the auto tier, PDFluent scores 0.9168 on overall, higher than all 12 leaderboard engines; the closest is opendataloader [hybrid] at 0.907.
In the fast tier, with no models, it scores 0.8577, in fifth place against the same engines.
In the auto tier, PDFluent scores 0.9357 on reading order, higher than all 12 leaderboard engines; the closest is opendataloader [hybrid] at 0.934.
In the fast tier, with no models, it scores 0.9000, in fifth place against the same engines.
In the auto tier, PDFluent scores 0.8922 on table structure, in second place against the 12 leaderboard engines, behind opendataloader [hybrid] (0.928).
In the fast tier, with no models, it scores 0.6347, in seventh place against the same engines.
In the auto tier, PDFluent scores 0.8678 on heading hierarchy, higher than all 12 leaderboard engines; the closest is docling at 0.824.
In the fast tier, with no models, it scores 0.8147, in fourth place against the same engines.
NID scores reading order, TEDS scores table structure and MHS scores heading hierarchy, each from 0 to 1 against the benchmark's ground truth.
The benchmark's own overall score: the mean over the documents of each document's combined score, as its evaluator computes it.
One number for a first comparison. The three measures below tell you where it comes from.
Normalized indel distance between the extracted text and the ground truth: how much of the text comes out, in the right order.
Reading order matters for RAG chunking: a chunk whose sentences come out of order retrieves and reads badly.
NID = 1 − distance / (len(gt) + len(pred))
Tree edit distance similarity between each extracted table and the true one, counting rows, columns, spans and cell text.
Tables matter for invoices, financial statements and reports, where a row has to stay a row and a cell has to stay in its column.
TEDS = 1 − EditDist(T_gt, T_pred) / max(|T_gt|, |T_pred|, 1)
How closely the Markdown headings and their levels match the document's own outline.
Heading levels decide where a section-aware splitter can cut a document and which section title a chunk carries.
MHS = 1 − EditDist(H_gt, H_pred) / max(|H_gt|, |H_pred|, 1)
Formulas as the benchmark's README gives them (section 3, Metrics). Documents without a table or headings in the ground truth are left out of that measure's mean.
Pick the measure that matches your documents, then read that column of the leaderboard, not only the overall score.
| Job | What matters | PDFluent tier | PDFluent on this benchmark |
|---|---|---|---|
| RAG pipeline | Reading order (NID) and heading hierarchy (MHS): chunks in order, cut at sections | auto | Reading order: highest against the 12 leaderboard engines, at 0.9357. Headings: highest against the 12 leaderboard engines, at 0.8678. |
| Invoices, statements, reports | Table structure (TEDS) | auto, with the table model | Table structure: second against the 12 leaderboard engines, at 0.8922. |
| Speed-sensitive batch | Time per page on your hardware | fast, no models | Not compared here. Speed is measured separately on an Apple M4 and will appear on the benchmarks page with its machine and date. |
| No model downloads | The text layer only, nothing to install beyond the package | fast | Overall: fifth against the 12 leaderboard engines, at 0.8577. |
| Commercial licence needed | The licence column of the leaderboard | either tier | AGPL-3.0-only or the PDFluent Commercial Licence, at your option. |
Places are computed from the rows in the leaderboard above. Licences of other engines as their README states them; check each project's own terms before you ship.
Run the benchmark's own harness at the same commit, convert each PDF with the call below and score the output with its evaluator.
7af1d8f4d0c09f51ea1a5c6ba5f66e993286d109 and install it as its README describes:git clone https://github.com/opendataloader-project/opendataloader-bench
cd opendataloader-bench
git checkout 7af1d8f4d0c09f51ea1a5c6ba5f66e993286d109
git lfs install && git lfs pull
uv syncpip install pdfluent==1.3.0
pdfluent models install layout tablesauto+kf: extract_markdown(path, quality="auto", keep_furniture=True). Fast row, recipe fast+kf: extract_markdown(path, quality="fast", keep_furniture=True).prediction/<engine>/markdown) and run its evaluator, for example uv run src/evaluator.py --engine <engine>.| Row | Overall | Reading order | Table structure | Heading hierarchy |
|---|---|---|---|---|
| auto+kf | 0.9168 | 0.9357 | 0.8922 | 0.8678 |
| fast+kf | 0.8577 | 0.9000 | 0.6347 | 0.8147 |
Measured 29 Oct 2026 on Google Cloud n2-standard-8, CPU only, Linux, release candidate wheel, one run. Scores on other platforms can differ slightly, most on table structure.
The harness at this commit has no PDFluent engine of its own. The recipe files auto+kf and fast+kf in pdfluent-bench hold the exact configuration of both rows. More on the calls in the extraction guide.
It is one benchmark of 200 documents and one run, with these limits.
*Balanced tier with the table model (Preview), on our own held-out half of four public datasets, 17 Oct 2026. Average 0.721 for PDFluent, 0.693 for pymupdf4llm and 0.672 for Docling, over FinTabNet, PubTables-1M, DocLayNet and ParseBench. The table model was trained on the source datasets of PubTables-1M and FinTabNet, and most of those held-out pages are in their training split. On the 13 measures without that overlap the ranking is the same (0.650, 0.642, 0.610). Details: blog post SDK 1.2.0 and the benchmarks page.
All 19 measuresThe auto tier, OCR for pages without a text layer, heading levels, and the upgrade notes.
Read the 1.3.0 postopendataloader-bench is a public benchmark on GitHub for PDF to Markdown and document-structure engines. It converts 200 PDFs with each engine and scores the output with its own evaluator on reading order (NID), table structure (TEDS) and heading hierarchy (MHS), plus an overall score. Its README publishes a leaderboard of 12 engines.
On the benchmark's public leaderboard, read 2 Nov 2026, opendataloader [hybrid] has the highest overall score of the 12 engines, 0.907. PDFluent 1.3.0 in its auto tier scores 0.9168 overall, measured with the benchmark's own harness and evaluator; PDFluent is not on that leaderboard yet, and this benchmark was one of the targets our development optimised for.
Check out opendataloader-bench at commit 7af1d8f4d0c09f51ea1a5c6ba5f66e993286d109 and follow its README to install the harness. Install PDFluent with pip install pdfluent==1.3.0 and the models with pdfluent models install layout tables. Convert each PDF with extract_markdown(path, quality="auto", keep_furniture=True) for the auto row, write the Markdown where the harness expects predictions, and score it with the benchmark's evaluator. The recipe files auto+kf and fast+kf in pdfluent-bench hold the exact configuration of both rows.
NID (normalized indel distance) measures reading order: how much of the text comes out, in the right order. TEDS (tree edit distance similarity) measures table structure: rows, columns, spans and cell text against the true table. MHS measures heading hierarchy: how closely the Markdown headings and their levels match the document's outline. All three run from 0 to 1, and higher is better.
Not yet. The PDFluent scores on this page were measured with the benchmark's own harness and evaluator on its 200 documents, at commit 7af1d8f. The other engines are the figures the benchmark publishes in its README; we did not re-run them.
The fast tier needs none: it reads the PDF's text layer with the engine alone. The auto tier, the default from SDK 1.3.0, uses a layout model, a table model and a heading-level model, and runs OCR on pages without a text layer. You install the models once with pdfluent models install layout tables; without them, auto falls back to the fast tier and says so.
Auto reads each document with the layout and table models, gives headings their level and sends pages without a text layer to OCR; on opendataloader-bench it scores 0.9168 overall. Fast runs no model and was the default up to SDK 1.2; on the same benchmark it scores 0.8577 overall. To keep the 1.2 behaviour after upgrading, pass quality="fast".
The PDFluent desktop editor is free for everyone, including commercial use. The SDK, which is what this benchmark measures, is licensed AGPL-3.0-only or the PDFluent Commercial Licence, at your option.
It depends on your documents, so test on a sample of your own. For RAG, reading order and heading hierarchy matter most, because they decide whether a chunk keeps its sentences in order and where a section-aware splitter can cut; on documents with many tables, table structure matters too. On opendataloader-bench, PDFluent in the auto tier is highest on 2 of the 3 measures (reading order and heading hierarchy) and second on table structure, against the 12 leaderboard engines. Licence and whether you can install models are the other two factors.
The benchmark's ground truth counts page headers and footers as content. PDFluent drops them by default, which this benchmark would score as missing text, so both rows keep them. Outside this benchmark the default is unchanged.
Install the Python package, install the models once, and call extract_markdown.
PyMuPDF and MuPDF are trademarks of Artifex Software, Inc. PDFluent is an independent product of Innovation Trigger B.V. and is not affiliated with or endorsed by Artifex.