← Any document → text: all libraries · Reader board

Kreuzberg vs Unstructured: which one reads more real-world documents?

Kreuzberg 4.10.4 and Unstructured 0.27.36 on the same 477 odd real-world files from Apache Tika test documents (bug reports, fuzzers, broken exporters). Measured, not opinion; re-tested by itself on every new PyPI release. Updated 06 November 2026.

More files readKreuzberg374 vs 370
Faster on this setKreuzberg8.7 s vs 507.4 s total (58× faster)
Both read356only Kreuzberg: 18 · only Unstructured: 14

Kreuzberg got text from more files: 374 vs 370 of 477. Kreuzberg broke (error, hang or crash) on 6 files that Unstructured read; Unstructured broke on 2 files that Kreuzberg read.

LibraryText from🔴 Fails where
the other reads
🟡 Empty where
the other reads
⏱ Hangs or
crashes
Format not
supported
Median
ms/file
Total
seconds
Kreuzberg 4.10.43746804<18.7
Unstructured 0.27.3637021301130507.4

By file type: files read with text

TypeKreuzbergUnstructured
.docx 71 files60/71 7 empty 4 failed57/71 10 empty 3 failed 1 not supported
.pdf 71 files45/71 22 empty 4 failed50/71 16 empty 5 failed
.doc 49 files37/49 5 empty 7 failed37/49 9 empty 1 failed 2 not supported
.rtf 44 files41/44 3 empty40/44 2 empty 2 failed
.html 38 files34/38 2 empty 2 failed34/38 2 empty 2 failed
.xlsx 35 files22/35 9 empty 4 failed21/35 10 empty 4 failed
.txt 30 files30/3030/30
.xls 30 files18/30 8 empty 4 failed18/30 7 empty 5 failed
.pptx 29 files22/29 6 empty 1 failed21/29 7 empty 1 failed
.ppt 22 files16/22 6 empty16/22 4 empty 2 failed
.odt 17 files15/17 2 failed15/17 1 empty 1 failed
.msg 14 files14/1414/14
.eml 9 files9/99/9
.odp 4 filesnot supportednot supported
.ods 4 files3/4 1 emptynot supported
.csv 3 files3/33/3
.epub 3 files3/33/3
.json 2 files0/2 2 failed0/2 2 failed
.md 2 files2/22/2

Files only Kreuzberg reads (18)

tika-parser-microsoft-module/Doc1_ole.docUnstructured: no text
tika-parser-microsoft-module/testDocumentLink.docUnstructured: no text
tika-parser-microsoft-module/testEXCEL.strict.xlsxUnstructured: no text
tika-parser-microsoft-module/testEXCEL_5.xlsUnstructured: UnprocessableEntityError: Not a valid XLSX file.
tika-parser-microsoft-module/testPPT_diagramData.pptxUnstructured: no text
tika-parser-microsoft-module/testRTFBoldPlain.rtfUnstructured: no text
tika-parser-microsoft-module/testRTFTIKA_2500.rtfUnstructured: RuntimeError: Pandoc died with exitcode "64" during conversion: Error at "/home/runner/work/reader-board/reader-board/corpora/tika/tika-parser-microsoft-module/
tika-parser-microsoft-module/testRTFWithCurlyBraces.rtfUnstructured: no text
tika-parser-microsoft-module/testWORD_missing_ooxml_bean1.docxUnstructured: no text
tika-parser-microsoft-module/testWORD_phonetic.docUnstructured: no text
tika-parser-microsoft-module/testWORD_phonetic.docxUnstructured: no text
tika-parser-microsoft-module/testWPSAttachment.docUnstructured: no text
tika-parser-miscoffice-module/testFooter.odsUnstructured: format not supported
tika-parser-miscoffice-module/testODTEmbeddedImageLink.odtUnstructured: no text
tika-parser-miscoffice-module/versions/LibreOfficeCalc_ods_1.3.odsUnstructured: format not supported
tika-parsers-standard-integration-tests/test-columnar.odsUnstructured: format not supported
tika-server-standard/2pic.docxUnstructured: no text
tika-server-standard/Doc1_ole.docUnstructured: no text

Files only Unstructured reads (14)

tika-parser-microsoft-module/casing/simple_normal_case.docKreuzberg: ParsingError: ParsingError: Failed to open DOC as OLE container: Malformed FAT (FAT has 128 entries, but file has only 52 sectors)
tika-parser-microsoft-module/jxl.xlsKreuzberg: ParsingError: ParsingError: Failed to parse Excel file: Xls error: Cfb error: Codepage 5212 not found
tika-parser-microsoft-module/testRTFIgnoredControlWord.rtfKreuzberg: no text
tika-parser-microsoft-module/testRTFUnicodeGothic.rtfKreuzberg: no text
tika-parser-microsoft-module/testWORD6.docKreuzberg: ParsingError: ParsingError: Invalid DOC magic number: 0xA5DC, expected 0xA5EC
tika-parser-microsoft-module/testWORDML_tableInsideParagraph.docKreuzberg: ParsingError: ParsingError: Failed to open DOC as OLE container: Invalid CFB file (wrong magic number): [3c, 3f, 78, 6d, 6c, 20, 76, 65]
tika-parser-microsoft-module/testWORD_header_hyperlink.docKreuzberg: no text
tika-parser-miscoffice-module/testODTnotaZipFile.odtKreuzberg: ParsingError: ParsingError: Failed to open ZIP archive: invalid Zip archive: Could not find EOCD
tika-parser-miscoffice-module/testWordPerfect_42.docKreuzberg: ParsingError: ParsingError: Failed to open DOC as OLE container: Invalid CFB file (wrong magic number): [cb, a, 1, f6, 1, cb, c0, a]
tika-parser-pdf-module/testFlashInPDF.pdfKreuzberg: no text
tika-parser-pdf-module/testOCR.pdfKreuzberg: no text
tika-parser-pdf-module/testPDF_AdobeIllustrator.pdfKreuzberg: no text
tika-parser-pdf-module/testPDF_jpeg2000.pdfKreuzberg: no text
tika-server-standard/testOCR.pdfKreuzberg: no text

Don't want to run it yourself? I also run PDF & Document to Markdown as a pay-per-use API on Apify (it uses pdfplumber and pypdfium2 for PDFs, markitdown for Office files). Disclosure: that tool is mine; the rankings above come only from the measurements.

What this does not tell you

This compares not breaking: whether each library gets any text out of each file. It does not rank text quality (reading order, tables, headings), and speed is one GitHub-hosted runner, default settings, no OCR switched on. If you need structure for RAG, also look at the output on your own files.

How this is measured