finds.dev← search

// the find

Unstructured-IO/unstructured

★ 15,124 · HTML · Apache-2.0 · updated Jul 2026

Convert documents to structured data effortlessly. Unstructured is open-source ETL solution for transforming complex documents into clean, structured formats for language models. Visit our website to learn more about our enterprise grade Platform product for production grade workflows, partitioning, enrichments, chunking and embedding.

Unstructured is a Python library for extracting and normalizing content from 60+ document types — PDFs, Word docs, emails, images, HTML — into structured element lists suitable for feeding into LLM pipelines. It handles the messy reality of real-world documents: scanned PDFs via Tesseract, embedded tables, multi-column layouts. The target audience is anyone building RAG pipelines who doesn't want to write their own PDF/DOCX parsers.

The auto-partition function that detects file type and routes to the right parser is genuinely useful — one import handles most cases without configuration. The element model (Title, NarrativeText, Table, ListItem, etc.) gives downstream code something typed to work with rather than a raw string dump. The Docker image with all dependencies pre-installed is the right call given the nightmare that is getting Tesseract, poppler, and LibreOffice onto the same machine. The migration to uv for dependency management is recent and sensible — the old pip-extras approach was a mess.

PDF extraction quality is all over the map depending on whether the file has a text layer or needs OCR; the library doesn't surface confidence scores so you can't tell when a result is unreliable. The open-source version is increasingly a featureless front door to the paid platform — chunking, embedding, and enrichment are pushed toward their SaaS product, so you're expected to wire those yourself. System dependency hell is real: you need libmagic, poppler, tesseract, and libreoffice installed before the Python package does much, which makes reproducible non-Docker environments fragile. The codebase is large and the partition functions don't share a clean interface — kwargs vary across file types and the auto-router can silently pick the wrong strategy for ambiguous inputs.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →