PDFLoom vs PDFShift: HTML to PDF API comparison
PDFShift and PDFLoom are both HTML-to-PDF APIs with free tiers and monthly plans. They differ in how usage is counted, how far up the volume scale they go, and in a few features.
The short version
- Pick PDFShift for very high volumes (their plans go up to 1 million documents a month), long-running renders (paid timeouts up to 15 minutes), asynchronous rendering with delivery to S3, or built-in encryption and watermarking.
- Pick PDFLoom for lower cost at small and medium volumes, a larger free tier, invoices generated from JSON, or an MCP server for AI agents.
Pricing
| Monthly volume | PDFShift | PDFLoom |
|---|---|---|
| Free | 50 credits | 100 PDFs |
| ~2,000 | $24 (Boost, 2,500 credits) | $9 (Starter, 2,000) |
| ~10,000 | $99 (Business, 25,000 credits) | $29 (Pro, 10,000) |
| ~50,000 | $149 (Shift 50k) | $79 (Scale, 50,000) |
| 100,000+ | $249 for 100k, up to $999 for 1M | Contact us |
PDFShift counts one credit per document per 5 MB of output, so a 14 MB PDF uses 3 credits; their paid plans also allow overage at a per-credit price instead of stopping. PDFLoom counts one PDF per successful call regardless of size, and returns HTTP 429 when the monthly quota is used up.
Prices and limits checked on 29 October 2026 from each vendor's public pricing page. Plans change; check their site before deciding. Something wrong or outdated? Tell us and we'll fix it.
Features and limits
| PDFShift | PDFLoom | |
|---|---|---|
| HTML or URL to PDF | Yes | Yes |
| Headers and footers with page numbers | Yes | Yes |
| Render timeout | 30 s free, up to 15 min on paid plans | 30 s |
| Async rendering, S3 delivery | Yes (paid plans) | No |
| PDF encryption and watermarks | Yes | No (watermarks via your own HTML/CSS) |
| Invoices from JSON | No | Yes (invoice API) |
| MCP server for AI agents | Not that we know of | Yes (docs) |
| Volume ceiling | 1M+/month | 50,000/month on standard plans |
| Track record | Established | New service |
Switching
Both APIs take HTML or a URL plus print options in a JSON body, so switching is usually a matter of changing the endpoint, the auth header and a few option names. See the PDFLoom API reference, or get a free key and compare output side by side.