In our tests MinerU’s default standard tier converted a 60-page report four times faster than Docling, and MinerU’s slowest tier, advanced, produced the only fully correct copy of a dense government table. Docling with default settings gave the more consistent results. It was correct or close on every file, while MinerU standard collapsed that same table into two cells and spent a minute on a one-page tax form. Docling is MIT-licensed. MinerU uses its own license, Apache 2.0 with extra conditions for very large companies and for online services.
We ran Docling 2.139.0 with default settings and MinerU 4.0.12 in each of its four tiers, flash, basic, standard and advanced, on the same five PDFs on one Mac. Our tested roundup of PDF to Markdown converters ran MinerU’s default tier only; this post adds the other three. Disclosure: Parsebridge, which publishes this blog, sells a hosted Docling API.
Docling vs MinerU at a glance
| Docling | MinerU | |
|---|---|---|
| Maintainer | Started at IBM Research, hosted by the LF AI & Data Foundation | OpenDataLab, a research group at the Shanghai Artificial Intelligence Laboratory |
| License | MIT | MinerU Open Source License: Apache 2.0 plus a commercial license above 100 million monthly active users or $20 million monthly revenue, and attribution for online services |
| Python | 3.10 or newer | 3.10 to 3.14 |
| How it reads a PDF | Layout model, TableFormer table model and OCR, on PyTorch | Four tiers, from text-layer extraction (flash) to small layout, OCR and table models (basic) to the same models plus a 1.2B vision language model (standard, advanced) |
| Install, measured | 1.2 GB environment plus 0.5 GB of models | 1.3 GB environment plus 1.4 GB of models |
| Cold start, measured | 9.0 s | 0.9 s (flash) to 5.0 s (standard) and 44.6 s (advanced) |
| 60-page report, measured | 244 to 246 s | 14 s (flash) to 18 minutes (advanced); 59 to 60 s in the default standard tier |
| Tables | Markdown tables rebuilt cell by cell | Markdown tables, or HTML <table> blocks when cells are merged |
| Multi-column pages | Read in column order | Read in column order in every tier |
| OCR for scanned PDFs | Built in, on by default | Built in; decides per document whether to use the text layer or OCR |
| Input formats | PDF, DOCX, PPTX, XLSX, HTML, images, audio, LaTeX, email and more | PDF and images in every tier; Office, OpenDocument, EPUB, OFD, HTML and CSV files in flash only |
| Output | Markdown, HTML, lossless JSON, DocTags and more | Markdown, middle JSON or a ZIP from the CLI; HTML, LaTeX, DOCX, EPUB and content lists through the Python renderer |
How we tested
We used the five PDFs from the roundup, each stressing one thing:
- Paper: PubTables-1M, a 10-page, two-column research paper with four tables (CC BY 4.0).
- Table: Table 1 from page 31 of the EIA Short-Term Energy Outlook, October 2026, with 15 numeric columns under year and quarter headers (US government work, public domain).
- Scan: our scanned order fixture, an image-only page with a small table.
- Form: page 1 of the 2026 IRS Form W-4 (public domain).
- Report: the full 60-page EIA Short-Term Energy Outlook, for timing.
The machine was a Mac mini with an Apple M4 and 16 GB RAM, on macOS 26.6 and Python 3.12.15. Each tool had its own virtual environment. Docling ran as DocumentConverter() with no options; it picked RapidOCR on PyTorch for OCR, because no other OCR engine was installed, and ran its models on the Apple GPU. MinerU was installed with uv pip install -U "mineru>=4.0,<5", as its README describes, and called through the same parse() function that mineru-kit parse uses, once per tier. On Apple Silicon it ran its small models with PyTorch on the GPU and the vision language model through its bundled llama.cpp server.
Each document was converted twice in one process, and we report the second run. “Cold” is a fresh process converting the one-page table PDF, including imports and model loading, with models already downloaded. We started each timed pass only when the one-minute load average was below 3; during the passes it stayed under 4, mostly from the conversions themselves. MinerU times are wall-clock times around parse() and the Markdown export, measured the same way as Docling’s. Every quality judgment below comes from reading the saved output against the PDF page. Snippets are verbatim; long rows are cut after a few columns and padding spaces are collapsed.
| Seconds | Cold | Paper (10 p.) | Table (1 p.) | Scan (1 p.) | Form (1 p.) | Report (60 p.) |
|---|---|---|---|---|---|---|
| Docling | 9.0 | 7.6 | 4.8 | 3.9 | 4.2 | 243.7 |
MinerU flash | 0.9 | 1.4 | 0.2 | 0.8 | 0.1 | 13.6 |
MinerU basic | 4.4 | 12.2 | 0.7 | 1.4 | 1.6 | 34.2 |
MinerU standard (default) | 5.0 | 24.5 | 0.7 | 4.1 | 58.5 | 59.6 |
MinerU advanced | 44.6 | 88.2 | 41.4 | 11.7 | 127.8 | 1093.3 |
Results on the same PDFs
The MinerU results in this section are from its default standard tier, which is what you get without a --tier flag. The other tiers are compared further down.
Dense table
Docling returned a 15-column Markdown table, combined the year and quarter headers into one row, and kept every two-line row label with its values:
| | 2025 - Q1 | 2025 - Q2 | 2025 - Q3 | ...
| Crude Oil Production (a) (million barrels per day) ........................ | 13.32 | 13.58 | 13.82 | ...
Its one error was in the last two rows, heating and cooling degree-days, which it merged into one row with two numbers per cell:
| U.S. Heating Degree-Days ................... U.S. Cooling Degree-Days .................... | 2,104 53 | 436 464 | 55 902 | ...
MinerU standard got the two header rows right as HTML, then put the whole table body into two cells. The first holds every row label with its quarterly values; the second holds all the annual values, with no separator between rows:
<td colspan="13">Energy Production Crude Oil Production (a) (million barrels per day) ........................ 13.32 13.58 13.82 13.91 ...
<td colspan="3">13.66 13.87 14.30107.6 112.2 116.1528 521 51420.74 ...
flash and basic produced the same two-cell table. advanced produced a correct one, covered under the tiers below.
Two-column paper
Both tools followed the two columns in reading order and turned every section title, from the abstract to the appendix, into a heading. Docling makes the paper title ## like the sections; MinerU makes it #.
On the tables the results were split. Both got Table 1 and Table 4 cell for cell, though MinerU wrote three Table 1 cells with footnote marks as LaTeX ($510K^{\ddagger}$). In Table 2 Docling moved part of one header (“Total Tables PRH∗ - with a”), while MinerU interleaved the characters of two header lines:
| Dataset | InTvoetsatligTaatbelde†s | wTiothtaal TPaRbHle<sup>∗</sup>s | ...
Table 3 went the other way. MinerU kept every value in place but merged the Task and Model columns (| TD Faster R-CNN | 0.825 | 0.985 | 0.927 | 0.866 |). Docling shifted the last column and merged the two TSR + FA rows:
| TD | Faster R-CNN | 0.825 | 0.985 | 0.927 | 0.866 0.981 |
| | DETR | 0.966 | 0.995 | 0.988 | 0.762 |
| TSR + FA | Faster R-CNN DETR | 0.722 0.912 | 0.815 0.971 | 0.785 0.948 | 0.942 |
MinerU writes tables with merged cells as HTML, so Table 4 came out as a <table> with rowspan attributes, and it rebuilt the example tables inside Figures 1, 3 and 4 as HTML tables. It embedded the one remaining figure as a base64 image. Docling left an <!-- image --> placeholder for each figure.
Scanned page
Both tools ran OCR without any configuration and returned all the text and the item table. MinerU’s table and its total line:
| Item | Quantity | Amount |
| --- | --- | --- |
| Archive folders | 3 | CHF 18.00 |
| Storage boxes | 2 | CHF 24.00 |
Total: CHF 42.00
Docling returned the same table but split “Total:” and “CHF 42.00” into two paragraphs, and joined the three address lines into one. MinerU kept them as separate lines.
Form
Docling returned the whole W-4 body with step headings and the checkboxes as - [ ] items. It put the Step 3 and Step 4 headings next to each other, placed the “Exempt from withholding” label inside Step 4, moved the Social Security number box to the end and left out the page footer.
MinerU standard started at “Department of the Treasury”, leaving out the “Form W-4” title, the “Employee’s Withholding Certificate” heading and two of the three instruction lines under it. It wrote the steps as a mix of HTML and Markdown tables. The conversion took 58 seconds, and the output shows where the time went: in Step 2(c) the model kept generating dot leaders, about 15,000 characters of . . . . in a single table cell.
Speed and footprint
On the 60-page report MinerU standard took about 60 seconds, about one page per second. Docling took about 244 seconds, roughly four seconds per page. Docling’s default OCR also runs on every layout region that is not made up only of text-layer text, such as the report’s charts. With OCR turned off (PdfPipelineOptions(do_ocr=False)) the same report took 197 seconds, so OCR accounted for about a fifth of Docling’s time on this born-digital file. A fresh Docling process needed about 4 seconds more than a warm conversion of the same page, for imports and model loading. A fresh MinerU standard process converted that page in 5 seconds.
The Docling environment was 1.2 GB plus 0.5 GB of layout and table models. The MinerU environment was 1.3 GB, including PyTorch on Apple Silicon and the llama.cpp server binary, plus 1.4 GB of models: 0.2 GB of small models for layout, OCR, formulas and tables, and a 1.2 GB GGUF build of its 1.2B vision language model. flash needs no models for born-digital PDFs, and basic needs only the small ones.
MinerU tiers compared
MinerU 4 maps each tier to a different amount of model work, which we confirmed in the 4.0.12 source:
flashreads the PDF’s text layer without models. On scanned PDFs it runs the small layout and OCR models.basicruns small models for layout, tables, formulas and OCR, with no vision language model.standard, the default, uses the small layout model to find blocks and sends them to the 1.2B vision language model, MinerU2.5-Pro, for their content.advancedlets the vision language model do layout and content in two steps, with image analysis turned on. It uses the same models asstandard, so there is nothing extra to download.
On born-digital PDFs, basic and standard first try to build tables from the text layer, and advanced skips that step. That matches what we saw: the three lower tiers returned the identical two-cell EIA table. All four tiers ran on this Mac with 16 GB of RAM and no extra setup.
| MinerU tier | Paper | Dense table | Scan | Form | 60-page report |
|---|---|---|---|---|---|
flash | Headings for References and Appendix lost, checkmarks as X, Table 3 values glued together | Body in two cells | Text correct, table as a plain-text block | All text including title and footer, mostly inside code blocks | 13.6 s |
basic | Like standard; checkmarks as √ and vt | Body in two cells | Text and table correct | Title missing; mixed HTML and Markdown tables | 34.2 s |
standard | Table 2 header garbled, Task and Model merged in Table 3 | Body in two cells | Text and table correct | Title missing; 58 s of repeated dot leaders | 59.6 s |
advanced | All four tables correct, including both headers that standard broke | All 22 data rows correct, degree-days split | Text and table correct | Header block missing, Step 3(b) and all of Step 4 lost after two runs of dot leaders | 1093.3 s |
flash took 14 seconds for the 60-page report and a tenth of a second for the form. On born-digital pages it keeps the text and loses most structure. Table 1 of the paper and the scanned order table came out as fixed-width text in code blocks, and Table 3 lost the spaces between numbers (0.8250.966). On the W-4 that approach kept every line, title and footer included, which no other run in this test did.
basic produced output close to standard on the paper, the dense table and the scan, in about half the time on the report. On the form it took 1.6 seconds instead of 58, because it has no vision language model to loop on dot leaders. Its OCR read some checkmarks as √ and turned ✓† into vt.
advanced was the slowest MinerU tier and the most accurate on tables. It was the only run, across both tools and all tiers, that got the EIA table fully right: every one of the 330 values in its row and column, with the two degree-day rows apart:
<td>U.S. Heating Degree-Days ......</td><td>2,104</td><td>436</td><td>55</td>...
<td>U.S. Cooling Degree-Days ......</td><td>53</td><td>464</td><td>902</td>...
The row labels were less clean than Docling’s: most lost their dot leaders and the space between their two lines (Crude Oil Production (a)(million barrels per day)), and “Spot” lost its last letter, as it did in flash. It also rebuilt the two-row header of the paper’s Table 2 with the right rowspan and colspan, which standard garbled and Docling partly reordered. The form was its worst result. The output starts at Step 1, without the title and header block, and the model generated runs of dot leaders in Step 2(c) and again in Step 3(a), after which Step 3(b) and all of Step 4 are missing. The form took 82 seconds in the first run and 128 in the second, with identical output.
Code for both
Docling:
pip install docling
docling convert report.pdf --to md --output out/
from docling.document_converter import DocumentConverter
converter = DocumentConverter() # reuse it; model loading is the slow part
markdown = converter.convert("report.pdf").document.export_to_markdown()
MinerU:
uv pip install -U "mineru>=4.0,<5"
mineru-kit parse report.pdf -o report.md --tier standard
from mineru import parse
markdown = parse("report.pdf", tier="standard").markdown()
MinerU downloads its models on first use, from Hugging Face or ModelScope, into ~/.mineru/models.
Which to pick
Pick Docling when you want one setting that works across mixed PDFs, when you need Markdown tables without HTML, or when the MIT license matters to you. It was faster than MinerU standard on the paper and the form and four times slower on the 60-page report, so plan for about four seconds per page on long documents on a machine like this, or less with OCR off for born-digital files. Our Docling OCR guide covers how its OCR defaults work and how to change them.
Pick MinerU when speed on long born-digital documents matters, when HTML tables and embedded images are fine downstream, and when its license conditions fit. Use advanced for documents where table cells have to be exact and you can wait, basic for bulk conversion where its OCR quality is enough, and flash for previews and search indexing. Test the default standard tier on your forms before relying on it; the dot-leader loop we saw on the W-4 also turned up in advanced.
Both tools made mistakes on these five PDFs, in different places. Run your own worst three or four pages through both before choosing.
Parsebridge
Parsebridge is a hosted Docling API. You send a PDF and get Markdown back without running Docling yourself. It runs Docling 2.124 inside docling-serve 1.32.0, with TableFormer in accurate mode, and turns OCR on when it detects scanned pages. It accepts PDFs only, up to 50 MB. New accounts get 50 free pages once, and plans are $17 a month for 5,000 pages, $79 for 60,000 and $259 for 300,000. Parsebridge does not run MinerU.
To see Docling’s output on one of your own PDFs first, the free PDF to Markdown converter converts the first page of a PDF up to 10 MB without an account, five times per hour.