PDF Text Extractor: PDF to Markdown, Text, Pages & Metadata
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
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) andlikelyScannedflags 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 Actor | Typical 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 links | free | often 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
noTextLayerPagesand 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 ApifyClientclient = 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.
Related Actors
- Sitemap URL Extractor: find every PDF URL a website lists in its sitemaps.
- Broken Link Checker: find dead links, including links to PDFs.
- SEC EDGAR Scraper: company filings and financial data.
- Federal Register API: US rules and notices, with their PDF links.