PDF Table Extractor - PDF to CSV, Excel & JSON avatar

PDF Table Extractor - PDF to CSV, Excel & JSON

Pricing

from $3.00 / 1,000 page with a tables

Go to Apify Store
PDF Table Extractor - PDF to CSV, Excel & JSON

PDF Table Extractor - PDF to CSV, Excel & JSON

Pull every table out of PDF files, even tables that run across pages. Get clean rows as JSON or CSV plus an Excel file per PDF. Reads scanned PDFs with OCR. $0.003 per page with a table; pages with no tables are free.

Pricing

from $3.00 / 1,000 page with a tables

Rating

0.0

(0)

Developer

Tidy Byte Tools

Tidy Byte Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Security

Limited permissions

Share

Give it links to PDF files and it pulls out every table: bank statements, invoices, price lists, reports, government data. Each table lands in the dataset as clean rows (export as JSON, CSV or Excel from the Storage tab), and each PDF also gets its own Excel file with one sheet per table.

  • Finds every table on every page, with or without border lines
  • Joins a table that continues onto the next page into one table (repeated headers are dropped)
  • Turns numbers into real numbers: 1,200 becomes 1200 and (40) becomes -40
  • Reads scanned, image-only pages with OCR, built in, no setup
  • A bad link doesn't stop the run. You get an item with an error field and it moves on

Pricing

Pay only for pages that gave you a table:

EventPriceWhen
Page with a table$0.003A normal (text) PDF page where we found at least one table
Scanned page read with OCR$0.01A scanned (picture) page we read with OCR and found a table. Charged instead of the $0.003, not on top

Apify also adds its small standard start fee per run.

You don't pay for:

  • pages where no table was found
  • links that fail to download or aren't PDFs

You're charged only after a PDF's rows and Excel file are saved. Set "Max pages per PDF" or a maximum cost per run. The Actor stops before your limit and tells you in the dataset.

What you runPages with tablesCost
One 3-page bank statement3$0.009
20 invoices, 1 page each20$0.06
A 100-page report, 40 pages have tables40$0.12
1,000 pages of price lists1,000$3.00
A 10-page scanned statement10 (OCR)$0.10

Input

FieldWhat it means
PDF linksDirect links to PDF files. The link must download the PDF itself
PagesLike 1,3-5. Leave empty for all pages
Table typeAuto (default), tables with borders, or tables lined up by spacing
Scanned PDFs (OCR)Auto (only pages with no text), every page, or off
Join tables across pagesOn by default
Max pages per PDFDefault 200, so a huge file can't surprise you

Example input:

{
"pdfUrls": [{ "url": "https://www.w3.org/WAI/WCAG21/working-examples/pdf-table/table.pdf" }],
"pages": "",
"strategy": "auto",
"ocr": "auto",
"mergeAcrossPages": true,
"maxPagesPerPdf": 200
}

Output

One dataset item per table:

{
"sourceUrl": "https://example.com/quarterly-report.pdf",
"table": "page1_table1",
"page": 1,
"ocr": false,
"columns": ["Region", "Q1", "Q2"],
"records": [
{ "Region": "North", "Q1": 1200, "Q2": 1350 },
{ "Region": "South", "Q1": 980, "Q2": -40 }
],
"rowCount": 2,
"excelFile": "tables-1"
}

The Excel file for the first PDF is saved in the run's key-value store as tables-1, the second as tables-2, and so on.

A link that fails gives an item like this, and the run carries on:

{ "sourceUrl": "https://example.com/missing.pdf", "error": "Client error '404 Not Found' for url 'https://example.com/missing.pdf'" }

For AI agents

  • Use when: you have public links to PDFs and need their tables as rows (JSON) or an Excel file.
  • Don't use when: the PDF is behind a login, has a password, or you only need the plain text (not tables).
  • Input: pdfUrls (list of {"url": "..."}), optional pages like 1,3-5, strategy (auto, lines, text), ocr (auto, always, never), mergeAcrossPages (true/false), maxPagesPerPdf.
  • Output: one dataset item per table with sourceUrl, table, page, ocr, columns, records, rowCount, excelFile. A failed link gives {sourceUrl, error}. No tables gives one item with table: null and pagesCharged: 0.
  • Cost: $0.003 per page with a table, $0.01 per scanned page read with OCR. Pages with no tables are free. The run never goes over your max cost.
  • Files are not kept after the run. Only your results stay in your own Apify storage.

Run it on a schedule

If the same PDF is republished every week or month (a price list, a public report, a statement), create a Task with your links, then open Schedules in Apify Console and run it daily, weekly or monthly. Connect the run to Google Sheets, Make, Zapier, a webhook or the API to send the new rows wherever you need them.

FAQ

Does it work on scanned PDFs? Yes. Pages with no text layer are read with OCR automatically. OCR pages cost $0.01 because they take much more computer time. OCR is slower and can misread blurry scans, so check the numbers on those pages. Each item has "ocr": true when it came from OCR.

A table came out wrong or wasn't found. Try "Table type: tables lined up by spacing" for tables without border lines, or "tables with borders" if spacing splits columns badly. Very unusual layouts may still need a quick fix by hand.

Can it open password-protected PDFs? Not in this Actor. The offline version below can.

Do you keep my PDFs? Files are downloaded into the run, processed, and only the results stay in your own Apify storage, under your storage retention settings.

How do I get CSV? Open the dataset and export as CSV, or use the Excel file from the key-value store.

Can I keep the files off the cloud entirely? Yes. Use the offline version.

Prefer to run it on your own computer?

The same extractor is available as a Python tool you run offline, with no per-page cost. It also opens password-protected PDFs and writes Excel, CSV or JSON: pdf-table-pull on Gumroad. There's also a free CSV-only version, pdf-table-pull-lite (pip install git+https://github.com/tidybytetools/pdf-table-pull-lite), which also has a free MCP server for AI apps.