Comparison

PDFops vs PDFMonkey

PDFMonkey is a hosted PDF generator with an HTML+Liquid templating dashboard, priced from €5/mo (Starter, 300 docs, ~€0.017/doc) up to €300/mo (Premium, 60,000 docs, €0.005/doc), with overage only available on the €60/mo Pro+ tier and above. PDFops is a hosted form-fill + merge API for edge runtimes, free during beta (100 requests per IP per month, no signup). The two are different operations — this page covers the case where fixed-layout template-fill is the actual need.

Important clarification about "AcroForm" in PDFMonkey vs PDFops. PDFMonkey has a feature called PDF Forms that generates empty fillable AcroForm PDFs from an HTML template — markers in the template become form fields, and a human (or another tool) fills them later in Acrobat. PDFops does the opposite: it takes an already-existing AcroForm PDF plus a JSON of field values and returns the filled PDF. PDFMonkey can't fill an existing AcroForm with data; PDFops can't render HTML to create one. The migration story below reflects that.

The honest framing

If your templates need real templating-engine semantics — PDFMonkey still fits better. PDFops doesn't run a templating engine; it fills existing AcroForm fields with values you pass in. PDFMonkey's Liquid support is genuinely deep: tags (if, unless, case, for, tablerow), snippets / partials, custom filters (barcode, entities, in_time_zone), and a custom-JavaScript hook (Chart.js graphs, Day.js date formatting). If your template uses any of those, PDFops isn't an option.

If your templates are fixed-layout with variable fields (invoices, receipts, contracts, statements — most billing PDFs in production fall here), the wedge flips. The AcroForm + HTTP API path removes the Chromium-render-per-document cost; your code does the formatting it would do anyway. The migration is meaningful work though: you don't have AcroForm templates lying around (you have HTML+Liquid). You'd rebuild each template as a PDF-with-AcroForm-fields once, then keep using the new shape.

Side-by-side

PDFopsPDFMonkey
PrimitiveFills existing AcroForm fields with data; merges PDFsRenders HTML+Liquid → PDF; can also emit empty fillable AcroForms from a template
Fill existing AcroForm with dataYes (core endpoint)No — PDF Forms feature emits empty forms, doesn't fill them
PDF mergeYes (core endpoint)No — not in the documents API
Pricing modelPer-document only (no subscription)Tiered subscription; overage only above €60/mo (else buy boost packs)
Per-document priceFree during beta, 100 req/IP/month€0.017 (Starter €5/mo) → €0.005 (Premium €300/mo); overage €0.006/doc on Pro+ tier
Free tier100 req/month/IP, no signup20 docs/mo, 1-day retention, 30s timeout
Auth modelNone during beta (anonymous, IP-rate-limited)API key required
Template authoringAcrobat / Preview / LibreOffice Draw / pdftk (any AcroForm-aware editor)Web dashboard with HTML+Liquid+SCSS editor
Template engineNone (field-name → value)Liquid v4 + custom JS + Chart.js + barcode/in_time_zone filters
Per-request timeout~30s edge defaultTier-gated: 30s Free / 2min Pro / 3min Pro+ / 5min Premium
Rendering enginepdf-lib (V8-isolate-compatible)Chromium (Engine v5 = Chrome 133, May 2025)
Hosting substrateVercel Edge (globally distributed)Headless Chromium pipeline; signed S3 URLs (1h TTL) for download
First-party SDKsHTTP-native (no SDK; curl/fetch)Ruby only (officially)
Dashboard / UINone (API-only)Yes (template editor + live preview + document gallery)
Best forFixed-layout fill + merge at scale on edge stacksTemplates with computed layouts; no-code/low-code ops (Make, Zapier, Glide, n8n)

Pricing verified at pdfmonkey.io/pricing and PDF Forms docs as of 2026-05-19.

Try the migration in 30 seconds

If your invoice template has fixed positions for customer name + total (or you want to start from one — grab a sample invoice-template.pdf), the call shape is:

curl -X POST https://pdfops.dev/api/fill-form \
  -F "pdf=@invoice-template.pdf" \
  -F 'fields={"customer_name":"Acme Co","total":"$1,250.00"}' \
  -o filled.pdf

You get a filled PDF back. No API key, no signup, no subscription. The full reference for the endpoint is in the fill-form docs.

Frequently asked

Is PDFops a drop-in replacement for PDFMonkey?

No — different operations entirely. PDFMonkey renders HTML+Liquid to a new PDF (and can emit empty fillable AcroForm fields from markers in the template). PDFops fills an existing AcroForm PDF with data and returns the result. Your PDFMonkey templates are HTML+Liquid, not AcroForm — migration means rebuilding each template once as a PDF with AcroForm fields, then sending field values via /api/fill-form.

How does PDFops pricing compare to PDFMonkey?

PDFMonkey runs €5/mo (Starter, 300 docs, €0.017/doc) up to €300/mo (Premium, 60k docs, €0.005/doc); overage only on Pro+ (€60/mo+) at €0.006/doc. PDFops is per-document only (no subscription floor), free during beta. No tier gates per-request timeout (PDFMonkey caps at 30s on Free, 5min on Premium).

Does PDFops support template variables and computed values like Liquid?

Not directly. PDFMonkey's Liquid is genuinely deep — loops, conditionals, snippets/partials, custom filters (barcode, in_time_zone), and a custom-JavaScript hook for Chart.js graphs. If your template uses those, PDFMonkey fits better than PDFops. PDFops handles fixed-layout fill where the variation is the data, not the layout.

Can I migrate my PDFMonkey templates to PDFops?

If your template is fundamentally a fixed layout with variable fields: (1) Recreate the layout as a PDF template in Acrobat / Preview / LibreOffice Draw with AcroForm fields where the variables go (you can't import your HTML+Liquid template; this is the migration cost). (2) Name the fields to match the JSON keys you'll send. (3) POST template + JSON to /api/fill-form. (4) Get the filled PDF back. Liquid loops / conditionals / Chart.js graphs need to move into the calling code or stay on PDFMonkey.

Does PDFops have a dashboard like PDFMonkey?

Not during beta. PDFops is API-first; no dashboard, no template-management UI. Templates live in your repo or object storage; the API is stateless. A dashboard could ship post-beta if buyer signal indicates it's load-bearing.

Move when ready

If the fixed-layout template-fill primitive matches your usage, join the waitlist to lock in early-tier pricing post-beta. The form's message field is the fastest way to tell me about your volume and migration constraints.