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
| SayPDF | DocRaptor | PDFShift | |
|---|---|---|---|
| Rendering engine | Chromium (real browser) | Prince XML | Chromium |
| Entry paid plan | $5/mo for 2,500 renders | $15/mo for 125 docs | $9/mo for 500 credits |
| Renders per dollar | 500 | 8 | 56 |
| Pricing model | Per render, flat | Per-document tiers | 1 credit / 5 MB output |
| Free tier | 300 renders, no card | 5/mo + unlimited watermarked tests | 50 credits/mo |
| Render before you sign up | Yes, unwatermarked | Yes, watermarked test key | Account first |
| Send raw HTML string | Yes | Yes | Yes |
| CJK, Vietnamese, Arabic, Thai, Korean fonts | Embedded, measured | Embedded, measured | Not tested |
| Newer emoji (U+1F9FE 🧾) | Renders | Empty box | Not tested |
| Stream PDF bytes back inline | Yes | Yes | Yes |
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.
| Service | Cheapest paid plan | Renders per $1 | Free tier | Billed by |
|---|---|---|---|---|
| SayPDF | $5 / 2,500 renders | 500 | 300 renders, no card | Render |
| PDFMonkey | €5 / 300 docs | 60 | 20 docs/mo | Document |
| PDFShift | $9 / 500 credits | 56 | 50 credits/mo | Credit per 5 MB |
| CraftMyPDF | $29 / 1,200 docs | 41 | 50 docs/mo | Document |
| DocRaptor | $15 / 125 docs | 8 | 5/mo + unlimited watermarked tests | Document |
| PDFCrowd | Tiered, quoted on selection | — | 100 trial credits, 1 month | Credit per 0.5 MB |
| ConvertAPI | Not published on the page | — | Signup required to try | Conversion seconds |
| Nutrient (DWS) | Credit packs, quoted | — | 50 credits/mo | Credit |
| Pdflayer | Tiered, see their site | — | 100 requests/mo, non-commercial | API request |
| Api2Pdf | $1/mo base + usage | — | Yes | MB + 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.
- Print-publishing typography. DocRaptor's Prince XML engine is genuinely excellent at CSS paged media as the standard specifies it — running headers, footnotes, cross-references, real widow and orphan control. If that is your core need and budget is not the constraint, it is the better tool. We render like a browser, which is right for invoices and reports and wrong for a book.
- A vendor your procurement team recognises. If the purchase needs a signed DPA, a SOC 2 report, a security questionnaire back within the week and named support hours, buy from a company that has a compliance department. SayPDF is small — that is why it is cheap, and it is a real reason to pass.
- You can self-host. The renderer here is Gotenberg, which is open source and free. If you already run containers and would rather own the uptime than rent it, run it yourself; we cannot beat $0. What you pay us for is the queue, the font fallbacks, the retries, and nobody on your team being woken up.
- Image-heavy output, if you only compare headline prices. We bill per render regardless of size, which is in our favour — but PDFShift's 5 MB credit and PDFCrowd's 0.5 MB credit only cost more if your documents are actually large. For small invoices their credits go further than the per-credit figure suggests. Work it out on your own file sizes, not on ours.
Why teams move
- Fonts that render, and a way to check. We wait for web fonts and ship CJK, Vietnamese, Thai, Korean, Arabic and colour-emoji coverage on the render servers. We are not claiming the others fail at this — measured head to head on 1 October 2026, DocRaptor embeds a font for all of those scripts too. Render your own worst document in the box and read the PDF; that is the only version of this claim worth anything.
- Pricing you can forecast. No "1 credit per 5 MB of output" math where a few image-heavy PDFs blow your budget — and no enterprise print-engine premium for features you don't use.
- Made for code. Send a
htmlstring or aurl, get the bytes back. No writing temp files to upload.
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.