PDF Text Extractor — Structured Tables, Markdown & Metadata avatar

PDF Text Extractor — Structured Tables, Markdown & Metadata

Pricing

from $4.00 / 1,000 results

Go to Apify Store
PDF Text Extractor — Structured Tables, Markdown & Metadata

PDF Text Extractor — Structured Tables, Markdown & Metadata

Extract text from PDF URLs at scale: full text, per-page text, real structured tables (rows and columns as JSON, not text lines), document metadata and clean Markdown for LLM/RAG. The table extraction generic PDF text extractors don't have. No credentials needed.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

kuon

kuon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Extract text from PDF URLs at scale — and get the one thing generic PDF text extractors don't give you: tables as real structured data (rows and columns as JSON), not flattened text lines. Every PDF also yields full text, per-page text, document metadata, and a clean Markdown rendition with reconstructed headings and bullet lists. No credentials or API keys needed.

Why this extractor

  • PDF table extraction to JSON: [["Fruit","Qty"],["Apple","120"]] — ready for spreadsheets, databases or analysis. Most PDF text extractors return tables as jumbled text lines; this one returns rows and columns.
  • PDF to Markdown for LLM / RAG pipelines: headings inferred from font sizes, bullet lists preserved, tables as Markdown pipe tables — and table text is never duplicated as prose, so your chunks stay clean.
  • PDF to text in bulk: pass a list of URLs; failures (404s, broken or password-protected files) become failed items, never a crashed run.

What it does

Give it a list of PDF URLs. For each PDF you get one dataset item with:

  • fullText — the whole document as plain text
  • pages[] — per-page text with word and character counts
  • tables[] — every detected table as an array of rows ([["Fruit","Qty"],["Apple","120"],…]), with the page number it was found on
  • markdown — a Markdown version of the document: headings inferred from font sizes, bullet lists, and tables as Markdown pipe tables (table text is not duplicated as prose)
  • metadata — title, author, subject, keywords, creator, producer, creation/modification dates (ISO 8601)
  • stats — word count, character count, table count

Failed downloads or broken files produce an item with status: "failed" and a clear error message instead of crashing the run, so batch jobs always finish.

Input

FieldTypeDefaultDescription
pdfUrlsarrayDirect URLs to PDF files (redirects followed)
includePageTextsbooleantrueInclude the per-page pages array
includeTablesbooleantrueDetect and extract structured tables
includeMarkdownbooleantrueInclude the Markdown rendition
maxPagesPerPdfinteger0 (all)Process only the first N pages
timeoutSecsinteger60Download timeout per file
maxFileSizeMbinteger50Larger files are skipped with a failed item

Example output (abridged)

{
"url": "https://example.com/report.pdf",
"status": "success",
"metadata": {"title": "Quarterly Fruit Report", "author": "AtoA Workshop"},
"numPages": 2,
"fullText": "Quarterly Fruit Report\nThis report summarizes...",
"pages": [{"page": 1, "text": "...", "words": 32, "chars": 195}],
"tables": [{"page": 2, "tableIndex": 0, "rows": [["Fruit", "Quantity", "Price"], ["Apple", "120", "1.50"]]}],
"markdown": "## Quarterly Fruit Report\n...\n| Fruit | Quantity | Price |\n|---|---|---|\n| Apple | 120 | 1.50 |",
"stats": {"words": 47, "chars": 289, "tables": 1}
}

Typical uses

  • Convert reports, invoices and papers to analyzable data (PDF table extraction)
  • Feed LLM / RAG pipelines with clean Markdown instead of raw PDF text
  • Index PDF archives: full text + metadata (title, author, dates) per document
  • Batch-convert PDF URLs from a crawl or sitemap into text datasets

Limitations

  • No OCR: scanned image-only PDFs return empty text (selectable text required)
  • Password-protected PDFs are reported as failed items
  • Table detection works best on tables with ruled borders; borderless layouts may be missed
  • The Markdown rendition is heuristic — heavily designed layouts may come out flatter

Development (local)

cd actors/pdf-text-table-extractor
uv venv .venv && .venv/bin/python -m ensurepip 2>/dev/null; uv pip install -p .venv/bin/python -r requirements.txt
uv pip install -p .venv/bin/python fpdf2 # dev-only: fixture generator
.venv/bin/python tests/run_local_test.py # end-to-end test (apify run equivalent), exit 0 = ALL PASS
../../node_modules/.bin/apify run # real apify CLI local run (input: storage/key_value_stores/default/INPUT.json)

Test fixture is tests/fixtures/sample.pdf (regenerate with tests/make_fixture.py); expected results live in tests/expected_output.json. Publishing → ../../docs/publishing.md.