PDF Tables to Records — JSON, CSV & Page Sources
Pricing
from $2.50 / 1,000 processed pages
PDF Tables to Records — JSON, CSV & Page Sources
Turn text-based PDF tables into structured records for spreadsheets, ETL and AI workflows. Get JSON/CSV-ready data with page provenance, table coordinates and document hashes. Launch price: $0.0025/processed page, plus run start.
Pricing
from $2.50 / 1,000 processed pages
Rating
0.0
(0)
Developer
Евгений Гертнер
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Turn text-based PDF tables into structured records for spreadsheets, ETL and AI workflows. Extract reports, catalogs and public price lists into JSON and CSV with page numbers, table coordinates and document hashes.
- Two extraction strategies: bordered tables or whitespace-aligned text.
- Batch up to 10 PDFs, with up to 100 selected pages per document.
- Trace every row to its page, table and source document.
- JSON and CSV exports ready for downstream processing.
- Launch price: $2.50 per 1,000 processed pages, plus $0.001 run start; platform usage included.
Start with this input
{"pdfUrls": ["https://raw.githubusercontent.com/jsvine/pdfplumber/stable/examples/pdfs/background-checks.pdf"],"startPage": 1,"maxPages": 2,"strategy": "lines","mergeRepeatedHeaders": false}
Choose lines for table borders or text for whitespace-aligned columns. The extractor reads the PDF's text layer and table geometry. Tune the strategy on a representative page, then reuse those settings across the same template.
Get records with source evidence
The dataset contains one item per processed page: status, tablesDetected, rows and a records array. The key-value store provides:
TABLES: flat JSON table-row array.TABLES-CSV: long-form CSV with document ID, page, table ID, row index, column and value.SUMMARY: document outcomes, processed pages, errors and request statistics.
{"page": 1,"tableId": 1,"rowIndex": 1,"header": ["Product", "Price"],"cells": ["Widget", "12.50"],"record": {"Product": "Widget", "Price": "12.50"},"continuedFromPreviousPage": false}
Numeric-looking values remain strings to preserve leading zeros and locale punctuation. Whitespace and Unicode forms are normalized. CSV applies spreadsheet-formula escaping; JSON retains the extracted values.
The first non-empty row becomes the table header. Blank and duplicate names receive deterministic names. mergeRepeatedHeaders: true groups consecutive single-table pages with exactly matching headers; page and table provenance remain available.
Connect your pipeline
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("gertner-data/pdf-table-records").call(run_input={"pdfUrls": ["https://raw.githubusercontent.com/jsvine/pdfplumber/stable/examples/pdfs/background-checks.pdf"],"maxPages": 2})store = client.key_value_store(run["defaultKeyValueStoreId"])summary = store.get_record("SUMMARY")["value"]records = store.get_record("TABLES")["value"]print(summary["complete"], len(records))
Use the API, saved tasks, schedules, webhooks or Apify MCP. The same document bytes and settings produce the same document ID and extraction.
API coverage and run settings
Processes public, text-based PDFs over HTTP(S). A page with no detectable table returns no_tables; a page without a text layer returns no_text_layer. Password-protected, malformed or complex documents have structured outcomes in SUMMARY. Successful documents remain available when another document fails.
Table geometry determines extraction. Raw cells, normalized headers, page bounds and header/cell warnings provide review evidence for merged cells, multi-row headers and complex layouts.
1–10 PDFs, 15 MB per file, 100 selected pages per document. Page output: 1 MB; each run JSON/CSV export: 6 MB. Parser wall-clock limit: 50 seconds per subprocess, with Linux CPU/memory/file limits. Default memory: 1 GB; timeout: 900 seconds. Downloads use bounded retries for transient network errors, 429 and 5xx.
Inputs/results use your Apify retention settings. Temporary PDF bytes are removed after parsing. Diagnostic URLs omit query parameters; logs contain aggregate metrics. Use permitted public sources.
Pricing
Launch price: $0.001 run start + $0.0025 per processed page. Platform usage included.
| Processed pages | Event price |
|---|---|
| 1 | $0.0035 |
| 2 | $0.0060 |
| 100 | $0.2510 |
Page events cover processing, including no_tables and no_text_layer outcomes. Failed downloads and unprocessed pages receive no page event. Set a maximum run charge to control spending; the start event applies independently.
Support: Evgeny Gertner.