Extract Data from Invoice Download Links
Supplier invoices, SaaS export URLs, accounts payable downloads - invoice PDFs almost always trigger a file download instead of displaying in the browser. PDFPipe handles them automatically.
Why invoice PDFs are hard to automate
Invoice URLs from billing systems, supplier portals, and SaaS platforms rarely serve the PDF directly. A link likebilling.supplier.com/invoices/download/INV-2025-0847typically triggers a file download, often after a redirect. Your HTTP client receives an attachment header instead of PDF content.
When you are processing invoices from multiple suppliers, each one serves PDFs differently. Some use direct links, some use JavaScript-triggered downloads, some put a signed token in the URL. Building custom download logic for each supplier does not scale.
PDFPipe normalizes the fetching. Send any public invoice URL and get back the invoice's text page by page, plus its PDF metadata, as JSON. From there, your AP automation, accounting integration, or an LLM pulls out the invoice number, totals, and line items - PDFPipe returns the text, not parsed fields or tables.
Links that need you to be logged in to the supplier portal are not supported: PDFPipe does not send cookies or credentials. Use the signed or tokenised download links that billing systems email out, or a public export URL.
One POST request per invoice
curl -X POST https://api.pdfpipe.dev/v1/convert \
-H "Authorization: Bearer pk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://billing.supplier.com/invoices/download/INV-2025-0847",
"format": "json",
"returnMethod": "inline"
}'{
"requestId": "req_a1b2c3...",
"status": "complete",
"format": "json",
"pagesProcessed": 2,
"creditsUsed": 1,
"contentType": "application/json",
"content": "{\"pages\":[{\"pageNumber\":1,\"text\":\"Invoice #INV-2025-0847\\nDate: ...\"}],\"metadata\":{...},\"totalPages\":2,...}"
}Batch processing for multiple invoices
Use the batch endpoint to process many invoices in a single request (5 URLs on Free, 25 on Starter, 50 on Pro, 100 on Business). Each URL is handled independently - a mix of inline and attachment PDFs from different suppliers all work in the same batch.
- Works with any public or tokenised invoice download link
- Batch up to 100 URLs per request on Business
- Webhook callbacks for async delivery, signed with HMAC-SHA256
- Per-page text as JSON, ready for your parser or an LLM
// Process a batch of supplier invoices from public download links
const invoiceUrls = [
"https://billing.supplier-a.com/invoices/download/INV-2025-0847?token=...",
"https://exports.supplier-b.com/pdf?doc=inv-q1-2025&sig=...",
"https://cdn.supplier-c.com/invoices/INV-0042.pdf",
];
const response = await fetch("https://api.pdfpipe.dev/v1/convert/batch", {
method: "POST",
headers: {
"Authorization": "Bearer pk_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
urls: invoiceUrls.map((url) => ({ url })),
defaults: { format: "json" },
returnMethod: "inline",
webhook: { url: "https://your-app.example/hooks/pdfpipe" },
}),
});
const { batchId, pollUrl, requests } = await response.json();
// 202: each entry in requests is { requestId, url, status: "queued" }.
// Poll GET /v1/batch/:batchId, or let the webhook deliver each result.
// Then hand each page's text to your own parser or an LLM to pull
// out invoice number, totals, and line items.Start extracting invoice data today
Free tier includes 300 requests per month. No credit card required.