Puppeteer vs Screenshot API: When to Self-Host vs Use a Service

April 26, 2026

If you need programmatic screenshots, you have two options: spin up Puppeteer (or Playwright) yourself, or call a screenshot API. The right choice depends on volume, your team's DevOps appetite, and how much your time is worth. Here's the honest breakdown.

What you actually pay for with self-hosting

Server cost

Puppeteer is memory-hungry. A single Chromium instance uses 200-500 MB. To handle concurrent requests you need either:

For low traffic, $20/month covers it. For 10K+ renders/month, you're at $50-100 just for compute.

DevOps time

This is the hidden cost everyone underestimates. With self-hosted Puppeteer you own:

Realistic estimate: 1-2 days to ship a working prototype, then 1-2 hours per week of ongoing maintenance. At $100/hr that's $400-800/month in engineer time alone.

Failure modes you'll hit

What you pay for with a screenshot API

Pricing scales with renders. At ~100 free renders/month and starter tiers around $9-19/mo for 1-2K renders, you're paying roughly:

For that you get: zero infrastructure, automatic Chromium updates, SSRF protection, retries, font support, ad blocking, retina, PDF output, webhooks. You write maybe 5 lines of code and ship.

The breakeven math

The honest breakeven is around 1 million renders/month. Below that, an API is almost always cheaper than the all-in cost of self-hosting (compute + engineer time).

Above 1M renders you start hitting volume tiers where running your own infrastructure genuinely beats per-request pricing — but you also need a real ops budget.

When to self-host anyway

When to use an API

The hybrid path

Many teams start with an API to validate their use case, then evaluate self-hosting once they hit 100K+ renders/month and have a clear cost picture. This is usually the right call — you avoid premature infrastructure investment, and the API code is so simple you can swap it out later.

Start with an API — switch later if you outgrow it. 100/month free.

Get your API key — free