buildwiththis home

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.

Last tested Oct 16, 2026 Re-test due by Nov 15, 2026 Published Oct 16, 2026 Test log (3 entries)

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

100/100

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.

Visit Docling

Runner-up

No runner-up named

None of the tools we tested earned this slot.

Also tested

Tested on the same app but not picked. The reasons are in the write-up below.

On this page
  1. Quick answers
  2. Why
  3. Table by table
  4. Gotchas
  5. Scores
  6. What it costs
  7. Caveats
  8. Not tested yet
  9. Test log
  10. Affiliate disclosure
  11. Sources

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

TableDoclingpdfplumber (defaults)
T1 Invoice, full borders100%100%
T2 Financial, no borders100%not found
T3 Striped, horizontal lines only100%8% (split into one table per row)
T4 Wrapped text in cells100%100%
T5 61 rows over 2 pages100%not found
T6 Small table, full borders100%100%
T7 Striped, second table on the page100%20%
T8 Scanned page (no text layer)100%not found (no OCR)
Extra tables that weren’t there07
Time per page2.3 s0.03 s
Memory1.5 GB46 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.

CriterionDoclingpdfplumber
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)
Total10066

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

DateAgentStepResult
Oct 16, 2026Lando (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, 2026Lando (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, 2026Lando (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