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.

Terminal

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.)

1

Send a URL

POST any publicly reachable PDF URL to our API. We accept inline and attachment PDFs - no pre-processing needed.

JavaScript
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"
  })
})
2

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

3

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.

JSON output (the content field, parsed)
{
  "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
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).

{ }Extraction

JSON

Per-page text, PDF metadata, and page count

AaExtraction

Text

Plain extracted string for search indexing

MDExtraction

Markdown

Title heading plus a section per page, for LLM pipelines

</>Extraction

XML

Metadata and page elements for XML-native systems

,.,Extraction

CSV

One row per page: page_number, text_content

B64Encoded

Base64

The original PDF bytes, base64-encoded

01Encoded

Binary

The original PDF bytes for file pipelines

PNGImage

PNG

Lossless render of the first page

JPGImage

JPG

Compressed render of the first page

WPImage

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.

Ready to extract?

Start free - no credit card required.