PDF Table Extractor avatar

PDF Table Extractor

Pricing

from $30.00 / 1,000 table extracteds

Go to Apify Store
PDF Table Extractor

PDF Table Extractor

Extract tables from PDF files into clean JSON, CSV, Markdown and Excel-ready rows. Column structure and empty cells are preserved, so every value stays in the column it came from. Works on financial reports, research papers, government statistics and invoices.

Pricing

from $30.00 / 1,000 table extracteds

Rating

0.0

(0)

Developer

Scrappeer

Scrappeer

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

PDF Table Extractor — get tables out of PDFs without losing the columns

Extract tables from PDF files into clean JSON, CSV, Markdown, and Excel-ready rows. Column structure and empty cells are preserved, so every number stays in the column it came from.

Built for financial reports, scientific papers, government statistics, invoices, tariff schedules, and any other PDF where the value you need lives inside a table.


The problem this solves

Every generic "PDF to text" tool flattens a table into one stream of words. Take this table from a research paper:

ModelBLEU EN-DEBLEU EN-FRCost EN-DECost EN-FR
ByteNet23.75
Deep-Att + PosUnk39.21.0e20
GNMT + RL24.639.922.3e191.4e20

A text extractor gives you this:

Model BLEU Training Cost EN-DE EN-FR EN-DE EN-FR ByteNet 23.75
Deep-Att + PosUnk 39.2 1.0e20 GNMT + RL 24.6 39.92 2.3e19 1.4e20

Is 23.75 an EN-DE score or an EN-FR score? There is no way to tell. The empty cells vanished, and with them the alignment between values and columns. Every downstream use — a spreadsheet, a database, an LLM prompt — inherits that error.

This Actor reads the table geometrically instead, so the output is:

{
"header": ["Model", "BLEU EN-DE", "BLEU EN-FR", "Cost EN-DE", "Cost EN-FR"],
"rows": [
["ByteNet", "23.75", null, null, null],
["Deep-Att + PosUnk", null, "39.2", null, "1.0e20"],
["GNMT + RL", "24.6", "39.92", "2.3e19", "1.4e20"]
]
}

null means the cell was genuinely empty. Nothing is silently dropped.


What you get

  • Empty cells preserved as null — the single most common failure of text extractors
  • Spanning headers flattened — a two-row header like BLEU / EN-DE EN-FR becomes BLEU EN-DE, BLEU EN-FR
  • Three detectors, best result wins — ruled borders, whitespace alignment, and a hybrid; overlapping detections are de-duplicated
  • Table captions detectedTable 3: Variations on the architecture is attached to the right table
  • Split decimals repaired1 . 0 becomes 1.0, · 10 20 becomes ·10^20
  • Quality score per table so you can filter out noisy detections
  • JSON + CSV + Markdown in every result — export to Excel in one click, or paste straight into an LLM prompt
  • No proxy, no browser, no API key — fast and cheap to run

Input

{
"pdfUrls": [
"https://example.com/annual-report-2025.pdf",
"https://arxiv.org/pdf/1706.03762"
],
"strategy": "auto",
"minRows": 2,
"minColumns": 2,
"minQualityScore": 25,
"includeMarkdown": true,
"includeCsv": true
}
FieldDefaultNotes
pdfUrlsRequired. Direct links to PDF files.
strategyautoauto runs all detectors. Use lines for bordered tables, text for whitespace-aligned ones.
minRows / minColumns2 / 2Filters out fragments. Keep minColumns at 2+ to avoid catching paragraphs.
minQualityScore250–100. Lower it if tables are missed, raise it if you get noise.
maxPagesPerPdf00 processes every page.
maxFileSizeMb50Larger PDFs are skipped.

Output

One dataset item per table:

FieldDescription
sourceUrl, fileNameWhere the table came from
pageNumber, pageCountLocation in the document
tableIndex1-based index within the PDF
captione.g. Table 2: BLEU scores on newstest2014
headerHeader row, or null if none detected
rowsData rows. Empty cells are null.
rowCount, columnCount, emptyCellCountShape of the table
qualityScore0–1 confidence in the detection
extractionStrategyWhich detector produced it
markdownReady-to-paste Markdown table
csvCSV string

Export the dataset as Excel, CSV, JSON, or XML from the Apify Console, or pull it through the API.


Typical uses

  • Financial analysis — pull balance sheets and income statements out of annual reports
  • Research — collect result tables across dozens of papers into one spreadsheet
  • Government and regulatory data — statistics releases, tariff schedules, procurement notices
  • RAG and LLM pipelines — feed models a real table instead of a scrambled paragraph
  • Competitive intelligence — spec sheets and pricing tables from vendor PDFs

Limits

  • Digital text only. Scanned PDFs are images; run OCR first, then use this Actor. When no tables are found you get a result explaining why rather than an empty run.
  • Rotated and vertically-written tables are not supported yet.
  • Cells merged across rows are reported in the first row they occupy.
  • Password-protected PDFs are skipped with an error field.

Pricing

Pay per event. You are charged for each table successfully extracted, plus a small start fee per run. PDFs that yield no tables cost only the start fee.


Support

Found a PDF that extracts badly? Open an issue on the Actor's Issues tab with the URL and the page number. Detector tuning is the main way this Actor improves.