PDF Text Extractor: PDF to Markdown, Text, Pages & Metadata avatar

PDF Text Extractor: PDF to Markdown, Text, Pages & Metadata

Pricing

Pay per event

Go to Apify Store
PDF Text Extractor: PDF to Markdown, Text, Pages & Metadata

PDF Text Extractor: PDF to Markdown, Text, Pages & Metadata

Extract text from any PDF URL as clean Markdown or plain text: per-page text, RAG chunks, title, author, dates, outline, links and scanned-page detection. Give PDF links or web pages that link to PDFs. No API key. $1 per 1,000 PDFs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

A Q

A Q

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Turn any PDF URL into clean, structured text in seconds, with no API key and no setup. Give it direct PDF links, or a web page that links to PDFs, and get:

  • Full text as Markdown (headings rebuilt from font sizes, wrapped lines joined into paragraphs, hyphenated line breaks fixed, bullet lists) or plain text with the original line breaks, or both
  • One row per document, per page, or per chunk: chunk mode splits the text into RAG-ready pieces (size and overlap you choose) with page numbers, ready for a vector database, embeddings or an LLM
  • PDF metadata: title, author, subject, keywords, creator app, producer, creation and modification dates, PDF version, language, page count, file size, SHA-256, fillable form and tagged-PDF flags
  • Document outline (table of contents / bookmarks) and every hyperlink inside the PDF
  • Scanned-page detection: pages without a text layer are listed (noTextLayerPages) and likelyScanned flags image-only documents, so you know which files need OCR
  • PDF link discovery: put in a web page (an annual-report page, a government forms page, a documentation index) and every linked PDF is extracted
  • Page ranges (1-5, 8, 10-), max pages, password-protected PDFs, max file size, optional Apify Proxy

Built on Mozilla's pdf.js, the PDF engine inside Firefox, so it reads real-world PDFs from Word, LaTeX, InDesign, Google Docs, scanners and government form tools.

Pricing: $1 per 1,000 PDFs

This ActorTypical PDF text extractors on Apify
Per PDF$0.001 ($1 per 1,000)$0.0035 to $0.02 per PDF
Per page$0.00002 ($0.02 per 1,000 pages)up to $0.001 per page
Actor start$0.0005 per GB of memory (512 MB default)$0.005 per run
Failed URLs, web pages scanned for linksfreeoften charged

A 10-page report costs $0.0012. A 150-page manual costs $0.004. Markdown, plain text, chunks, metadata, outline and links are all included in the same price. Set Max PDFs in total to cap a run; your Apify maximum cost per run is always respected.

Use cases

  • AI, RAG and LLM pipelines: feed PDFs to ChatGPT, Claude, LangChain, LlamaIndex or a vector database as clean Markdown chunks with page numbers for citations.
  • Document search and archiving: index reports, manuals, papers and policies; keep the SHA-256 to detect changed files.
  • Financial and ESG research: pull the text of annual reports, filings and investor presentations straight from investor-relations pages.
  • Legal, tender and government documents: extract forms, notices, regulations and tender documents in bulk from public portals.
  • Academic research: get the text, outline and references links of arXiv and journal PDFs.
  • Monitoring: schedule a daily run on a page that publishes PDFs and get the new documents' text by webhook, Slack, Google Sheets, Make or Zapier.

Input examples

Two PDFs as Markdown, one row each:

{ "urls": ["https://www.irs.gov/pub/irs-pdf/fw9.pdf", "https://arxiv.org/pdf/1706.03762"] }

Every PDF linked on a web page:

{ "urls": ["https://www.irs.gov/forms-pubs/about-form-1040"], "maxPdfsPerPage": 25 }

RAG chunks of about 1,500 characters with 200 characters of overlap:

{ "urls": ["https://arxiv.org/pdf/1706.03762"], "outputMode": "chunks", "chunkSize": 1500, "chunkOverlap": 200 }

First 3 pages only, one row per page, Markdown and plain text:

{ "urls": ["https://www.irs.gov/pub/irs-pdf/p17.pdf"], "outputMode": "pages", "pages": "1-3", "format": "both" }

Output

Document row (text shortened):

{
"url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf", "status": "ok", "fileName": "fw9.pdf", "fileSizeBytes": 140815,
"sha256": "2d420cbb4123dcf1fb82595b2359cfbb5d81f00b9df9d359fcc7af361d093f53",
"numPages": 6, "pagesExtracted": 6, "title": "Form W-9 (Rev. March 2024)",
"subject": "Request for Taxpayer Identification Number and Certification", "author": "SE:W:CAR:MP",
"creator": "Designer 6.5", "producer": "Designer 6.5", "createdAt": "2024-03-06T13:18:13.000Z", "modifiedAt": "2024-03-06T13:18:13.000Z",
"pdfVersion": "1.7", "language": "en-US", "hasForm": true, "isTagged": false,
"wordCount": 6282, "charCount": 37924, "noTextLayerPages": [], "likelyScanned": false,
"outline": null, "links": [],
"markdown": "# Form W-9\n\n(Rev. March 2024)\n\n## Request for Taxpayer Identification Number and Certification\n\n...",
"extractedAt": "2026-11-03T05:19:49.029Z"
}

Page rows add page, wordCount, noTextLayer and that page's links. Chunk rows have chunkIndex, chunkCount, pageStart, pageEnd, text and charCount.

URLs that fail (404, not a PDF, too large, wrong password) get a free row with status: "failed" and an error, are listed in the FAILURES record of the key-value store, and the rest of the run continues. SUMMARY holds the run totals. Very large documents (over about 4 million characters) are saved to the key-value store and the row links them as markdownUrl / textUrl, because dataset rows are limited to 9 MB.

The dataset has three views: PDFs (overview table), Text and Metadata.

How it works and limits

  • Text comes from the PDF's own text layer. Scanned PDFs (images of text) have no text layer: those pages are listed in noTextLayerPages and are not OCRed. Most PDFs made by software (reports, forms, papers, invoices, manuals) have a text layer.
  • Markdown structure is rebuilt from layout (font sizes, line spacing, bullets). Tables come out as text lines, and multi-column layouts follow the PDF's reading order.
  • Downloads use a clear user agent, three PDFs at a time, and retries with back-off. Only use it on documents you are allowed to access.
  • Default memory is 512 MB, enough for PDFs up to about 100 MB. Raise memory for very large files.

FAQ

Do I need an API key or account anywhere? No. Only public URLs are fetched.

How fast is it? Small PDFs take well under a second each; a 140-page publication takes a few seconds at 512 MB.

Can I extract password-protected PDFs? Yes, if you know the password: set PDF password.

Can I use it from AI agents? Yes, through the Apify API, the Apify MCP server, or the Python and JavaScript clients:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("best_apis/pdf-text-extractor").call(run_input={"urls": ["https://arxiv.org/pdf/1706.03762"], "outputMode": "chunks"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["pageStart"], item["text"][:80])
curl -X POST "https://api.apify.com/v2/acts/best_apis~pdf-text-extractor/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" -d '{"urls":["https://www.irs.gov/pub/irs-pdf/fw9.pdf"]}'

Is my data stored? Results stay in your own Apify storage. The Actor keeps nothing.