SCORED6 parsers · 6 fixtures · 2026-09-16

2 of 6 parsers keep a table.

The other 4 hand you a row of loose numbers. Every parser’s README claims it handles tables — these are scored runs on controlled PDFs, with the raw output published beside every number.

ParserTable cells3 table fixturesReading ordermulti-column.pdfHeading structuretext fixturesScanned pagescanned.pdf
01pdf-inspectorTable cells100%38/38 cellsReading order100%column order keptHeading structure100%5/5 titles keptScanned pagenothingnothing returned
02LiteParseTable cells100%38/38 cellsReading order100%column order keptHeading structure80%4/5 titles keptScanned pagegarbled# FIMAMCTIAL · REGION 2 03
03@opendocsg/pdf2mdTable cells0%0/38 cellsReading order75.6%columns interleavedHeading structure100%5/5 titles keptScanned pagenothingEMPTY_OUTPUT
04OpenDataLoader PDFTable cells0%0/38 cellsReading order75.6%columns interleavedHeading structure100%5/5 titles keptScanned pagenothingnothing returned
05unpdftext onlyTable cells0%0/38 cellsReading order75.6%columns interleavedHeading structure0%by designScanned pagenothingnothing returned
06pdf-parsetext onlyTable cells0%0/38 cellsReading order75.6%columns interleavedHeading structure0%by designScanned pagenothingnothing returned
4/6
interleave two columns

75.6% on multi-column.pdf

0/6
read a scanned page

no text layer, no OCR

18×
longer for 5% more table structure

LiteParse 54.0s vs pdf-inspector 2.9s on 100 real pages

A zero is not always a failure. unpdf and pdf-parse emit plain text by design, so they score 0 on headings and tables while keeping every word. Read the profile, not one number. How each axis is scored

Twenty seconds, if you would rather watch it

The same numbers published on this site, in the order they were found: which parsers keep a table, what the fastest and slowest cost on a hundred pages, and where a score is deliberately left blank.

Two columns, read two different ways

multi-column.pdf holds twenty numbered lines in each column. A parser that reads down each column in turn recovers the document. A parser that reads across the page zips the two columns together — the words all survive, but the sentences no longer follow each other.

pdf-inspector100%
  1. Left column line 1.
  2. Left column line 2.
  3. Left column line 3.
  4. Left column line 4.
  5. Left column line 5.
  6. Left column line 6.
column order kept
unpdf75.6%
  1. Left column line 1.
  2. Right column line 1.
  3. Left column line 2.
  4. Right column line 2.
  5. Left column line 3.
  6. Right column line 3.
columns interleaved

Scored over all 780 pairs of the forty expected lines, not just neighbouring ones — which is why interleaving costs 24.4 points, not 3.

A scan with no text layer defeats all six.

scanned.pdf carries the same table as the fixture above, but only as pixels: no font, no text-drawing operator. Without OCR there is nothing to extract, and this is the result published unchanged.

5 of 6 return an empty document. The one that tries returns characters that are not in the source.

Read the full result set
LiteParsegarbled OCR
# FIMAMCTIAL · REGION 2 03
5 parsersno output
  • pdf-inspectornothing returned
  • @opendocsg/pdf2mdEMPTY_OUTPUT
  • OpenDataLoader PDFnothing returned
  • unpdfnothing returned
  • pdf-parsenothing returned

Run it on your own PDF

The fixtures above are deliberately small and controlled. Your documents are the ones that matter — the invoice with merged cells, the scan with no text layer, the 100-page report. Drop one in, pick 2–5 parsers, and read the Markdown side by side.

Before you upload

  • The PDF you upload is scheduled for deletion after 24 hours.
  • The converted Markdown is kept indefinitely so the run link keeps working — which means the document’s text is retained after the PDF itself is gone.
  • Runs are private to your account: only you can open the run link, ask questions about it, or read its answers. Signing in is required, and the link does nothing for anyone else.

Drop a PDF here, or .

PDF · up to 100 pages · 25 MB

Every number above opens into its raw output

Nothing here is a claim you have to take on trust. The fixtures, the SHA-256 hashes, the package versions and the exact Markdown each parser returned are all published.

Captured 2026-09-16 · darwin/arm64 · Node v22.21.1 · median of up to three sequential local samples

What each parser can actually do

Read straight off each adapter’s declared capabilities, with the licence verified against the package it ships. A parser with no OCR engine cannot read a scan — parsebench says so before you wait for the run, not after.

Parser capabilities: OCR support, page markers, licence, cost and observed speed
ParserOCRPage markersLicenceCostDemo time
pdf-inspectorpdf-inspectorno OCRyesMITfree13ms
LiteParseliteparsebuilt-in OCRyesApache-2.0free304ms
OpenDataLoader PDFopendataloaderbuilt-in OCRyesApache-2.0free405ms
@opendocsg/pdf2mdpdf2mdno OCRnoMITfree—
unpdfunpdfno OCRyesMITfree—
pdf-parsepdf-parseno OCRyesMITfree—
Hyperbotshyperbotsbuilt-in OCRyesLicenseRef-Proprietary$0.04/page—

Demo time is one run of one small table on one machine. It sets the order of magnitude, nothing more — the run you start above is measured on your own document.