PDF to Markdown API in 2026
One price per document, $0.0008.
Most PDF to Markdown APIs bill by the page or by the call. Firecrawl takes 1 credit per PDF page, pdfRest bills each call over its plan at $0.06 to $0.115, and the Apify actor adds $0.00012 for every page.
SpecStream's Extract API reads a PDF, Word, Excel or EPUB file at its URL and returns its text, in Markdown by default, at $0.0008 a document ($0.80 per 1,000). One call takes 20 URLs, and a file with no text is not charged.
The Extract API scores 0.908 F1 on WCXB, on the benchmarks page. The same key searches the web, so an agent finds a PDF with filetype:pdf and reads it in the next call.
New accounts get $10 of credit, no card. It covers 12,500 documents.
PDF to Markdown APIs side by side
| SpecStream | Firecrawl /parse | pdfRest | Apify PDF to Markdown actor | |
|---|---|---|---|---|
| Price | $0.0008 a document, $0.80 per 1,000. A file that gives no text costs nothing | 1 credit per PDF page, scanned pages included. Standard is $99 a month for 100,000 credits | Per call. Premium is $9.99 a month for 600 calls, then $0.115 a call. Pro is $99.99 for 5,000, then $0.06 | $0.0011 a document plus $0.00012 a page |
| 1,000 PDFs of 20 pages | $0.80 | 20,000 credits, inside the $99 Standard plan | $55.99 on Premium: $9.99 plus 400 calls at $0.115 | $3.50: $1.10 in document fees and $2.40 in page fees |
| What you send | Up to 20 http or https URLs in one call, up to 20 MB a call | A file upload, up to 50 MB. For a public document URL, Firecrawl points you to /scrape | A file upload as file=@/path/to/your_document.pdf | PDF URLs or an uploaded file, up to 500 pages per document |
| Files it reads | PDF, Word, Excel, EPUB, images and web pages, in the same call | PDF, DOCX, XLSX and more | PDF only | |
| What comes back | text in Markdown or plain text, with title, the published and modified dates and every email address the file carries | Markdown, per-page content, typed layout blocks or structured JSON | A Markdown file | Markdown, plain text or JSON chunks with page numbers |
| Free to start | $10 of credit, no card: 12,500 documents | 1,000 credits every month | 100 calls a month, with watermarked output | Pay per event, no monthly fee |
Why read PDFs through SpecStream
One price per document
A PDF read by the Extract API is one page read: $0.0008, the same as a web page. Firecrawl and the Apify actor count every page of the file, and pdfRest counts every call against a monthly plan. A file that gives no text comes back as empty, and a site that refuses the read comes back as blocked. Neither is charged.
Twenty files in one call
Send 1 to 20 URLs in urls, PDF, Word, Excel, EPUB, images and web pages mixed. Each comes back in data.results in the order sent, with its status, text, title and dates. The same URL twice is read once.
import os
import requests
reply = requests.post(
"https://api.specstream.ai/v1/extract",
headers={"Authorization": f"Bearer {os.environ['SPECSTREAM_API_KEY']}"},
json={"urls": ["https://arxiv.org/pdf/1706.03762"], "format": "markdown"},
timeout=60,
).json()
for doc in reply["data"]["results"]:
if doc["status"] == "ok":
print(doc["title"], doc["text"][:500])
print(reply["data"]["price_usd"])Find the PDF and read it on one key
The Search API honors filetype:pdf, site: and after: in the query, and marks each PDF result with file_type. A fast search costs $1 per 1,000. Pass the PDF URLs to the Extract API and the agent has the text two calls later.
import os
import requests
H = {"Authorization": f"Bearer {os.environ['SPECSTREAM_API_KEY']}"}
found = requests.get(
"https://api.specstream.ai/v1/web-search",
params={"q": "EU AI Act guidelines filetype:pdf", "speed": "fast"},
headers=H,
).json()
pdfs = [s["url"] for s in found["data"]["sources"] if s.get("file_type") == "pdf"]
read = requests.post(
"https://api.specstream.ai/v1/extract", json={"urls": pdfs[:20]}, headers=H, timeout=60
).json()Files behind a refusal
A site that refuses a plain read is tried again as a browser would ask for it, then in a real browser, then from the site's own feed, then from its newest public archive capture. read_from says which one gave the text, and captured_at dates an archive copy.
The top published score
The SpecStream Extract API scores 0.908 F1 on WCXB. The Search API scores 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks. Every score and its method is on the benchmarks page.
Rows from the whole web on the same key
Deep Search returns every match on the live web as structured rows at 5¢, 15¢ or $1 a row, with the source URL and read time on every value and the most a run can cost approved before it starts.
Other PDF to Markdown APIs
Firecrawl /parse
Takes an uploaded PDF, DOCX or XLSX file of up to 50 MB and returns Markdown, per-page content, layout blocks or JSON. PDFs cost 1 credit per page, and the Standard plan is $99 a month for 100,000 credits. SpecStream reads the file at its URL for $0.0008, and answers Firecrawl's own /v2/scrape call: see Firecrawl migration.
pdfRest
A REST tool that converts an uploaded PDF into a Markdown file. Plans run from $9.99 a month for 600 calls to $99.99 for 5,000, with overage at $0.115 or $0.06 a call; the free plan gives 100 calls a month with watermarked output. SpecStream bills $0.0008 a document with no plan.
Adobe PDF Services
Adobe's PDF Extract API has a PDF to Markdown job in its SDKs. The free tier gives 500 Document Transactions a month, and paid plans go through Adobe's sales team. SpecStream publishes one price, $0.80 per 1,000 documents, from the first call.
Apify PDF to Markdown actor
A community actor that turns PDF URLs or uploads into Markdown, text or JSON chunks, at $0.0011 a document plus $0.00012 a page, up to 500 pages a document. It reads PDFs only. SpecStream reads PDF, Word, Excel and EPUB files and web pages in one call at $0.0008 each.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to convert PDFs with SpecStream
1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 12,500 documents.
2. Send the PDF URLs to POST https://api.specstream.ai/v1/extract with the key as a Bearer token. format is markdown by default, or text.
const reply = await fetch("https://api.specstream.ai/v1/extract", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SPECSTREAM_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ urls: ["https://arxiv.org/pdf/1706.03762"], format: "markdown" }),
}).then((r) => r.json());
for (const doc of reply.data.results) {
if (doc.status === "ok") console.log(doc.title, doc.text.slice(0, 500));
}3. Already scraping PDF URLs with Firecrawl? Set the base address to https://api.specstream.ai/firecrawl and keep POST /v2/scrape with {"url": "<the PDF>"}. The reply keeps Firecrawl's data.markdown and data.metadata, and each scrape is one Extract API page.
4. For an MCP client, add the server https://api.specstream.ai/mcp with OAuth or the API key. The read_pages tool takes {"urls": ["<url>"]} and bills each document as one page read.
Frequently asked questions
Something we didn't answer? Talk to a human
What is the best PDF to Markdown API?
How much does a PDF to Markdown API cost?
Can I send a file from my disk?
http or https address, so a signed link from your storage works, up to 20 MB a call.Does it read Word and Excel files too?
Is a file with no text charged?
ok is charged. empty, blocked, not_found, unsupported and failed cost nothing.Can my agent convert PDFs through MCP?
https://api.specstream.ai/mcp with OAuth or an API key. The read_pages tool reads up to 20 URLs a call at $0.0008 each.Is there an open source PDF to Markdown tool?
Sources
SpecStream wrote this page. Each figure on another product comes from that product's own page.
- Firecrawl, best document parsing APIsfirecrawl.dev/blog/best-document-parsing-apis, read Nov 12, 2026
- Firecrawl docs, Parsedocs.firecrawl.dev/features/parse, read Nov 12, 2026
- Firecrawl pricingfirecrawl.dev/pricing, read Nov 12, 2026
- pdfRest PDF to Markdownpdfrest.com/apitools/pdf-to-markdown/, read Nov 12, 2026
- pdfRest PDF to Markdown tutorialpdfrest.com/learning/tutorials/how-to-programmatically-convert-pdf-to-markdown-for-ai-and-data-analysis-guide/, read Nov 12, 2026
- pdfRest pricingpdfrest.com/pricing/, read Nov 12, 2026
- Apify, PDF to Markdown actorapify.com/jcwilk/pdf-to-markdown, read Nov 12, 2026
- Adobe Acrobat Services pricingdeveloper.adobe.com/document-services/pricing/main/, read Nov 12, 2026
- Adobe PDF to Markdown API quickstartdeveloper.adobe.com/document-services/docs/overview/pdf-extract-api/quickstarts/pdf-to-markdown/python/, read Nov 12, 2026
- MarkItDown READMEgithub.com/microsoft/markitdown, read Nov 12, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 12, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 12, 2026




