PDFShift

pdfshift.io

YES

Replaceable in one session with an AI coding agent.

An HTML-to-PDF API: post a URL or some HTML, get a rendered PDF back, with no infrastructure on your side.

Promptfree, for everyone, and the only version there is
Build me the HTML-to-PDF endpoint that replaces PDFShift.

This is the smallest useful service on this site: **one endpoint, one browser pool.** The value is entirely in the operational details.

STACK
- Node 20+ with Fastify
- Playwright with headless Chromium
- SQLite through better-sqlite3 for the job records
- Caddy in front

THE ENDPOINT
- POST with either HTML or a URL, plus options: format, margins, landscape, header and footer templates, scale, and whether to wait for the network to settle
- Returns a job id; the document is fetched separately. **Never render inside the request** — a synchronous endpoint that takes eight seconds under load is an endpoint that times out under load
- A webhook or a poll for completion

THE BROWSER POOL, WHICH IS THE WHOLE OPERATIONAL PROBLEM
- A fixed number of contexts, sized to available memory rather than to CPU. **Chromium wants several hundred megabytes per instance and it grows**
- Recycle every N documents and after any timeout. A pool that runs for a week without recycling will exhaust the machine
- A per-job timeout that kills the page, not one that waits politely
- A queue with a depth limit that returns a clear error when full, rather than accepting work it cannot do

CORRECTNESS
- Wait for `document.fonts.ready` and for images, explicitly, before printing. **Text in a fallback font is the single most common defect in generated PDFs**
- Self-hosted fonts embedded in the template
- Honour print CSS: `@page` size and margins, avoid breaking inside rows, running headers with page numbers
- Set an explicit viewport and device scale factor, because the defaults change between browser versions and your output changes with them

SECURITY, AND THIS ONE IS SERIOUS
- **A service that fetches an arbitrary URL and renders it is a server-side request forgery engine.** Block private address ranges, the cloud metadata endpoint, localhost, and anything resolving to them after redirects. Re-check after every redirect, not only on the first URL
- Disable JavaScript unless the caller explicitly asks for it, and treat that as a privileged option
- Run the browser unprivileged in a container with no network access to anything internal
- Cap page count, document size and render time

OPERATIONS
- Store the job, the options and the hash of the output. Deduplicate identical inputs
- Signed expiring URLs for retrieval, and a retention sweeper
- Metrics: queue depth, render duration percentiles, timeout rate, and pool restarts. **The timeout rate is the number that tells you the pool is too small** before customers do

WHAT MATTERS MOST
Blocking internal addresses after redirects, and recycling the pool. The first is a security boundary; the second is why it is still running next month.

What you lose

  • A maintained browser fleet with no operational burden
  • Predictable latency under load
  • Handling of the awkward cases they have already met
  • Nothing to patch when a browser vulnerability lands

If you would rather not build

  • wkhtmltopdf, only for very simple documents

The escape hatch

open source · no votes, no paid placement

Gotenberg

$0

Stateless PDF conversion API in a container; the direct replacement.

gotenberg/gotenbergfree · open source

Playwright

$0

Drives the browser that does the rendering.

microsoft/playwrightfree · open source

Why this verdict

our own opinion · changed only by a person

86/100

Verdict yes at 86: a queue and a browser pool. The SSRF protection is the part that makes this genuinely dangerous to build carelessly, and the entry leads with it.

History

tracked since 14 Aug 2026 · nothing is ever overwritten

Interest · last 30 days

Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.

Questions about PDFShift

answered from the record above

Is PDFShift free?

No — the plan we track is $9 a month. Starter at $9/month for 500 conversions, rising with volume.

Can you replace PDFShift by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 86 out of 100, build time one session. Read what you lose before you decide.

How much does PDFShift cost?

$9 a month on Starter — $108 a year. Recorded 14 Aug 2026.

What do you lose by replacing PDFShift?

A maintained browser fleet with no operational burden; Predictable latency under load; Handling of the awkward cases they have already met; Nothing to patch when a browser vulnerability lands. If any of those carry weight for you, keep paying.

Is there an open-source alternative to PDFShift?

Yes: Gotenberg, Playwright. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 54 in Dev tools

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc