Model or dataset
Unstructured-IO/unstructured avatar
Unstructured-IO/unstructured

Unstructured: A Practical Look at the Open Source Document-to-LLM Pipeline

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.

15,433 stars1,327 forksHTMLApache-2.0

At a glance

What is it?
Unstructured is an open source library that converts PDFs, Word docs, HTML, and other files into clean, structured data for language models. This review covers its partitioning mechanism, setup, real limitations, and how it compares to alternatives.
Who is it for?
Adopt Unstructured if you need a flexible, open source way to turn diverse document formats into structured text for LLM workflows and you can manage the dependency weight and maintenance burden. Do not adopt it if you require a fully managed service with guaranteed uptime and support; the enterprise Platform product exists for that.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly HTML, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Unstructured Actually Does for LLM Pipelines

Unstructured solves a specific problem: getting raw, messy documents into a shape that language models can consume. PDFs, HTML pages, Word documents, and scanned images do not arrive as clean text. They contain tables, headers, footers, and embedded images. The library provides open source components for ingesting and preprocessing these files. The README describes its purpose as streamlining data processing workflows for LLMs. This is not a general purpose data tool. It targets engineers who feed documents into retrieval systems, vector databases, or model training. The core output is structured data, which typically means text elements with metadata that downstream applications can use. For anyone who has spent hours extracting text from a mix of PDFs and DOCX files, the value proposition is immediate: one library that attempts to standardize the mess.

The Partitioning Mechanism: Modular Functions and Connectors

The architecture centers on modular functions and connectors that form a cohesive system. The README highlights partitioning as the core functionality. Partitioning is the process of splitting a document into distinct elements, such as titles, paragraphs, tables, or lists. Each element carries metadata, like page number or source type. The library supports a wide range of formats, including PDFs, HTML, Word docs, and many more. The actual mechanism varies by file type. For a PDF, the library may use OCR or layout detection to identify text blocks. For an HTML file, it parses the DOM to extract semantic content. The connectors handle ingestion from different sources, like local files or URLs. This modular design means you can call a partition function directly on a file, or you can chain connectors and enrichments to build a custom pipeline. The documentation mentions enrichments and chunking as separate stages, but the open source library focuses on partitioning and initial structuring.

Getting Started: Commands and Configuration

The README does not provide a full installation guide, but it points to the PyPI page for the unstructured package. The primary language is Python, so installation typically uses pip. A standard command would be `pip install unstructured`. However, because the library handles many file types, it likely requires additional dependencies for specific formats, such as `unstructured[pdf]` or `unstructured[docx]`. The README does not list these extras explicitly, but the PyPI page would. The new Transform MCP feature suggests a different setup path for agent integration. The README explains five steps: pick an MCP client like Claude Code or Cursor, add the Transform MCP server to the client's configuration using the `mcp add` command or a config file, authenticate once when prompted, point the agent at a file, and describe the desired output in plain language. This MCP server is described as production-grade, but it is separate from the core library. For the core library, expect to call partition functions in Python code, passing a filename and receiving a list of elements.

The Transform MCP Server: A New On-Ramp for Agents

The most recent addition is the Unstructured Transform MCP server, which brings document processing to AI agents. This is a notable shift in approach. Instead of writing Python code, you configure your agent to call the Transform tools. The README gives an example: tell the agent to 'parse and chunk this contract for a vector store' and it handles the file. This abstracts away the partitioning logic entirely. The MCP server supports over 60 file types and includes parsing, enriching, chunking, and embedding. Authentication is handled once, then the tools become available. This is a different product from the core open source library, even though it shares the same underlying technology. For developers who live inside an agent environment, this could be the easiest way to get structured data. But it also introduces a dependency on an external service, since the MCP server likely connects to Unstructured's hosted platform. The open source library remains the self-hosted option.

Real Limitations and Wrong Tool Scenarios

Unstructured is not a magic bullet. The README mentions the enterprise grade Platform product for production grade workflows, which implies that the open source version may not be sufficient for high-volume or mission critical use. The open source library can be heavy, requiring many dependencies for different file types, which can complicate deployment. OCR on scanned documents is computationally expensive and may produce errors that need human review. The quality of output depends heavily on the input quality. A poorly scanned PDF will yield poor text. For simple text extraction, a dedicated tool like `pdftotext` might be faster and lighter. Unstructured is the wrong choice when you need exact fidelity to the original layout, because it converts to structured elements, not a pixel perfect representation. Also, if your pipeline only handles one format, say clean text files, the library is overkill. The Transform MCP server, being a hosted service, may not be suitable for air gapped environments or strict data residency requirements.

Alternatives and How They Differ

The most direct alternative is a combination of format specific parsers. For PDFs, tools like `pdfplumber` or `PyMuPDF` give you fine grained control over text and table extraction. For Word documents, `python-docx` lets you iterate over paragraphs and tables. The difference is that these tools are single format. Unstructured aims to provide a unified interface across many formats, which saves you from writing separate code paths. Another alternative is using a commercial document understanding API, such as AWS Textract or Azure Form Recognizer. Those services offer managed infrastructure and strong OCR, but they charge per page and send your data to a third party. Unstructured, when self hosted, keeps data on your own infrastructure. The trade off is that you must manage the environment and accept that the open source version may lag behind the commercial Platform in features and reliability. The choice depends on whether you value control over convenience.

Maintenance, Release Cadence, and Licensing

The repository shows a recent release of version 0.27.5 in August 2026, with earlier releases in the same month. This indicates a rapid release cycle, with multiple minor versions per month. For adopters, this means frequent updates, which can bring new features but also potential breaking changes. The project is not archived and has an active default branch. The license is Apache-2.0, which permits commercial use, modification, and distribution, with the condition of preserving copyright notices. This is a permissive license that does not require you to open source your own code. However, if you use the Transform MCP server, that is a separate service with its own terms, which the README does not detail. The open source library itself is safe to embed in proprietary products. The maintenance cost is not trivial: you must track releases, test your pipelines against new versions, and handle dependency conflicts. The README does not provide a migration guide, so upgrades may require manual effort.

Editorial conclusion

Adopt Unstructured if you need a flexible, open source way to turn diverse document formats into structured text for LLM workflows and you can manage the dependency weight and maintenance burden. Do not adopt it if you require a fully managed service with guaranteed uptime and support; the enterprise Platform product exists for that. Before committing, verify that your specific file types are handled well by the partition functions, test the output quality on your own documents, and check the license (Apache-2.0) fits your distribution model. The project's active release schedule means you should plan for regular updates to keep pace with changes.

Official sources

  1. License: Apache-2.0
  2. Project website
  3. README
  4. Releases
  5. Unstructured-IO/unstructured on GitHub
Community notes

Community notes