That PDF link your code can't open? We handle it.
Download links, redirect chains, JavaScript-triggered downloads - PDFs that break every other tool. Send us the URL, get the text back as JSON, Markdown, CSV, or 7 other formats. One API call.
Request
$ curl -X POST https://api.pdfpipe.dev/v1/convert \
-H "Authorization: Bearer pk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/report.pdf",
"format": "json",
"returnMethod": "inline"
}'Response
{
"requestId": "req_a1b2c3...",
"status": "complete",
"format": "json",
"pagesProcessed": 12,
"creditsUsed": 1,
"contentType": "application/json",
"content": "{\"pages\":[{\"pageNumber\":1,\"text\":\"...\"}],...}"
}10
Output formats
URL in
No file upload - just a link
Free
300 requests/month, no card
The PDF Problem, Solved
Other APIs choke on real-world PDF links. PDFPipe was built for the fetching part, then gives you the text.
The problem
- The PDF link triggers a download instead of opening - your code never gets the file
- The URL redirects three times, carries a one-time token, or only works after JavaScript runs
- You end up running your own headless browser just to fetch a file
- Every source serves PDFs differently, and your pipeline breaks on each new one
The PDFPipe solution
- Send any public PDF URL - we detect whether it's inline or a download and handle both
- Redirect chains, token-in-URL links, JavaScript-triggered downloads - our headless Chromium follows them
- Per-page text plus the PDF's own metadata, in a consistent shape no matter the source
- 10 output formats: JSON, text, Markdown, XML, CSV, Base64, binary, PNG, JPG, WebP
- Dashboard AI Help on paid plans - get Claude-powered answers while you integrate
Three Steps. Zero Dependencies.
Nothing to install. Just HTTP. (A Node.js SDK and an MCP server are there if you want them.)
Send a URL
POST any publicly reachable PDF URL to our API. We accept inline and attachment PDFs - no pre-processing needed.
fetch("https://api.pdfpipe.dev/v1/convert", {
method: "POST",
headers: {
"Authorization": "Bearer pk_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
url: "https://example.com/report.pdf",
format: "json",
returnMethod: "inline"
})
})We Fetch and Parse It
PDFPipe auto-detects the PDF type on every tier. Inline PDFs are fetched directly. Attachment PDFs are captured via headless Chromium - redirect chains, token-in-URL links, and JavaScript triggers handled automatically. Then we extract the text layer page by page.
Auto-detect & process
Inline → pdf-parse · Attachment → Chromium
Get the Text Back
With returnMethod: "inline", the payload is in the response (parse content). Default returnMethod "file" returns a presigned resultUrl instead. JSON gives you per-page text, the PDF's metadata, and the page count.
{
"pages": [
{ "pageNumber": 1, "text": "Annual Report 2025..." },
{ "pageNumber": 2, "text": "..." }
],
"metadata": { "Title": "Annual Report 2025", "Author": "Acme" },
"totalPages": 12,
"extractedAt": "2026-08-23T10:00:00.000Z"
}Built for Everyone
Whether you prefer a visual interface or raw API calls, PDFPipe fits your workflow.
No Code
Attachment PDFs are impossible in no-code tools without writing custom code. PDFPipe handles them with a single HTTP action - in Power Automate, Zapier, Make, or n8n.
Visual converter preview
Full Code
A plain REST API - call it from any language. One endpoint, any format. A TypeScript/Node.js SDK (pdfpipe-sdk) and an MCP server for AI assistants are available on npm.
curl -X POST https://api.pdfpipe.dev/v1/convert \
-H "Authorization: Bearer pk_..." \
-H "Content-Type: application/json" \
-d '{"url": "https://...", "format": "json", "returnMethod": "inline"}'10 Formats, One API
Extraction, encoded, or image - get exactly the output your pipeline needs. Extraction formats work on digital-born PDFs with a text layer; scanned PDFs are not supported (no OCR).
JSON
Per-page text, PDF metadata, and page count
Text
Plain extracted string for search indexing
Markdown
Title heading plus a section per page, for LLM pipelines
XML
Metadata and page elements for XML-native systems
CSV
One row per page: page_number, text_content
Base64
The original PDF bytes, base64-encoded
Binary
The original PDF bytes for file pipelines
PNG
Lossless render of the first page
JPG
Compressed render of the first page
WebP
First-page render, smallest file size
Frequently Asked Questions
Everything you need to know about PDFPipe.
What is PDFPipe?
PDFPipe is a cloud API that turns a public PDF URL into text you can use. Send us a URL, choose your output format, and get the PDF's text back page by page - whether the PDF is served inline or triggers an auto-download.
How does auto-detection work?
When you send a URL, PDFPipe issues a HEAD request and inspects the Content-Disposition and Content-Type headers. If the PDF is inline, we fetch and parse it directly. If it's an attachment (auto-download) or the URL serves an HTML page, we use a headless Chromium browser to capture the file - following redirects and JavaScript-triggered downloads. Auto-detection is on for every tier; you can also force a path with the type parameter.
What formats are supported?
PDFPipe supports 10 output formats across three categories: Extraction (JSON, Text, Markdown, XML, CSV), Encoded (Base64, Binary), and Image (PNG, JPG, WebP). All 10 formats are available on every tier, including Free. Extraction formats contain the PDF's text layer per page plus its metadata - there is no table detection, OCR, or layout analysis.
Does it work on scanned PDFs?
No. PDFPipe extracts the text layer that digital-born PDFs already contain. Scanned or image-only PDFs have no text layer, so extraction formats return empty text (the API reports PDF_NO_TEXT_LAYER where it can detect this). Image formats (PNG, JPG, WebP) still render the first page.
Can results come back in the HTTP response instead of a download URL?
Yes. Set returnMethod to "inline" on POST /v1/convert to receive the converted data in the response body (the content field), within size limits; otherwise the API sets returnMethodFallback and a presigned resultUrl. The default is "file". You can also set timeout (1-60 seconds) to cap how long the API waits synchronously before async processing, and webhook { url, optional secret } for HTTPS delivery when a job finishes asynchronously.
Can it handle PDFs behind a login or a password?
No. PDFPipe does not pass cookies, headers, or credentials to the source, so PDFs that require a login are not supported - the request fails with a code like URL_UNAUTHORIZED or REDIRECT_TO_LOGIN. Links that carry their own access token in the URL, and links that redirect several times before serving the file, work fine. PDFs encrypted with a document-level password return PDF_PASSWORD_PROTECTED. Hosts behind aggressive bot protection (for example Cloudflare or Akamai challenges) will often fail too.
Is there a free tier?
Yes! The free tier includes 300 requests per month with all 10 output formats. Of those 300 requests, up to 25 can be attachment PDFs. Up to 5MB file size, no credit card required.
How does pricing work?
We offer four tiers - Free ($0), Starter ($9/month), Pro ($29/month), and Business ($79/month) - with pricing in USD, GBP, and EUR. All requests (inline and attachment PDFs) count toward your monthly quota: 300, 1,000, 5,000, and 20,000 respectively. Paid tiers have no extra cap on attachment PDFs, so you can use any of your monthly requests on them. Starter and Pro offer annual billing at 10x the monthly price (2 months free), and the Business tier supports overage billing for high-volume use. Visit our pricing page for full details.