screenshot & og-image api · render any URL, safely

URL in, image out.

Sign a URL, get back a PNG or PDF — any page, including the user-submitted ones you don't control. Rendered by our headless Chrome instead of yours and cached at the edge. No browser clusters, no font stacks, no SSRF hole to plug.

Get an API key Screenshot any URL →

free tier · no card required · pro from $14/mo

shotpipe · live demo
$ curl "https://shotpipe.io/render?url=" -o shot.png
--key · use your own API key

Signed locally in your browser with WebCrypto. The secret is never sent anywhere. Uses your key's rate limit instead of the demo's 6/min. Only paste your secret on an instance you run.

demo key · 6 req/min per IP

two endpoints

One for screenshots. One for og:images.

Same pipeline underneath: signed URL in, cached image out. Pick the endpoint that matches the job.

GET /render

Screenshots & PDFs of any URL

Thumbnails, archiving, monitoring, HTML-to-PDF — including user-submitted URLs, captured SSRF-safe so a hostile link can't reach your network. Real Chrome, pixel-consistent, without running a browser yourself.

$ curl "…/render?url=https://your-site.com&w=1200&h=630&key=k_you&sig=…"
the screenshot api

GET /og

Dynamic og:image for every page

Hosted templates, parameterized by query string. Signed at build time in microseconds, rendered lazily on the first crawler hit. Your build never waits on Chrome.

<meta property="og:image" content="{% ogImageUrl title, author, tag %}">
the og image api

why hosted

Headless Chrome is someone's problem. Not yours.

Self-hosting a renderer means memory leaks, zombie processes, missing fonts, and cold starts. Shotpipe is the same capability behind one signed GET request.

Cached at the edge

The first request renders; every request after that is served from the CDN in single-digit milliseconds and costs nothing.

Signed URLs

Every request is HMAC-signed with your secret. Unsigned or tampered URLs are rejected, so nobody renders on your key.

No infrastructure

No browser pool to size, no worker queue to monitor, no 3am OOM. Capacity is our problem.

clean by default

The modern web is a consent wall with a page behind it.

Ads, trackers, and cookie banners are blocked out of the box — no parameter to discover, nothing to configure. Below: a live render of the biggest consent-platform vendor's own homepage, straight from the API.

opted out · as servedbanner & ads
onetrust.com as served — a cookie consent dialog covers the lower half of the page
…/render?url=onetrust.com&block_ads=false&block_banners=false
the default · no extra paramsclean
onetrust.com rendered by Shotpipe — the same page with the consent dialog and ads removed
…/render?url=onetrust.com — that's the whole request

Ads & trackers never load

Requests to ad networks are aborted before they leave the browser. Pages come out cleaner and render several times faster.

Consent walls handled

CMP scripts are blocked and server-rendered banners hidden — OneTrust, Cookiebot, Sourcepoint, Didomi and friends, with vendor-specific rules that never touch real page content.

Opt out per request

Need the page exactly as served, consent wall and all? Add block_ads=false&block_banners=false and it's an archival-grade capture again.

how we compare

The short version

Verified against each vendor's public pricing in July 2026. The long, honest versions, including where they beat us, are one click away.

ShotpipeHCTIScreenshotOneUrlbox
free tier100 renders/mo50/mo, expires after a year100/monone
entry paid$14/mo · 2,000 renders$14/mo · 1,000$17/mo · 2,000$19/mo · 2,000
hosted og templatesyesbring your ownnono
static-site plugineleventynonenonenone
default cacheforeverwhile subscribed4h–30d TTL30 days

Full comparisons: vs HTML/CSS to Image · vs ScreenshotOne · vs Urlbox

pricing

Free tier to start. One flat plan after.