Document to Markdown: PDF, DOCX, XLSX for LLMs & RAG
Pricing
from $1.00 / 1,000 pages
Document to Markdown: PDF, DOCX, XLSX for LLMs & RAG
Tested Oct 25, 2026: 99.9% text fidelity on our test PDFs, 99.3% reading order on 2-column PDFs (MarkItDown 84%), PDF tables as real grids (cell placement 0.70, same as Docling). PDF, DOCX, XLSX, HTML to markdown with token counts. $0.001/page, failures free.
Pricing
from $1.00 / 1,000 pages
Rating
0.0
(0)
Developer
Catalyst Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
15 days ago
Last modified
Categories
Features
Share
Document to Markdown: PDF, DOCX, XLSX, CSV, HTML to LLM-ready markdown
Why agents choose this
Tested Oct 25, 2026: 99.9% text fidelity on our test PDFs (synthetic, 1-column) and 99.3% correct reading order on 2-column PDFs (MarkItDown 84%), at 9 ms per PDF vs 67 ms MarkItDown and 846 ms Docling. PDF tables now come out as GFM grids via our PDF Tables engine: 0.70 of 2,751 cells in the right place (Docling 0.70, MarkItDown 0.25). Table-heavy PDFs are slower: 100 real pages in 22.8 s with tables, 2.2 s with pdfTables: off.
| Test (Oct 25, 2026, same files, same box) | This Actor | MarkItDown | Docling | Marker |
|---|---|---|---|---|
| 1-column PDFs, text F1 (20 files) | 0.999 | - | - | - |
| 2-column PDFs, reading order recall (10 files) | 0.993 | 0.841 | 0.988 | 0.997 |
| DOCX text F1 (15 files) | 1.000 | - | - | - |
| XLSX cell text F1 (5 files) | 0.995 | 0.912 | 0.999 | - |
| PDF tables, cells in the right grid (2,751 cells) | 0.70 (was 0.0, flat text) | 0.25 | 0.70 | 0.22 |
| PDF tables, cell text present | 0.79 (was 0.82) | - | 0.95 | - |
| Median time per synthetic PDF | 13 ms (was 9 ms) | 67 ms | 846 ms | 1,616 ms |
| 100 real PDF pages (Fed H.8, IRS Pub 15-T, Census retail) | 22.8 s with tables, 2.2 s with pdfTables: off | 16.8 s | 178 s for the 22-page Fed H.8 alone | - |
| Price per 100 pages | $0.10 + $0.001 start | self-host | self-host | self-host |
- $0.001 per page. Failed, scanned-only (
NO_TEXT_LAYER) and password-protected files are never charged. - Every row says what happened:
outcome(ok,no_content,blocked,not_found,encrypted,too_large, ...) plusretryable. - Exact token counts:
tokensper document, and chunks carrytokens,charStart/charEnd(exact slice ofmarkdown),headingPathand page. - PDF tables become grids: pages that look tabular run through the PDF Tables engine;
tableCountsays how many were found (pdfTables: offskips it). Scanned tables still need OCR (NO_TEXT_LAYER). - DOCX and XLSX tables survive as GFM tables, and PDFs get
<!-- page N -->markers so you can cite pages. - File type is detected from the bytes, not the URL.
Cost per call
| Event | Price | When |
|---|---|---|
page | $0.001 | per PDF page converted; other formats count 1 page per 3,000 characters returned |
actor-start | $0.001 | once per batch run (not charged in Standby/HTTP mode) |
Examples: a 15-page PDF = $0.016; a short DOCX = $0.002. Failed documents are never charged, and with maxChars you only pay for what is returned. Use maxTotalChargeUsd to cap a run.
Input (only urls or files is required)
{ "urls": ["https://www.irs.gov/pub/irs-pdf/fw9.pdf"] }
{ "urls": ["https://arxiv.org/pdf/1706.03762"], "pages": "1-5", "chunkSize": 1500, "chunkOverlap": 150 }
| Field | Default | Notes |
|---|---|---|
urls | – | Up to 100 links. Type detected from file bytes. |
files | – | [{"name":"a.docx","base64":"..."}] for agents that hold the bytes (input limit ~9 MB). |
maxChars | 50000 | Token budget per document; 0 = unlimited. |
pages | all | PDF range: 1-10, 5, 20-. |
maxPages | 200 | PDF safety cap. |
chunkSize | 0 (off) | Chunk size in characters for RAG. |
chunkOverlap | 200 | Overlap between chunks. |
includeFullMarkdown | false | Also return markdown when chunking. |
pageMarkers | true | <!-- page N --> before each PDF page. |
keepLinks | false | Keep hyperlinks. |
maxRowsPerSheet | 500 | Spreadsheet rows per sheet. |
Output
{"status": "ok", "url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf", "fileName": "fw9.pdf","docType": "pdf", "title": "Form W-9 (Rev. March 2024)", "pageCount": 6, "pagesProcessed": 6, "billedPages": 6,"markdown": "<!-- page 1 -->\n\n#### Request for Taxpayer Identification Number ...","chars": 21000, "totalChars": 21000, "truncated": false,"chunks": null, "chunkCount": 0, "fetchedAt": "2026-10-25T05:00:00.000Z", "ms": 900,"errorCode": null, "errorMessage": null}
With chunking, chunks is [{"index":0,"heading":"Revenue","page":3,"text":"...","chars":1480}].
Error codes: INVALID_URL, INVALID_FILE, DNS_NOT_FOUND, TIMEOUT, HTTP_4xx/HTTP_5xx, TOO_LARGE (>50 MB), NO_TEXT_LAYER, ENCRYPTED, UNSUPPORTED_TYPE, EMPTY_CONTENT, PARSE_FAILED, SPENDING_LIMIT.
Formats and quality notes
- DOCX: headings, lists, bold/italic and tables become markdown (tables as GFM tables).
- XLSX/XLS/CSV: each sheet becomes a markdown table (first row as header).
- HTML/TXT/MD: main content extracted / passed through.
- PDF: text per page in reading order; headings guessed from font size. PDF tables come out as text lines, not markdown tables (honest limitation).
Fast calls: Standby (HTTP) mode
$curl "https://catalyst-labs--document-to-markdown.apify.actor/?urls=https://www.irs.gov/pub/irs-pdf/fw9.pdf&maxChars=4000&token=$APIFY_TOKEN"
Use from MCP
https://mcp.apify.com/?tools=catalyst-labs/document-to-markdown → tool catalyst-labs--document-to-markdown.
Deterministic: the same file and options give the same output. Files are processed in memory and not stored beyond the run's dataset.
Made by Catalyst Labs. Also see: Agent Web Reader, Google Trends API, YouTube Transcript API.