PDF to Excel – PDF Table Extractor & Bank Statement Converter
Pricing
from $3.00 / 1,000 page with tables
PDF to Excel – PDF Table Extractor & Bank Statement Converter
Convert PDF tables to Excel, CSV and JSON: bank statements, invoices, price lists and reports. Upload PDFs or paste links; get every table as rows plus one Excel file per PDF. Finds ruled and unruled tables. $3 per 1,000 pages with tables + $0.10 per 1,000 pages read.
Pricing
from $3.00 / 1,000 page with tables
Rating
0.0
(0)
Developer
Rowfeed
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Security
Full permissionsShare
Convert the tables in PDFs to Excel, CSV and JSON: bank statements, invoices, price lists and report tables. Upload PDFs or paste links; every table comes back as clean rows, plus one Excel file per PDF with each table on its own sheet. Works best on digital PDFs with clear tables: statements, invoices, price lists and ruled report tables. Built for bookkeepers, analysts, finance teams, automation workflows (n8n, Make, Zapier) and AI agents that need PDF tables as data. No OCR service, no API key, no copy-paste.
What you get
- One row per table row with
data(column name → cell), the same values as an orderedcellslist, thecolumns, and where it came from:file_name,page,tableandrow. - An Excel file per PDF (
excel_urlon every row): one sheet per table, namedp3_t1for page 3, table 1. Clear amounts like1,250.00,-84.20,(12.00)and European1.250,00become real numbers, so the sheet can sum them; account and card numbers, codes with leading zeros, dates and percentages stay text exactly as printed. - Ruled and unruled tables. Tables drawn with lines are read cell by cell. Pages without lines (most bank statements, price lists) are read by how the words line up in columns. Running text, two-column page layouts and chart gridlines are not reported as tables.
- Every transaction checked against the balance. On statements with a balance column, each row gets
balance_check:okwhen the previous balance plus its deposit or minus its withdrawal gives the balance printed on that row,mismatchwhen it does not, so a misread row can never slip through unnoticed. Statements listed newest first are handled too. The run's log andSTATSsay how many rows were checked and whether any did not add up. - CSV and JSON come from the dataset export as usual.
Example output
A row from the pre-filled example (a sample bank statement):
{"source": "https://raw.githubusercontent.com/kristerkb-pixel/rowfeed-seo-mcp/main/examples/bank-statement-example.pdf","file_name": "bank-statement-example.pdf","page": 1,"page_count": 2,"table": 1,"row": 2,"method": "text","columns": ["Date", "Description", "Amount", "Balance"],"cells": ["03.10.2026", "Grocery store Oslo", "-84.20", "1,165.80"],"data": { "Date": "03.10.2026", "Description": "Grocery store Oslo", "Amount": "-84.20", "Balance": "1,165.80" },"excel_url": "https://api.apify.com/v2/key-value-stores/.../records/tables-1-bank-statement-example.xlsx","balance_check": "ok"}
Input
| Field | What it does |
|---|---|
pdfs | Upload PDF files or paste links to them. Up to 200 per run, 50 MB each. |
mode | auto (default): ruled tables, and aligned-text tables on pages without ruled ones. lines or text force one method. |
firstRowIsHeader | Use each table's first row as column names (default). Off: col_1, col_2, ... |
firstPage, lastPage | Read only these pages (0 = from the start / to the end). |
maxPagesPerPdf | Read at most this many pages per PDF. Default 100. |
Pricing
Pay per event, no subscription:
- $0.003 per page with tables ($3 per 1,000 pages), however many tables or rows the page has.
- $0.0001 per page read ($0.10 per 1,000 pages), with or without tables.
- $0.002 per run start.
- Links that fail, files that are not PDFs and password-protected PDFs are free. A PDF that breaks partway through has paid only for the pages read before it broke.
Examples: a 3-page bank statement with a table on every page costs $0.0113. A 100-page report with tables on 10 pages costs $0.042. Cap the cost of a run with the maximum charge setting; the run stops before a page it could not pay for.
Good to know
- Tested on statements laid out like those of banks in Norway, the Netherlands, Hong Kong (bilingual Chinese/English), India, Singapore and the US, in English, Norwegian, Dutch, French and Chinese column names, with US (1,234.56), European (1.234,56) and French (1 234,56) amounts. The balance check reads column names in English, Norwegian, German, French, Dutch, Spanish, Italian, Chinese, Japanese and Korean. Layouts vary by bank: run one statement first and look at
balance_check. Where it saysmismatch, look at that row in the PDF. - No OCR. The PDF needs a text layer (you can select the text in a PDF viewer). Scanned or photographed pages have none, so no tables are found; they only cost the $0.0001 page read.
- Table detection is automatic and PDFs vary a lot: check the first file of a new kind. Complex report layouts (tables with only an outer frame, numbers spread with spaces) can come back split into several tables or with merged columns. Headers spread over several lines may become two rows, and a table broken by a heading or a page break comes back as two tables.
- Why it asks for full permissions: Apify only lets an Actor read a file you upload if it has full permissions. This Actor reads only the PDFs you give it and writes only to the run's own storage. You approve it once in Apify Console, on the first run. Runs started through the API or by an AI agent also need that one approval first.
- Links must be public.
- Your PDFs are read inside your own Apify run and not stored anywhere else.
More tools from Rowfeed
- PDF to Text – the full text of every PDF page, one row per page.
- SEO Audit Tool – page-by-page SEO checks for any website.
- Website Traffic Checker – estimated traffic of any website.