Built for the PDFs that break everything else
Most PDF APIs assume you will hand them a direct link to a file. Real-world PDFs do not work that way. Download triggers, redirect chains, JavaScript-only links - PDFPipe handles them with one API call and gives you the text back.
Your PDF URL triggers a download
You have a URL that should point to a PDF, but when your code sends a GET request it receives a Content-Disposition: attachment header instead of the file content. Your HTTP client saves an empty or corrupted file, your parser throws an error, and your automation breaks.
With other tools
Most PDF APIs send a simple HTTP request to the URL. When the server responds with an attachment header, they get nothing usable. Some return a cryptic error, others silently fail. You end up writing a Puppeteer script to download the file first, then sending the local file to the API.
With PDFPipe
PDFPipe auto-detects attachment PDFs by inspecting the response headers. When it finds one, it spins up a headless Chromium browser that intercepts the download, captures the file, and processes it - all within the same API call. You send a URL, you get structured data back.
The PDF is behind redirects or a JavaScript download
The PDF URL goes through two or three redirects before reaching the actual file. Or the page loads, runs some JavaScript, and only then triggers the download. Or the link carries a one-time token that a plain fetch mangles. Your code follows the first hop and gets an HTML page.
With other tools
Standard PDF tools follow redirects up to a point, but they cannot execute JavaScript or handle download events. You end up building custom download logic for each source - all before you even get to the PDF parsing part.
With PDFPipe
PDFPipe's headless browser follows the full redirect chain, executes JavaScript, and captures the final PDF - regardless of how many hops it takes. Links with their access token in the URL work as they would in a real browser. What it does not do: send cookies or credentials, so PDFs that require you to be logged in are out of scope.
You are automating and do not control the source
You are building a pipeline that processes PDFs from multiple sources - government portals, supplier invoices, SaaS exports, customer uploads. Each source serves PDFs differently. Some are inline, some trigger downloads, some redirect, some require JavaScript to load.
With other tools
With other tools, you need to detect the PDF type yourself and write different handling code for each case. Your pipeline becomes a mess of conditionals, browser automation scripts, and retry logic. Every new source is a new edge case to handle.
With PDFPipe
PDFPipe handles the detection automatically, on every tier. Send any public PDF URL and we figure out the right approach - a plain fetch for simple files, the headless browser for everything else. Your pipeline stays clean: one API call per document, same interface every time, and the same output shape: per-page text plus the PDF's metadata.
Same API call, every time
Whether the URL points to an inline PDF, triggers a download, or redirects three times - your code does not change. One POST request with the URL and format you want. PDFPipe figures out the rest and returns the PDF's text layer page by page (no OCR for scanned PDFs, no table detection).
- Auto-detects inline vs. attachment PDFs on every tier
- Follows redirect chains and JavaScript navigation
- 10 output formats: JSON, text, markdown, XML, CSV, and more
- Synchronous or async with webhooks, on every tier
// The URL triggers a download and redirects twice.
// PDFPipe handles it the same as any other PDF.
const response = await fetch("https://api.pdfpipe.dev/v1/convert", {
method: "POST",
headers: {
"Authorization": "Bearer pk_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://portal.example.gov/reports/download?id=2025-Q1",
format: "json",
returnMethod: "inline",
}),
});
const data = await response.json();
// 200: data.content is the JSON document as a string.
// 202 (attachment path): poll data.pollUrl until complete.No-code? The problem is even worse.
If you are using Power Automate, Zapier, or Make, you have zero ability to write a headless browser workaround when a PDF URL triggers a download. PDFPipe turns it into a single HTTP action - no custom code required.
Try it on your hardest PDF
300 free requests per month. No credit card required.