Finance and Admin · Forecasts, documents and the paperwork. · a tool
Never retype a scanned document again
The open-source project unstructured, by Unstructured-IO
“Convert documents to structured data effortlessly. Unstructured is open-source ETL solution for transforming complex documents into clean, structured formats for language models.” — the project's own words, on GitHub
What it does
Unstructured takes messy real-world documents, PDFs, scanned invoices, Word files, emails, spreadsheets, and turns them into clean text your AI can actually read. Instead of your AI choking on a scanned contract or losing the table formatting from an invoice, you feed the document in and get back plain, structured text it can search, summarize, or pull numbers from. It handles the fiddly parts, different file types, layouts, tables, embedded images, so whatever paperwork lands in your inbox becomes something your AI can work with directly, without you retyping or copying it out by hand.
Replaces
an afternoon of manually retyping or copy-pasting scanned paperwork into something searchable
For
Someone drowning in contracts and invoices who wants their AI to actually read the paperwork instead of choking on a scanned PDF.
Not for
Not for someone who just wants to read a document themselves — this is plumbing that feeds your AI clean text, not a document viewer, and the fancier file types need extra system tools installed first.
Setup
25 min · Claude Code, Kimi, Gemini CLI or Codex · python, system tools for some file types, such as poppler-utils, tesseract-ocr or libreoffice, depending on which documents you actually run through it, docker, if you'd rather run it in a container
Get it running
Paste this into the AI that runs on your computer. It does the install, checks it works, and tells you what to type first. If anything fails, paste the error back to it.
Paste into Claude Code
Install unstructured (https://github.com/Unstructured-IO/unstructured) on this computer and get it working for me. I am not a developer; explain each step in one line as you go and never skip one. You are Claude Code, running on my machine.
1. Check what this machine already has (git, Python or Node as the project needs, Docker if the README says so). Tell me anything missing and install it, asking me before anything that needs my password.
2. Clone https://github.com/Unstructured-IO/unstructured into ~/tools/unstructured and follow the README's install exactly.
3. Configure it. If it needs an API key or a login, stop and ask me for it; never guess one and never store it anywhere except where the README says.
Tool-specific notes: Install with pip install "unstructured[all-docs]" for the full set of file types, or the plainer pip install unstructured if I only need text, HTML or JSON.
Check the README for which system tools (libmagic-dev, poppler-utils, tesseract-ocr, libreoffice) apply to the document types I'll actually use, and install only those.
Smoke-test with: from unstructured.partition.auto import partition; elements = partition(filename="example-docs/eml/fake-email.eml"); print("\n\n".join([str(el) for el in elements])) — it should print the sample email back as separate text elements.
If a specific file type fails, it's almost always a missing system dependency, not a code problem.
4. Run the smallest test the README gives, and show me the output.
5. When it works, tell me what to type first, in one line, for this job: Run one document through it.
If anything fails, show me the exact error and fix it before going on.
Paste into Kimi
Install unstructured (https://github.com/Unstructured-IO/unstructured) on this computer and get it working for me. I am not a developer; explain each step in one line as you go and never skip one. You are Kimi, running on my machine.
1. Check what this machine already has (git, Python or Node as the project needs, Docker if the README says so). Tell me anything missing and install it, asking me before anything that needs my password.
2. Clone https://github.com/Unstructured-IO/unstructured into ~/tools/unstructured and follow the README's install exactly.
3. Configure it. If it needs an API key or a login, stop and ask me for it; never guess one and never store it anywhere except where the README says.
Tool-specific notes: Install with pip install "unstructured[all-docs]" for the full set of file types, or the plainer pip install unstructured if I only need text, HTML or JSON.
Check the README for which system tools (libmagic-dev, poppler-utils, tesseract-ocr, libreoffice) apply to the document types I'll actually use, and install only those.
Smoke-test with: from unstructured.partition.auto import partition; elements = partition(filename="example-docs/eml/fake-email.eml"); print("\n\n".join([str(el) for el in elements])) — it should print the sample email back as separate text elements.
If a specific file type fails, it's almost always a missing system dependency, not a code problem.
4. Run the smallest test the README gives, and show me the output.
5. When it works, tell me what to type first, in one line, for this job: Run one document through it.
If anything fails, show me the exact error and fix it before going on.
Paste into Gemini CLI
Install unstructured (https://github.com/Unstructured-IO/unstructured) on this computer and get it working for me. I am not a developer; explain each step in one line as you go and never skip one. You are Gemini CLI, running on my machine.
1. Check what this machine already has (git, Python or Node as the project needs, Docker if the README says so). Tell me anything missing and install it, asking me before anything that needs my password.
2. Clone https://github.com/Unstructured-IO/unstructured into ~/tools/unstructured and follow the README's install exactly.
3. Configure it. If it needs an API key or a login, stop and ask me for it; never guess one and never store it anywhere except where the README says.
Tool-specific notes: Install with pip install "unstructured[all-docs]" for the full set of file types, or the plainer pip install unstructured if I only need text, HTML or JSON.
Check the README for which system tools (libmagic-dev, poppler-utils, tesseract-ocr, libreoffice) apply to the document types I'll actually use, and install only those.
Smoke-test with: from unstructured.partition.auto import partition; elements = partition(filename="example-docs/eml/fake-email.eml"); print("\n\n".join([str(el) for el in elements])) — it should print the sample email back as separate text elements.
If a specific file type fails, it's almost always a missing system dependency, not a code problem.
4. Run the smallest test the README gives, and show me the output.
5. When it works, tell me what to type first, in one line, for this job: Run one document through it.
If anything fails, show me the exact error and fix it before going on.
Paste into Codex
Install unstructured (https://github.com/Unstructured-IO/unstructured) on this computer and get it working for me. I am not a developer; explain each step in one line as you go and never skip one. You are Codex, running on my machine.
1. Check what this machine already has (git, Python or Node as the project needs, Docker if the README says so). Tell me anything missing and install it, asking me before anything that needs my password.
2. Clone https://github.com/Unstructured-IO/unstructured into ~/tools/unstructured and follow the README's install exactly.
3. Configure it. If it needs an API key or a login, stop and ask me for it; never guess one and never store it anywhere except where the README says.
Tool-specific notes: Install with pip install "unstructured[all-docs]" for the full set of file types, or the plainer pip install unstructured if I only need text, HTML or JSON.
Check the README for which system tools (libmagic-dev, poppler-utils, tesseract-ocr, libreoffice) apply to the document types I'll actually use, and install only those.
Smoke-test with: from unstructured.partition.auto import partition; elements = partition(filename="example-docs/eml/fake-email.eml"); print("\n\n".join([str(el) for el in elements])) — it should print the sample email back as separate text elements.
If a specific file type fails, it's almost always a missing system dependency, not a code problem.
4. Run the smallest test the README gives, and show me the output.
5. When it works, tell me what to type first, in one line, for this job: Run one document through it.
If anything fails, show me the exact error and fix it before going on.
What to point it at first
1
Run one document through it
Take a single invoice or contract PDF you already have, run it through partition, and read back the plain text — a good result keeps the paragraphs and tables in the order they appeared on the page.
2
Try a scanned document, not a clean one
Feed it a scanned or photographed document rather than a clean digital PDF, since that's the messier real case, and check the extracted text against the original for anything it clearly misread.
3
Point it at a folder of paperwork
Once one file works, run it across a folder of invoices or statements and spot-check three or four outputs against their originals before you trust the whole batch.
What it must never do unattended
No agent moves money. Not once.
It reads contracts and flags clauses. It is not legal advice.
It extracts and structures text — it does not check that a number, date or clause is correct, so read the source document before acting on what it pulled out.
Who made it
Unstructured-IO/unstructured on GitHub, under the Apache-2.0 licence. 15,411 stars, checked 9 September 2026. Last change 8 September 2026. We did not write it; we checked it, and wrote this page so you can use it.
What's in the library is how we work.
If you're launching or growing a brand across Asia and the West, a call is where we work out whether it's a fit.