PDFShift alternative

PDFShift is a good, focused HTML-to-PDF API and has been around long enough to be the default answer. Two things about it are worth checking against your own numbers before you renew: $9 a month buys 500 credits, and a credit is five megabytes of output, not one document. PDFMint’s $9 plan is 5,000 documents, one credit each, whatever they weigh.

Where these numbers come from. PDFShift prices its plans through a calculator on pdfshift.io/pricing: you type a monthly volume and it names a plan. The table below was produced on 29 August 2026 by entering 500, 1,000, 5,000, 20,000, 100,000 and 500,000 into that calculator and reading back what it recommended. The credit rule and the free-tier limits are quoted verbatim from the same page. Rate cards change; re-check both before deciding.

The full rate card #

PDFShift planMonthlyCreditsPer creditOverage
Free$050none
Starter$9500$0.018$0.04
Boost$242,500$0.0096$0.03
Growth$395,000$0.0078$0.025
Business$9925,000$0.00396$0.02
Shift 100k$249100,000$0.00249$0.01
Shift 500k$799500,000$0.0016$0.003
PDFMint planMonthlyDocumentsPer documentOverage
Free$010none
Starter$95,000$0.0018none — upgrade or wait
Pro$2950,000$0.00058none
Scale$99250,000$0.000396none

Line the two up at the points where they touch. $9: 500 credits against 5,000 documents. $99: 25,000 credits against 250,000 documents. The gap is an order of magnitude at both ends, and it holds all the way up: PDFShift’s largest published plan, $799 for 500,000 credits, is two and a half times the price of PDFMint’s $99 tier for twice the volume.

What a credit is, and why this is the part to check first #

PDFShift states the rule twice on its own pricing page, in these words:

“We count one document per 5Mb of generated data. A 14Mb document will count for 3 credits.”

That is a defensible way to price — a big render costs them more — but it means the per-credit column above is not the per-document price unless your output is small. Take a catalogue or a photo-heavy report at 14 MB: on Starter it costs three credits, so 500 credits is 166 documents, and the real price is $0.054 a document, thirty times PDFMint’s $0.0018. Take a 300 kB invoice and the rule never fires and the honest comparison is the $0.018 in the table.

So the question is not which product is cheaper in the abstract. It is: how many megabytes does your average document weigh? Generate ten typical ones and look. At PDFMint the answer does not change the bill — one credit is one document, at any page count and any size.

Side by side #

PDFShiftPDFMint
Billing unit1 credit per 5 MB of output1 credit per document, any size
$9 a month buys500 credits5,000 documents
Free tier50 credits, 15 MB max, 30 s timeout10 documents, no size or timeout cap
Timeout on paid plansup to 15 minutesyours to set per request
Failed rendernot stated on the pricing pagecredit refunded before the error reaches you
InputsHTML or a URLHTML, Markdown, a URL, or a stored template
Merge PDFsPOST /v1/merge, one credit
Screenshot / image outputPOST /v1/image, one credit
Password protection“Encryption and Watermark”, listed on all plansAES-256 via qpdf, free tier included
Published live latency/status, no account needed
n8n noden8n-nodes-pdfmint
Track record“48,000+ developers”, “74+ millions of generated documents”, 57 Capterra reviewsnone — see below

What happens when the render fails #

This is the difference that shows up at 3am rather than on an invoice. A PDF render fails for a small number of boring reasons: an asset 404’d, a font never loaded, a selector you waited for never appeared, a placeholder had no value. PDFMint answers with the reason and a request_id:

A real error from the live service
{
  "error": {
    "code": "unresolved_placeholders",
    "message": "The template uses 1 placeholder that \"data\" does not provide: amount.",
    "hint": "Pass every placeholder in \"data\", or set \"strict\": false.",
    "request_id": "529616e4ed2f7cf1"
  }
}

There is a second layer under that. A page can render successfully and still be wrong — an empty div, a chart that never drew. Those come back as a warnings array alongside a perfectly valid PDF, so a workflow can branch on them instead of mailing a blank page to a customer. The full error and warning list is in the API reference.

The free tiers are not comparable, and ours is the smaller one #

PDFShift gives 50 conversions a month; PDFMint gives 10. That is a real advantage for PDFShift and it is worth saying without spin: if you want to evaluate over several weeks without paying, they give you five times the room. PDFShift’s free tier does cap output at 15 MB and the timeout at 30 seconds, where the PDFMint free tier has the same limits as the paid ones — but 50 is 50. Ours is sized to prove the thing works, not to run anything on.

If the caller is a workflow tool rather than your code #

PDFShift is an API you call from your own code. If the caller is n8n, Make or Zapier, the question becomes whether there is a node that hands the binary to the next step correctly, which is the part that is fiddly to do by hand with an HTTP node.

PDFMint publishes n8n-nodes-pdfmint — we build and run the service and we publish the node. It attaches the PDF as binary data and puts pages, durationMs, creditsRemaining and any warnings on the item’s JSON next to it, so a downstream IF node can act on them. Details on the n8n page.

The same call, here #

PDFShift
curl -X POST https://api.pdfshift.io/v3/convert/pdf \
  -u "api:$PDFSHIFT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source": "<h1>Invoice</h1>"}' \
  --output invoice.pdf
PDFMint
curl -X POST https://pdf.mintapis.com/v1/pdf \
  -H "Authorization: Bearer $PDFMINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"html": "<h1>Invoice</h1>", "format": "A4"}' \
  --output invoice.pdf

Both return the bytes in the response body, so a migration is the URL, the auth header and the name of one field. If you need the PDF as base64 or as a hosted link instead, set "output": "base64" or "output": "link".

When to stay on PDFShift #

  • Your documents are small and your volume is under about 400 a month. At that size the difference is a few dollars and switching is not worth an afternoon.
  • You want the free tier to carry a real evaluation. 50 a month against 10.
  • You need a vendor with years of public track record. They have tens of thousands of developers and public reviews on three sites. We have none of that, and no amount of argument changes it.
  • You are already integrated and it works. A renderer that has never surprised you is worth more than a price list.

What we cannot claim #

PDFMint has exactly one paying customer, so there is no case study and no reference yet. We used to quote npm’s weekly download count here as if it meant adoption. On 30 August 2026 we checked, and it does not: the downloads are spread almost evenly across every published version, including week-old ones nobody would install, which is what mirrors and scanners look like rather than people. We publish no adoption number now, because we do not have one worth publishing. PDFMint runs as a single service in one region with no SLA, and its status page’s uptime figure resets on every deploy, which it says on the page. Everything else here can be checked with one curl and the two pricing pages, before you spend anything.

Try it against your own worst document #

Take the page your current renderer gets wrong — the web font, the JavaScript chart, the table that breaks across a page — and send it to both. Then weigh the output, because that is what decides which of these two rate cards applies to you.

Get an API key   API reference   Live latency and success rate

Other comparisons #

HTML to PDF APIWhat the job really involves, and what six products charge.
vs CraftMyPDFA drag-and-drop designer we do not have — and passwords from $99.
vs PDFMonkey€5 for 300 documents kept one day, against $9 for 5,000.
HTML to PDF in n8nThree ways to do it in a workflow, and what each costs.