PDF Page Text Extractor – No Charge for Blank Pages
Pricing
$0.50 / 1,000 pages
PDF Page Text Extractor – No Charge for Blank Pages
Extract text from any PDF URL, one row per page. Pages with no extractable text (scanned PDFs) are never charged — the main differentiator. pypdf parsing, no OCR. Clean JSON for RAG pipelines, researchers and automation.
Pricing
$0.50 / 1,000 pages
Rating
0.0
(0)
Developer
Rowfeed
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Turn any PDF URL into clean, structured text: one row per page, ready for search, RAG ingestion, or a spreadsheet. Give it a list of PDF links — invoices, forms, reports, research papers, anything public on the web — and get back plain text per page in seconds, no login and no browser. Built for RAG/LLM ingestion pipelines that need page-addressable chunks instead of one giant text blob, researchers and analysts who need to search or diff text across a batch of PDFs, and automation/no-code workflows (n8n, Make, Zapier) that need a PDF-to-text step without running their own parsing library.
This Actor never scrapes a website — you bring your own PDF URLs. There is no source to break, no ToS to worry about, and no proxy involved: just an HTTP fetch and a text extraction.
What you get
- One row per page, not one blob per document —
pagenumber,text,char_count, the document's totalpage_countandtitle, so downstream chunking and citation ("page 4 of invoice.pdf") is trivial. - A page-range filter (
firstPage/lastPage) plus a per-PDF page cap (maxPagesPerPdf), so a 400-page report can be sampled or split into predictable runs. - Errors instead of crashes — a bad URL, a 404, a non-PDF response or a password-protected PDF becomes a single unbilled error row (
error,errorMessage), and the rest of your list keeps going.
You are never charged for a page with no extractable text
This is the main way this Actor differs from other PDF-to-text tools on Apify Store: a page only becomes a row, and only then costs anything, if pypdf actually pulled text out of it. A scanned or image-only PDF — a photographed contract, a faxed form, a book cover-to-cover as images — has zero extractable text on every page, so it produces zero charged rows. You pay nothing for it. The page is still counted (and logged) in the run's STATS record so you can see it happened, but it never reaches the dataset and never reaches your bill.
This Actor does not do OCR. It extracts the text layer that is already embedded in the PDF (the same text you could select and copy in a PDF viewer). If a page is a picture of text with no underlying text layer, no tool that isn't running OCR can read it — including this one — and per the rule above, you are not charged for trying.
Sample row
A real row from a default run against fw9.pdf (IRS Form W-9):
{"url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf","page": 1,"text": "Form W-9\n(Rev. March 2024)\nRequest for Taxpayer \nIdentification Number and Certification\nDepartment...","char_count": 5727,"page_count": 6,"title": "Form W-9 (Rev. March 2024)","scraped_at": "2026-09-11T01:34:09+00:00"}
Filters
| Input | Default | What it does |
|---|---|---|
pdfUrls | IRS Form W-9 + Form 1040 | Direct http/https links to PDF files. |
maxPagesPerPdf | 50 | Stop after this many pages per PDF (from the start of the resolved range). |
firstPage | 0 (unset) | First page to extract, 1-based. |
lastPage | 0 (unset) | Last page to extract, 1-based. |
includeDocumentInfo | true | Add the PDF's title to every row. |
No personal data, ever
The row only ever carries title from the PDF's own metadata. author, creator, producer and every other metadata field that can hold a person's name are never read into a row, whether includeDocumentInfo is on or off. What you get is the document's text and page structure — nothing that identifies who wrote or produced the file.
Pricing
Pay per event, no subscription: $0.50 per 1,000 pages. Only pages with extractable text are billed — see above. A default run (2 PDFs, 8 pages total, all with text) costs under half a cent. There is no charge for error rows, and no charge for pages with no extractable text. If every URL in your list fails (bad URL, not a PDF, encrypted), the run is marked failed rather than quietly returning nothing, and you are billed for nothing.
Use it from your tools
- API and SDKs — call it via the Apify API or the official Python/JavaScript clients: one call to start the run, one to fetch the page-text rows as JSON, CSV or Excel.
- n8n, Make and Zapier — trigger runs and feed extracted page text into a workflow through Apify's integration for each.
- AI agents and MCP — eligible for agentic use via Apify's MCP server with pay-per-event pricing, so an agent can hand it a PDF URL mid-task and pay only for the pages it actually got text from.
Details
- Fetching: plain
httpxGET over http/https only (no proxy, no browser). Requests are capped at 50 MB and time out after 30 s; 429 and 5xx responses are retried with exponential backoff (5 tries), 404/401/403 are not. - Not a PDF: a response that doesn't start with a PDF file header becomes an unbilled
not_pdferror row instead of being handed to the parser. - Encrypted PDFs: a password-protected PDF that can't be opened with an empty password becomes an unbilled
encryptederror row. - No OCR: only the PDF's existing text layer is read. Scanned/image-only pages extract as empty text and are never charged (see above).
- Run stats: the
STATSrecord in the run's key-value store holds per-PDF and per-page counts, including pages skipped for having no extractable text. - Not affiliated with any PDF source you point it at — you supply your own URLs; nothing is scraped from a website.