Best free tool to extract tables from PDFs: Docling vs pdfplumber
You have invoices, reports, price lists or statements as PDFs and need the tables inside them as rows and columns for a spreadsheet, your app or an AI.
- Our pick
- Docling100/100
- Why
- Found all 8 tables with 100% of cells right: borderless, striped, wrapped text, a table running over 2 pages, and a scanned page it read with built-in OCR. No invented tables. About 2.3 seconds a page and 1.5 GB of memory on a CPU, offline after a one-time model download.
- Not for you if
- you're processing thousands of simple, fully bordered PDFs on a tiny server (pdfplumber did those in 0.03 seconds a page with 46 MB of memory), or you can't spare about 1.5 GB of memory.
Short answer: Use Docling (100/100). It found every table in our test PDFs and got every cell right, including a borderless financial table, a table split over two pages and a scanned page, in about 2 seconds a page on a normal CPU. pdfplumber is far lighter and faster but, out of the box, only handles tables with full borders and can't read scans.
The verdict
Winner
Docling
An open-source document converter from IBM Research that turns PDFs, Word files, slides and images into structured data, with AI models for layout, tables and OCR.
7 of 7 checks. Found all 8 tables and got 100% of cells right, including the borderless table, wrapped cells, a 61-row table over two pages and a scanned page with no text layer. No extra tables. 18.8 s for 8 pages (2.3 s a page) at 1.5 GB of memory, offline. Tables come out as dataframes in one call. Score: 100/100.
Runner-up
No runner-up named
None of the tools we tested earned this slot.
Also tested
- pdfplumber · 66/100
Tested on the same app but not picked. The reasons are in the write-up below.
On this page
Quick answers
What's the best free tool to extract tables from a PDF?
In our test, Docling. On 7 test PDFs with 8 tables it found every table and got 100% of cells right, including a borderless table, one split over two pages and a scanned page, running on a CPU with the network off. It scored 100/100.
Can pdfplumber extract tables without borders?
Not with its default settings. extract_tables() looks for ruling lines, so in our test it returned nothing for a borderless financial table, split a striped table into one table per row, and missed a two-page table. pdfplumber's table_settings can switch to text-based detection, but we test defaults.
Can Docling read scanned PDFs?
Yes. Our scanned page had no text layer at all, and Docling's built-in OCR (RapidOCR) read the invoice table with every cell right.
Do I need a GPU to run Docling?
No. We installed the CPU-only build of PyTorch, as Docling's docs suggest for Linux without a GPU. It took about 2.3 seconds a page and 1.5 GB of memory on 8 CPU cores.
Do my PDFs get uploaded anywhere?
No. After Docling's one-time model download, both tools ran with the network switched off.
How do I extract tables from a PDF in Python for RAG or an LLM?
In our test, Docling did it best: pip install docling, convert the PDF with DocumentConverter, and call export_to_dataframe() on each table. It got every cell right in all 8 test tables, including a scanned page. From a dataframe you can save CSV or Markdown to feed an LLM. pdfplumber is lighter but, with default settings, only found tables with full borders.
Why
Who this is for: you get PDFs (invoices, bank statements, reports, supplier price lists) and need the tables as rows and columns: in a spreadsheet, in your app’s database, or as clean input for an AI. You’re fine running a short Python script, or having an AI assistant run it for you.
Our pick: Docling (100/100). It found every table in our test PDFs and got every single cell right, including the hard ones: a financial table with no borders, a long table split over two pages, and a scanned page with no text at all. It runs on a normal CPU, offline, and hands you each table as a dataframe.
No runner-up. pdfplumber, with its default settings, only finds tables drawn with full borders. It found 3 of our 8 tables, so it fails our core checks. It’s a good library to build your own extractor with, but not a drop-in answer.
Table by table
| Table | Docling | pdfplumber (defaults) |
|---|---|---|
| T1 Invoice, full borders | 100% | 100% |
| T2 Financial, no borders | 100% | not found |
| T3 Striped, horizontal lines only | 100% | 8% (split into one table per row) |
| T4 Wrapped text in cells | 100% | 100% |
| T5 61 rows over 2 pages | 100% | not found |
| T6 Small table, full borders | 100% | 100% |
| T7 Striped, second table on the page | 100% | 20% |
| T8 Scanned page (no text layer) | 100% | not found (no OCR) |
| Extra tables that weren’t there | 0 | 7 |
| Time per page | 2.3 s | 0.03 s |
| Memory | 1.5 GB | 46 MB |
Percentages are the share of cells with exactly the right text in the right row and column. The PDFs and the ground-truth CSVs are public.
Gotchas
Docling: install the CPU build on Linux. A plain pip install docling on Linux pulls in the GPU build of PyTorch, which is a much larger download. Docling’s docs give a CPU-only command: pip install docling --extra-index-url https://download.pytorch.org/whl/cpu.
Docling: the first run downloads models. About 30 seconds on our connection, once. After that it works offline.
Docling: long tables come back in pieces. The 61-row table came back as one table per page. Join them yourself (drop the repeated header row).
pdfplumber: change the settings for borderless tables. Its default looks for drawn lines. For tables laid out with spaces, pdfplumber documents table_settings such as text-based detection. We test defaults, so we didn’t score that.
Scores
Scored with our published rubric. Tested 2026-10-16. One run each: the gap was 34 points.
| Criterion | Docling | pdfplumber |
|---|---|---|
| Task success (35) | 5 (7 of 7) | 1 (2 of 7) |
| Effort (15) | 5 (no fixes) | 5 (no fixes) |
| Time (10) | 5 (about a minute) | 5 (about a minute) |
| Cost (10) | 5 ($0, runs locally) | 5 ($0, runs locally) |
| Quality of what you get (10) | 5 (5 of 5) | 2 (2 of 5: no CSV/dataframe call, extra tables, PDF only) |
| Ownership (10) | 5 (MIT; permissive model licences) | 5 (MIT) |
| Privacy and safety (10) | 5 (4 of 4) | 5 (4 of 4) |
| Total | 100 | 66 |
The 7 checks: finds at least 7 of 8 tables, at least 90% of cells right on the digital tables overall, and on the borderless, wrapped-text and two-page tables, at least 80% on the scanned page, and at most 10 seconds a page with at most 4 GB of memory.
What it costs
Both are free and open source with no usage limits. Our runs cost $0. Docling is MIT, with models under Apache-2.0 and CDLA-Permissive-2.0; pdfplumber is MIT.
Caveats
- Clean, generated PDFs. We made the PDFs ourselves so we’d know every right answer. Real-world PDFs (merged header cells, rotated pages, bad scans) are harder. One scanned page is not an OCR study.
- Defaults only. pdfplumber can do better with tuned settings for each layout; that’s work we left to the user, as most people first try the defaults.
- Docling was safe by default. Its README example fetches a PDF from a URL; on our test machine Docling refused because our network proxy uses a private address, a guard against a common server attack. With a local file it ran unchanged. Details are in the test script.
- Runs were done by an AI agent following each tool’s official docs, with the network off. The check script is public.
Next step: check your writing. See our tested pick for checking grammar and spelling. Need text from web pages instead? See web page to clean text.
Not tested yet
- Camelot, Tabula and Marker: other open-source options, queued for a follow-up.
- Hosted APIs (AWS Textract, Azure Document Intelligence, LlamaParse): need accounts and, for most, a card.
Test log
| Date | Agent | Step | Result |
|---|---|---|---|
| Oct 16, 2026 | Lando (agent) | Setup for both: 7 PDFs with 8 tables made from fixed CSV files with headless Chrome (bordered, borderless, striped, wrapped text, 61 rows over 2 pages, two tables on one page, and a scanned 150 dpi page with no text layer). Each page also has paragraphs. Every scored run had the network switched off. | PDFs and CSVs hashed and frozen before the runs, and published. Both tools are open source with no benchmarking restrictions. |
| Oct 16, 2026 | Lando (agent) | pdfplumber 0.11.10, run plumber-r1: pip install pdfplumber, then page.extract_tables() with default settings on every page. | 3 of 8 tables found (the fully bordered ones, 100% each). Nothing for the borderless, 2-page and scanned tables; the striped table split into one table per row. 7 extra tables. 0.03 s per page, 46 MB. Score: 66/100. |
| Oct 16, 2026 | Lando (agent) | Docling 2.140.0, run docling-r1: pip install docling with CPU-only PyTorch (as its docs suggest), one warm-up conversion to download models, then DocumentConverter() with default settings and export_to_dataframe() for each table. | 8 of 8 tables found, 100% of cells right, scan included. No extra tables. 2.3 s per page, 1.5 GB peak. Score: 100/100. |
Affiliate disclosure
This page has no affiliate links yet. Every link goes to the tool’s own homepage. Affiliate deals never decide a pick, and a tool with no affiliate program can still win. How we make money.
Sources
What to use now
A free weekly email.
We'll email you a link to confirm. We use Kit to send the email. Unsubscribe anytime. Privacy