PDF & Document Text Extractor: PDF, DOCX, PPTX, XLSX to Text
Pricing
$3.00 / 1,000 results
PDF & Document Text Extractor: PDF, DOCX, PPTX, XLSX to Text
Turn public document URLs (PDF, DOCX, PPTX, XLSX, CSV, HTML, TXT) into clean text: whole document, per page or RAG-ready chunks, with metadata, language, word count, links and approximate tables. Built for AI agents, search indexes and data pipelines. Pay only for successful extractions.
Pricing
$3.00 / 1,000 results
Rating
0.0
(0)
Developer
Angad Jangir
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Security
Limited permissionsShare
PDF & Document Text Extractor
Turn links to PDF, Word, PowerPoint, Excel, CSV, HTML and text files into clean text with metadata. Get one record per document, per page, or ready-made chunks for RAG and AI agents.
Paste document URLs and get the text in reading order: the whole document, page by page, or in overlapping chunks you can send straight to an embedding model. Every record has typed metadata (title, author, dates, page count, language, word count), the links found in the file, and the tables as rows of cells.
Who uses it
- AI and RAG builders: load reports, manuals, papers and policies into a vector database. Chunks mode gives sized, overlapping chunks with page numbers, ready for embedding.
- AI agents (MCP): an agent hands over a URL and gets back clean text it can read, quote and cite by page.
- Researchers and analysts: pull text and tables out of hundreds of public reports, filings, tenders or papers in one run.
- Search and archiving teams: index document libraries with full text, language and metadata.
- Data pipelines: a scheduled run turns new documents into structured JSON, CSV or Excel.
What it does
| Formats | PDF, DOCX, PPTX (with speaker notes), XLSX (every sheet), CSV/TSV, HTML, TXT. The type is read from the file itself, so links without an extension work. |
| Output modes | documents: one record per file. pages: one record per page (slide for PPTX, sheet for XLSX). chunks: overlapping chunks for RAG, with pageStart/pageEnd and character offsets. |
| Clean text | Text in reading order, running headers, footers and page numbers removed, white space tidied, citations and links kept in place. |
| Metadata | Title, author, creator app, producer, subject, keywords, last modified by, created and modified dates (ISO 8601), PDF version, form and signature flags, encryption. |
| Language | Detected language (ISO 639-1, e.g. en) plus the language the file declares, if any. |
| Counts | Word count and character count per document, per page and per chunk. |
| Links | Every link in the file: PDF link annotations, Word and PowerPoint hyperlinks, HTML anchors (made absolute) and URLs written in the text. |
| Tables | Rows of cells. Exact for XLSX, CSV, DOCX, PPTX and HTML; approximate for PDF (found from the layout, marked with tablesNote). |
| Share links | Google Drive and Dropbox share links are turned into direct downloads. |
| Protected PDFs | Add the password in the input. |
| Fair billing | Only successful extractions are saved and charged. Failed URLs cost nothing and are listed with the reason in the SUMMARY record. |
Input examples
The default input reads one 12-page RFC PDF in a few seconds:
{"urls": ["https://www.rfc-editor.org/rfc/rfc9309.pdf"]}
Several formats, one record per page:
{"urls": ["https://www.rfc-editor.org/rfc/rfc9309.pdf","https://calibre-ebook.com/downloads/demos/demo.docx","https://www.rfc-editor.org/rfc/rfc9309.html"],"outputMode": "pages"}
RAG chunks of about 1,500 characters (about 375 tokens) with 200 characters of overlap:
{"urls": ["https://www.rfc-editor.org/rfc/rfc9309.pdf"],"outputMode": "chunks","chunkSize": 1500,"chunkOverlap": 200}
Smaller records: metadata and full text only, no per-page array or tables:
{"urls": ["https://www.rfc-editor.org/rfc/rfc9309.pdf"],"includePages": false,"extractTables": false}
Output example
A real record from the default input (documents mode; the long text, pages, links and tables are shortened here):
{"url": "https://www.rfc-editor.org/rfc/rfc9309.pdf","finalUrl": "https://www.rfc-editor.org/rfc/rfc9309.pdf","fileName": "rfc9309.pdf","documentType": "pdf","mimeType": "application/pdf","fileSizeBytes": 177688,"title": "RFC 9309: Robots Exclusion Protocol","pageCount": 12,"pagesExtracted": 12,"pageUnit": "page","author": "Martijn Koster, Gary Illyes, Henner Zeller, Lizzi Sassman","creator": "xml2rfc 3.14.2","producer": "WeasyPrint 56.1","subject": "This document specifies and extends the \"Robots Exclusion Protocol\" ...","keywords": null,"lastModifiedBy": null,"createdAt": "2022-09-10T00:39:45.000Z","modifiedAt": "2022-09-10T00:39:47.000Z","isEncrypted": false,"pdfVersion": "1.7","hasForm": false,"isSigned": false,"declaredLanguage": null,"language": "en","languageIso3": "eng","wordCount": 3042,"charCount": 21129,"linkCount": 26,"tableCount": 4,"text": "RFC 9309\nRobots Exclusion Protocol\n\nAbstract\nThis document specifies and extends the \"Robots Exclusion Protocol\" method originally defined ...","pages": [{ "pageNumber": 1, "text": "RFC 9309\nRobots Exclusion Protocol\n\nAbstract ...", "wordCount": 284, "charCount": 1839 },{ "pageNumber": 3, "text": "1. Introduction\nThis document applies to services that provide resources that clients can access through URIs as\ndefined in [RFC3986]. For example, ...", "wordCount": 269, "charCount": 1640 }],"links": ["https://www.rfc-editor.org/rfc/rfc9309", "https://www.rfc-editor.org/info/rfc9309", "https://trustee.ietf.org/license-info"],"tables": [{ "page": 1, "rowCount": 7, "columnCount": 5, "rows": [["Stream:", "Internet Engineering Task Force (IETF)"], ["RFC:", "9309"], ["Category:", "Standards Track"]] }],"tablesNote": "PDF tables are found from the page layout (best effort). Check them before you rely on them; merged cells and multi-line cells may split or join.","warnings": [],"extractedAt": "2026-11-05T16:39:06.678Z"}
A real record in chunks mode (RFC 9309 as plain text, chunkSize 800, chunkOverlap 150):
{"url": "https://www.rfc-editor.org/rfc/rfc9309.txt","fileName": "rfc9309.txt","documentType": "txt","chunkId": "b81919b50d6942b0-1","chunkIndex": 1,"chunkCount": 36,"pageStart": 1,"pageEnd": 1,"charStart": 528,"charEnd": 1269,"text": "instructions for handling errors, and instructions for caching.\n\nStatus of This Memo\n\nThis is an Internet Standards Track document.\n\nThis document is a product of the Internet Engineering Task Force\n(IETF). ...","charCount": 741,"wordCount": 115,"pageCount": 1,"pageUnit": "document","language": "en","author": null,"createdAt": null,"extractedAt": "2026-11-05T16:39:00.011Z"}
pageUnit tells you what a "page" is: page for PDF (and TXT files with form feeds), slide for PPTX, sheet for XLSX, and document for DOCX, HTML, CSV and plain TXT, which have no fixed pages. chunkId is stable for the same URL and settings, so re-runs can update a vector store instead of adding duplicates.
The SUMMARY record in the key-value store lists every URL with ok or failed, the reason for each failure, records saved, word counts and warnings.
Pricing
$0.003 per result. A result is one record in the dataset, so the count depends on the mode:
| Mode | You pay for | 12-page PDF costs |
|---|---|---|
documents | 1 result per document | $0.003 |
pages | 1 result per page with text | $0.036 |
chunks | 1 result per chunk | about $0.05 at 1,500 characters |
Failed URLs (404, wrong type, no text, too large) are not saved and not charged. Use Max results to cap the cost of a run. Apify platform usage for the run is billed by Apify as usual.
Limits
- No OCR. The Actor reads the text layer of a PDF. A scanned PDF without a text layer gives little or no text; the record then carries a warning, and a PDF with no text at all fails (free) with a clear message. Image files are not read.
- PDF tables are approximate, found from where the text sits on the page. Tables from XLSX, CSV, DOCX, PPTX and HTML are exact.
- Text from multi-column PDFs follows the order the PDF stores it in, which is usually the reading order but not always.
- DOCX, HTML and plain TXT have no fixed pages, so they come back as one page;
pageCountfor DOCX is the page count Word saved, when present. - Legacy
.doc,.xls,.ppt, OpenDocument files and ZIP archives are not supported; the reason is listed inSUMMARY. - Only public links. Files behind a login, a paywall or bot protection cannot be read. JavaScript-built web pages give only the HTML the server sends.
- Default size limit 50 MB per file (up to 500 MB with more memory).
FAQ
Is this legal? The Actor downloads only the URLs you give it, once each, the same way a browser does. It does not log in, solve captchas or get around paywalls or bot protection. Make sure you have the right to use the documents you process, as you would with any file you download.
Which output mode should I pick? documents to keep files whole with all metadata, pages to search or cite by page, chunks to fill a vector database for RAG.
How big should chunks be? 1,000 to 2,000 characters with 10 to 20 percent overlap works well for most embedding models. Chunks end at a paragraph, sentence or word, and the overlap starts at a sentence when one is close.
Why is a PDF's text empty or short? It is probably a scanned image without a text layer. This Actor does not run OCR.
Can I send hundreds of URLs? Yes. Documents are read a few at a time (set Documents at a time), each download is retried on network errors, 429 and 5xx answers, and one bad URL never stops the run.
Integrations
- Schedules: run daily or weekly on a list of report URLs.
- Webhooks: call your endpoint when a run finishes, then pull the dataset.
- Google Sheets, Make, Zapier, n8n: send records to a sheet or a workflow with Apify's ready-made integrations.
- API and SDKs: start runs and read results from Python, JavaScript or plain HTTP.
- MCP for AI agents: give an agent this Actor through Apify's MCP server so it can read any document link on its own.
- Vector databases: chunks mode output maps straight onto Pinecone, Qdrant, Weaviate or pgvector rows (
chunkId,text, plus the metadata fields).
More Actors by angadseth
- GeM Tenders Scraper (India Government e-Marketplace Bids): Get live GeM bids and reverse auctions from India's Government e-Marketplace
- India eProcurement Tenders Scraper (CPPP + 30 State Portals): Live government tenders from India's central eProcure (CPPP), central PSU, defence and 30+ state NIC eProcurement portals in one run.
- Apple App Store Scraper: apps, ratings and reviews: Get Apple App Store apps, ratings and customer reviews from many countries in one run
- ATS Jobs Feed: Greenhouse, Lever, Ashby, Workday + 5 more: Get every open job from a company's own careers board
- Bluesky Scraper: Posts, Profiles, Followers and Feeds: Scrape Bluesky without a login
- Website Contact Enricher: Emails, Phones, Socials per Domain: One clean lead row per company domain
- Website Screenshot & PDF: full page, mobile, element, WebP: Screenshots (PNG, JPEG, WebP) and PDFs of any list of URLs.
- Remote Jobs Aggregator: RemoteOK, Jobicy, Arbeitnow + 2 more: Remote jobs from RemoteOK, Jobicy, Arbeitnow, Working Nomads and 4 Day Week in one clean feed.