PDF Table Extractor - PDF to CSV, Excel & JSON
Pricing
from $3.00 / 1,000 page with a tables
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
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,200becomes 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
errorfield and it moves on
Pricing
Pay only for pages that gave you a table:
| Event | Price | When |
|---|---|---|
| Page with a table | $0.003 | A normal (text) PDF page where we found at least one table |
| Scanned page read with OCR | $0.01 | A 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 run | Pages with tables | Cost |
|---|---|---|
| One 3-page bank statement | 3 | $0.009 |
| 20 invoices, 1 page each | 20 | $0.06 |
| A 100-page report, 40 pages have tables | 40 | $0.12 |
| 1,000 pages of price lists | 1,000 | $3.00 |
| A 10-page scanned statement | 10 (OCR) | $0.10 |
Input
| Field | What it means |
|---|---|
| PDF links | Direct links to PDF files. The link must download the PDF itself |
| Pages | Like 1,3-5. Leave empty for all pages |
| Table type | Auto (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 pages | On by default |
| Max pages per PDF | Default 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": "..."}), optionalpageslike1,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 withtable: nullandpagesCharged: 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.