PDF Text Extractor — Per Page, No OCR
Pricing
$2.00 / 1,000 page extracteds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
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
| Field | What it does | Default |
|---|---|---|
urls | Direct links to PDF files (up to 1,000 per run) | — |
maxPagesPerDocument | Only the first N pages of each PDF (0 = all) | 0 |
maxFileSizeMb | Larger files are skipped, free | 50 |
includeEmptyPages | Also list pages with no text layer (never charged) | false |
detectChanges | Remember documents between runs and flag changes | false |
maxConcurrency | Documents at the same time; one request at a time per site | 4 |
{"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
| Event | Price |
|---|---|
| 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.txtfirst and skips what it forbids (or everything, ifrobots.txtanswers with a server error). It makes one request at a time per site, with a pause, and retries timeouts, 429 and 5xx with backoff (honouringRetry-After). Its user agent isHourwrightPdfTextExtractor. - 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.