Every HTML→PDF API, compared on the four things that decide it

Cheapest paid plan, free tier, what you are billed by, and whether you can get a PDF out of it before you sign up. Nine vendors besides us — DocRaptor, PDFShift, PDFCrowd, ConvertAPI, Nutrient, Pdflayer, PDFMonkey, CraftMyPDF and Api2Pdf — each figure taken from their own site and dated. Including the cases where we are the wrong choice, because you will find those anyway and it is quicker if we say them.

At a glance

 SayPDFDocRaptorPDFShift
Rendering engineChromium (real browser)Prince XMLChromium
Entry paid plan$5/mo for 2,500 renders$15/mo for 125 docs$9/mo for 500 credits
Renders per dollar500856
Pricing modelPer render, flatPer-document tiers1 credit / 5 MB output
Free tier300 renders, no card5/mo + unlimited watermarked tests50 credits/mo
Render before you sign upYes, unwatermarkedYes, watermarked test keyAccount first
Send raw HTML stringYesYesYes
CJK, Vietnamese, Arabic, Thai, Korean fontsEmbedded, measuredEmbedded, measuredNot tested
Newer emoji (U+1F9FE 🧾)RendersEmpty boxNot tested
Stream PDF bytes back inlineYesYesYes

Checked 1 October 2026 against each vendor's own pricing, product or docs page; prices change, so verify before you decide. SayPDF's own numbers come from the pricing section of the API page.

Every HTML→PDF API, by entry price

The cheapest paid plan each vendor sells, and what a dollar buys on it. Free tiers are listed separately because they are what you actually test on.

ServiceCheapest paid planRenders per $1Free tierBilled by
SayPDF$5 / 2,500 renders500300 renders, no cardRender
PDFMonkey€5 / 300 docs6020 docs/moDocument
PDFShift$9 / 500 credits5650 credits/moCredit per 5 MB
CraftMyPDF$29 / 1,200 docs4150 docs/moDocument
DocRaptor$15 / 125 docs85/mo + unlimited watermarked testsDocument
PDFCrowdTiered, quoted on selection—100 trial credits, 1 monthCredit per 0.5 MB
ConvertAPINot published on the page—Signup required to tryConversion seconds
Nutrient (DWS)Credit packs, quoted—50 credits/moCredit
PdflayerTiered, see their site—100 requests/mo, non-commercialAPI request
Api2Pdf$1/mo base + usage—YesMB + compute seconds

A dash means the vendor does not publish a comparable number, not that it is expensive. PDFCrowd shows plan prices only after you choose a usage band; ConvertAPI's page routes to signup; Nutrient sells credit packs; Api2Pdf bills bandwidth and compute seconds rather than documents. Pdflayer's free plan is explicitly marked non-commercial. Dates, separately, because they are not all the same: PDFShift, DocRaptor, PDFCrowd, ConvertAPI, Nutrient and Pdflayer were read on 1 October 2026; PDFMonkey, CraftMyPDF and Api2Pdf still carry the 23 September 2026 reading and have not been re-checked since. All of them are listed so you can check for yourself rather than take our word for the shape of the market — and if you find a cell out of date, that is a bug; tell us.

When we are the wrong choice

A comparison page that wins every row is a comparison page nobody believes. These are the cases where we would tell you to buy something else.

And one thing we will not claim: no-signup trying is not unique to us. DocRaptor publishes a public test-mode key, and their own examples use it. The difference is what comes back — their no-account output is a watermarked test document; ours is a real, unwatermarked PDF, billed against a 25-render key that expires in 24 hours.

Why teams move

The same request, on SayPDF

curl -X POST "https://api.saypdf.com/api/v1/html-to-pdf" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -o out.pdf \
  -d '{ "source": { "html": "<h1>Hello</h1>" },
        "options": { "format": "Letter", "margin": "20mm" } }'

The PDF bytes come back inline by default. Send "output": "url" for a hosted link or "output": "base64" for a string. An uploaded file or a source.url works the same way, with the same options.

Verify it yourself

Don't take our word for it — the honest test is your own document. Paste your hardest invoice or report HTML (the one with custom fonts, CJK, long tables) into the box at the top of the API page and read the PDF it hands back. No account, no key, no card — and it prints the same call back to you as curl, Node, Python or PHP, carrying a live key, so the next step is a paste into your own project rather than a signup.

Run your own HTML now