PDF to Text & Markdown Converter (Metadata, Tables)
Pricing
from $1.50 / 1,000 pdf converteds
PDF to Text & Markdown Converter (Metadata, Tables)
Convert PDF URLs to clean Markdown or plain text for LLMs, RAG and search: headings, paragraphs, lists, best-effort tables, title/author/date metadata, page count and word count. Fast, no OCR. Pay only for PDFs with extracted text.
Pricing
from $1.50 / 1,000 pdf converteds
Rating
0.0
(0)
Developer
Mogul Tools
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
PDF to Text & Markdown Converter (Metadata, Headings, Tables)
Give it PDF URLs and get clean Markdown or plain text for each document, ready for LLMs, RAG pipelines, search indexes and data extraction. Headings are detected from font sizes, and paragraphs are rebuilt across line breaks with de-hyphenation. Bulleted and numbered lists and simple tables are kept, and running headers, footers and page numbers are removed. Every row also includes the PDF metadata (title, author, subject, keywords, creator, producer, creation and modification dates, PDF version, language), plus page count, word count, character count and file size.
It's fast because it reads the PDF's text layer directly, with no browser and no OCR. In our tests a 15-page arXiv paper took under 1 second, and a 142-page IRS publication about 3 seconds.
You only pay for PDFs where text was extracted. 404s, timeouts, non-PDF responses, password-protected, corrupt or oversized files, and scanned PDFs without a text layer are all free.
What you can use it for
- LLM / RAG ingestion: turn research papers, reports, manuals and filings into Markdown chunks with headings intact
- Search and indexing: full text plus title, author and dates for every PDF in a list
- Document monitoring: re-run on government forms, price lists or policy PDFs and diff the text
- Data extraction: pull text from invoices, statements or forms for downstream parsing
- Crawling PDF libraries: point it at an HTML page and it finds and converts the linked PDFs (
findPdfLinks) - Feeding documents to AI agents (works via the Apify MCP server)
Input example
{"startUrls": [{ "url": "https://arxiv.org/pdf/1706.03762" },{ "url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf" }],"outputFormat": "markdown","pageRange": "","maxPagesPerDoc": 0,"includePages": false,"removeHeadersFooters": true,"findPdfLinks": false,"maxChargedDocuments": 0,"maxFileSizeMb": 100}
outputFormat:markdown,textorbothpageRange: e.g.1-5,8,10-(empty means all pages).maxPagesPerDoccaps pages per document (0 means no limit)includePages: adds apagesarray with per-page text/Markdown, useful for citations and page-level chunkingfindPdfLinks: for HTML pages in your input, finds linked/embedded PDFs (<a>,<iframe>,<embed>,<object>) and converts them (up tomaxPdfLinksPerPageper page)maxChargedDocuments: stop after this many charged documents (0 means no limit)
Output example (one row per document; text shortened)
{"url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf","finalUrl": "https://www.irs.gov/pub/irs-pdf/fw9.pdf","httpStatus": 200,"contentType": "application/pdf","fileSizeBytes": 140815,"status": "OK","title": "Form W-9 (Rev. March 2024)","author": "SE:W:CAR:MP","subject": "Request for Taxpayer Identification Number and Certification","keywords": "Fillable","creator": "Designer 6.5","producer": "Designer 6.5","creationDate": "2024-03-06T13:18:13.000Z","modificationDate": "2024-03-06T13:18:13.000Z","pdfVersion": "1.7","language": "en-US","inferredTitle": "Form W-9(Rev. March 2024)","pageCount": 6,"pagesExtracted": 6,"wordCount": 6348,"charCount": 37776,"markdown": "# Form W-9(Rev. March 2024)\n\n## Request for Taxpayer Identification Number and Certification\n\nDepartment of the Treasury Internal Revenue Service Go to www.irs.gov/FormW9 for instructions and the latest information.\n\nGive form to the requester. Do not send to the IRS.…","textTruncated": false,"fullTextKey": null,"charged": true,"error": null,"durationMs": 927,"scrapedAt": "2026-10-23T13:16:57.305Z"}
In Markdown, pages are separated by ---. inferredTitle is the largest text on the first page, which is handy when the metadata title is missing. Very long documents (over 4 million characters) are stored in full in the key-value store (fullTextKey), and the row text is marked textTruncated: true.
Statuses
| status | Charged | Meaning |
|---|---|---|
OK | yes | Text extracted |
NO_TEXT_LAYER | no | Scanned/image-only PDF (OCR isn't included) |
ENCRYPTED | no | Password-protected PDF |
CORRUPT / PARSE_ERROR | no | Broken or unreadable PDF |
NOT_PDF | no | The URL returned HTML, JSON or another non-PDF file |
TOO_LARGE | no | Bigger than maxFileSizeMb |
HTTP_404 (and other HTTP codes), TIMEOUT, DNS_ERROR, INVALID_URL… | no | Download failed |
HTML_PAGE_SCANNED / NO_PDF_LINKS | no | An HTML page scanned with findPdfLinks |
The RUN_SUMMARY record in the key-value store has the run totals.
Pricing (pay per event)
You pay per PDF converted: the file downloaded, parsed and returned text. The price is per document, not per page.
| Apify plan | Price per 1,000 PDFs |
|---|---|
| Free | $3.00 |
| Bronze (Starter) | $2.50 |
| Silver (Scale) | $2.00 |
| Gold (Business) | $1.50 |
Failed, scanned, encrypted, oversized and non-PDF inputs are never charged. Platform usage (compute, storage, data transfer) is included, so you don't pay it separately. Each run also has Apify's standard start fee of $0.00005 per GB of memory. Optional Apify datacenter proxy (or your own proxy URLs) is included in the price; residential proxy isn't supported. Set Max total charge or maxChargedDocuments to cap your spend. The run stops cleanly when the cap is reached, without storing unpaid results.
Features
- Headings (up to 4 levels) from font-size analysis, paragraphs, bulleted and numbered lists, and best-effort tables
- Multi-column layouts read in column order; rotated margin text is kept out of headings
- Running headers, footers and page numbers removed (can be turned off)
- De-hyphenation across line breaks, and CJK-aware spacing and word counts (Chinese, Japanese, Korean)
- Full PDF metadata with ISO dates
- Page ranges, per-page output and a page cap per document
- Follows redirects, retries 429/5xx, and runs documents in parallel with a per-host delay
- Refuses private/internal addresses
Limitations
- No OCR. Scanned PDFs return
NO_TEXT_LAYERfor free. Use an OCR tool for those. - Tables are best-effort. Aligned columns become Markdown tables, while complex or ruled tables may come out as tab-separated lines or paragraphs.
- Layout reconstruction is heuristic. Unusual layouts (posters, slides, magazine spreads) may mix reading order.
- Only direct PDF URLs and static HTML pages (for
findPdfLinks) are supported. Pages that need a login or JavaScript to reach the PDF aren't. - Default file size limit is 100 MB (up to 500 MB). Raise the run memory for very large PDFs.
License
Built on Mozilla's pdf.js (Apache-2.0). This Actor's code is licensed Apache-2.0.
Responsible use
Only convert documents you are allowed to access and use. Each document takes one download request (plus redirects), with a per-host delay between requests.