PDF Text Extractor: Pages, Tables, Markdown & Metadata avatar

PDF Text Extractor: Pages, Tables, Markdown & Metadata

Pricing

from $0.70 / 1,000 result rows

Go to Apify Store
PDF Text Extractor: Pages, Tables, Markdown & Metadata

PDF Text Extractor: Pages, Tables, Markdown & Metadata

Extract text from PDF URLs, uploads or dataset links: one row per document or per page, page ranges, table-friendly layout order, Markdown and metadata. Password-protected and scanned PDFs are detected and never charged. No OCR, no proxy.

Pricing

from $0.70 / 1,000 result rows

Rating

0.0

(0)

Developer

Ctrio Lab

Ctrio Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Turn PDF links (or an uploaded PDF, or PDF links from another Actor's dataset) into clean text you can search, analyze or feed to an LLM. Choose one row per document or one row per page, pick page ranges, keep table rows in the right order, get a Markdown version and the PDF metadata. Password-protected and scanned (image-only) PDFs are detected and reported clearly, and you are never charged for files that fail or have no text.

No browser, no proxy, no login. Runs on 512 MB.

What you get

  • Document or page rows. Document mode puts the full text of each PDF in one row (cheapest) and still lists every page with its character count. Page mode writes one row per page, ready for RAG chunks, search indexes and citations ("page 14 says...").
  • Page ranges like 1-3, 7, 10- (10 to the end). Pages outside the file are ignored.
  • Two text orders.
    • reading (default): the order stored in the PDF. Keeps two-column scientific papers in column order.
    • layout: rebuilds rows by position, top to bottom and left to right, and separates table cells with a tab. Use it for tables, invoices, bank statements, forms, where many PDFs store a table column by column and other extractors return all of column 1, then all of column 2.
  • Markdown (optional): headings from larger fonts, bullet lists, wrapped lines joined into paragraphs (hyphenated words re-joined), and in layout mode tab rows become Markdown tables.
  • Metadata: title, author, subject, keywords, creator, producer, creation and modification date (ISO 8601), PDF version, file size, page count.
  • Counts: characters and words per row, truncated when you set a maximum length.
  • Clear problem reports in the run's SUMMARY record and log, never as charged rows:
    • Password protected: this PDF needs a password (add it in PDF password to open it),
    • Not a PDF (the server sent text/html) for login pages and HTML viewers,
    • Download failed: HTTP 404, timeouts, files above your size limit,
    • no text layer: scanned or image-only PDFs. This Actor does not run OCR, so it tells you which files need OCR instead of returning empty rows. In partly scanned files, textLayer is partial and pagesWithoutText lists the pages.
  • Large files: downloads are streamed and stopped as soon as the size limit is passed; pages are read one at a time. A 142-page, 3.6 MB IRS publication takes about 7 seconds.

How to use it

  1. Paste PDF links into PDF URLs (or upload a PDF, or pick a dataset that has a PDF link field).
  2. Choose One row per (document or page), and optionally Pages, Text order and Markdown.
  3. Start the run and download the results as JSON, CSV, Excel or through the API.

Example input:

{
"urls": [
"https://www.irs.gov/pub/irs-pdf/fw4.pdf",
"https://arxiv.org/pdf/1706.03762v7"
],
"outputMode": "page",
"pages": "1-3",
"textLayout": "reading",
"markdown": true
}

Input

FieldWhat it does
urlsDirect PDF links (http/https). Duplicates are skipped.
uploadedFileOne PDF uploaded in the Console.
datasetId, urlFieldRead PDF links from a dataset field (default url), e.g. after a scraper in an integration.
outputModedocument (default) or page.
pagesPage selection such as 1-5, 8, 10-. Empty = all.
textLayoutreading (default) or layout (tables and forms).
markdownAlso return Markdown.
includeTextReturn plain text (default on). Turn off for Markdown only.
maxCharsCut text and Markdown per row (0 = no limit). In document mode reading stops at the limit.
passwordPassword for protected PDFs (stored encrypted).
maxFileSizeMbSkip larger files (default 100 MB).
downloadTimeoutSecsPer-file download timeout (default 120).
maxConcurrencyPDFs processed at the same time (default 3).

Output

Document mode row (shortened):

{
"url": "https://www.irs.gov/pub/irs-pdf/fw4.pdf",
"fileName": "fw4.pdf",
"pageCount": 5,
"pagesExtracted": 5,
"textLayer": "full",
"pagesWithoutText": [],
"charCount": 25763,
"wordCount": 4954,
"truncated": false,
"text": "Form W-4\n2026\nEmployee’s Withholding Certificate\n\nDepartment ...",
"pages": [{ "page": 1, "charCount": 4747, "hasText": true }],
"title": "2026 Form W-4",
"author": "C:DC:TS:CAR:MP",
"creationDate": "2025-12-11T13:15:41.000Z",
"pdfVersion": "1.7",
"fileSizeBytes": 208845,
"extractedAt": "2026-10-26T04:20:00.000Z"
}

Page mode rows have page, pageCount, text, markdown, charCount, wordCount, truncated, title, author, fileSizeBytes. Pages without text are skipped in page mode and counted in SUMMARY.emptyPagesSkipped.

The SUMMARY record (key-value store) has documentsOk, rowsWritten, pagesRead, failed (URL and reason), noTextLayer and emptyPagesSkipped.

Pricing

Pay per result row: one PDF in document mode, one page in page mode. Failed downloads, non-PDF links, password-protected files without the password and scanned files without a text layer are not charged. Higher Apify plans get a discount automatically. Tip: document mode is the cheapest way to get full text; use page mode when you need page numbers per row.

FAQ

Does it do OCR? No. It reads the text layer that most PDFs created by software have. Scanned PDFs are reported as "no text layer" so you can send only those to an OCR tool.

Which order should I use for tables? layout. It keeps each table row on one line with cells separated by a tab, and in Markdown mode makes a Markdown table.

Can it open password-protected PDFs? Yes, if you give the password. Without it the file is reported, not charged.

Can I use it from an AI agent or my code? Yes. Call it through the Apify API, the Apify MCP server or any Apify integration, and read the dataset.

Links that need a login or open an HTML viewer? Use a direct link to the PDF file. Pages that return HTML are reported as "Not a PDF".

Text extraction uses Mozilla pdf.js (Apache-2.0) through unpdf (MIT).