PDF Text Extractor — Per Page, No OCR avatar

PDF Text Extractor — Per Page, No OCR

Pricing

$2.00 / 1,000 page extracteds

Go to Apify Store
PDF Text Extractor — Per Page, No OCR

PDF Text Extractor — Per Page, No OCR

Extract clean text from PDF URLs, page by page. Pay only for pages that have text: empty pages, broken files and failed downloads are free. Respects robots.txt.

Pricing

$2.00 / 1,000 page extracteds

Rating

0.0

(0)

Developer

Vega

Vega

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

Turn PDF links into clean text, one dataset item per page. Built for RAG pipelines, search indexes, and spreadsheets fed from Make, n8n, Zapier or the Apify API.

You pay only for pages that have text: $2.00 per 1,000 pages. Empty pages (scanned images), broken or password-protected files, failed downloads, URLs that are not PDFs and URLs that robots.txt forbids are reported in the dataset and are never charged. Invalid input fails the run at once, before anything is charged.

README.es.md

What you get

  • The text of every page, cleaned up (Unicode-normalized, no control characters, collapsed whitespace), with its page number, the document's page count and its title.
  • A clear status for everything that was skipped, in plain words, in a separate Skipped (not charged) view.
  • With Detect changes, a fingerprint of each document is kept between runs. Pages are flagged when their document changed, and you get a warning when a URL that used to return a PDF now returns something else (a moved report, a login page…). Run it on a schedule to watch documents.

Input

FieldWhat it doesDefault
urlsDirect links to PDF files (up to 1,000 per run)—
maxPagesPerDocumentOnly the first N pages of each PDF (0 = all)0
maxFileSizeMbLarger files are skipped, free50
includeEmptyPagesAlso list pages with no text layer (never charged)false
detectChangesRemember documents between runs and flag changesfalse
maxConcurrencyDocuments at the same time; one request at a time per site4
{
"urls": [
{ "url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf" },
{ "url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf" }
]
}

Output

A real run on 19 October 2026 with the two URLs above plus the IRS Publication 17 gave 149 pages with text from 3 documents in about 15 seconds. Two of the items (text shortened here):

{
"url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
"status": "ok", "page": 1, "pageCount": 1,
"text": "Dummy PDF file",
"charCount": 14, "wordCount": 3, "isEmpty": false, "title": null,
"changedSinceLastRun": null,
"sha256": "3df79d34abbca99308e79cb94461c1893582604d68329a41fd4bec1885e6adb4", "message": null
}
{
"url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf",
"status": "ok", "page": 1, "pageCount": 6,
"text": "Form W-9\n(Rev. March 2024)\nRequest for Taxpayer\nIdentification Number and Certification\n…",
"charCount": 5659, "wordCount": 933, "isEmpty": false, "title": "Form W-9 (Rev. March 2024)",
"changedSinceLastRun": null,
"sha256": "2d420cbb4123dcf1fb82595b2359cfbb5d81f00b9df9d359fcc7af361d093f53", "message": null
}

A skipped document looks like this (and costs nothing):

{ "url": "https://example.com/report.pdf", "status": "source_changed", "page": null,
"message": "this URL used to return a PDF and now returns «text/html» (starts with «<!doctype html>…»). The source has changed or moved; nothing was charged" }

Statuses: ok, empty_page, robots_disallowed, robots_unavailable, download_failed, too_large, not_a_pdf, source_changed, encrypted, broken_pdf, skipped_charge_limit.

Pricing

EventPrice
Page with text extracted$2.00 per 1,000

That's all. No start fee, no charge per result row. If you set a maximum cost per run, the Actor stops cleanly when it's reached and tells you so in the run's status message.

Good to know

  • No OCR. Scanned PDFs have no text layer: their pages come out as empty_page (if you ask for them) and are free.
  • It's polite. It reads each site's robots.txt first and skips what it forbids (or everything, if robots.txt answers with a server error). It makes one request at a time per site, with a pause, and retries timeouts, 429 and 5xx with backoff (honouring Retry-After). Its user agent is HourwrightPdfTextExtractor.
  • Your documents, your responsibility. Use it on your own files or on documents that are public. It doesn't log in anywhere, bypass protections, or look for information about people.
  • Questions or a document that comes out wrong? Open an issue on the Actor's page.

By Hourwright.