PDF & Document Text Extractor: PDF, DOCX, PPTX, XLSX to Text avatar

PDF & Document Text Extractor: PDF, DOCX, PPTX, XLSX to Text

Pricing

$3.00 / 1,000 results

Go to Apify Store
PDF & Document Text Extractor: PDF, DOCX, PPTX, XLSX to Text

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

Angad Jangir

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Security

Limited permissions

Share

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

FormatsPDF, 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 modesdocuments: 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 textText in reading order, running headers, footers and page numbers removed, white space tidied, citations and links kept in place.
MetadataTitle, author, creator app, producer, subject, keywords, last modified by, created and modified dates (ISO 8601), PDF version, form and signature flags, encryption.
LanguageDetected language (ISO 639-1, e.g. en) plus the language the file declares, if any.
CountsWord count and character count per document, per page and per chunk.
LinksEvery link in the file: PDF link annotations, Word and PowerPoint hyperlinks, HTML anchors (made absolute) and URLs written in the text.
TablesRows of cells. Exact for XLSX, CSV, DOCX, PPTX and HTML; approximate for PDF (found from the layout, marked with tablesNote).
Share linksGoogle Drive and Dropbox share links are turned into direct downloads.
Protected PDFsAdd the password in the input.
Fair billingOnly 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:

ModeYou pay for12-page PDF costs
documents1 result per document$0.003
pages1 result per page with text$0.036
chunks1 result per chunkabout $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; pageCount for 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 in SUMMARY.
  • 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