Screenshots, PDFs, and video.
Predictable pricing.

The web-capture API for developers who ship. Capture any URL as PNG, JPG, WebP, AVIF, or PDF — or record it as MP4/GIF — with AI-powered popup removal, cron-driven scheduled captures, and per-request geo/proxy routing.
From $9/mo. 100 free credits/month, no card required.

Quick Start
curl -X POST https://api.getsnap.dev/v1/screenshot \
  -H "X-API-Key: sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "format": "png",
    "full_page": true,
    "remove_popups": true,
    "extract_metadata": true
  }'
Live captures · Real websites

See it capture the web.

Every screenshot below was taken with a single POST request to /v1/screenshot. Pick a site, or watch it cycle automatically.

getsnap.dev live demo
POST /v1/screenshot
{
  "url": "https://github.com",
  "format": "png",
  "viewport_width": 1280,
  "viewport_height": 800,
  "full_page": true,
  "remove_popups": true,
  "block_ads": true
}
200 OK Captured in 1.8s · Popups removed · Ads blocked
https://github.com
Live captured screenshot preview

Why developers choose getsnap.dev

🧹

AI Popup Removal

Automatically removes cookie banners, newsletter popups, and chat widgets. Auto-click Accept buttons on OneTrust, Cookiebot, and FundingChoices. Clean captures, every time.

📄

Every format that matters

PNG, JPG, WebP, AVIF, and PDF. Or record scrolling video as MP4 or GIF. Full-page captures, Retina, transparent backgrounds, mobile/tablet emulation, dark mode, print media type.

🎞️

Scrolling video (MP4 & GIF)

Record any URL as a smoothly-scrolling video. 10–30 fps, up to 30 seconds, MP4 (h264) or optimized GIF. Great for changelog demos, marketing hero clips, and design-review approvals. Only Urlbox and getSnap have this.

⏰

Scheduled captures

Cron-driven recurring captures with IANA timezone support, HMAC-signed webhooks, and a built-in audit trail of the last 100 runs. Set once, monitor forever. Perfect for compliance archives, competitor snapshots, and morning traffic dashboards.

🌍

Geo & proxy routing

Route any capture through your own proxy (BYOP: HTTP/HTTPS/SOCKS5) or a managed geo pool. Pass proxy_country: "DE" and see the site the way a German visitor does. Credentials never leak into logs or cache keys.

⚡

Fast & reliable

Average response time under 3 seconds. Built on Playwright with intelligent caching and CDN delivery. Batch up to 100 URLs in one request. 99.9% uptime target with a public status page.

🔒

Your key is never stored

We keep a SHA-256 hash of your API key, not the key — so a database dump, or one of our nightly backups, contains nothing that can call the API. Signed render links are keyed by a server-held secret rather than anything on your account row, and every capture URL is checked against its resolved address, so the renderer cannot be pointed at a private network.

🔍

Extraction & metadata

Get text, HTML, or full page metadata in the same call — title, favicon, Open Graph tags, actually-loaded fonts, HTTP status, and response headers. Perfect for SEO tooling, archiving, and content analysis.

🧠

Full-page slicing for AI vision

Vision models cap at ~8k pixel height. Enable full_page_slices and we split tall captures into overlapping strips uploaded as separate objects. Feed them straight into GPT-4V, Claude, or Gemini without cropping code.

🎯

Precise capture control

Wait for selectors, auto-scroll for lazy content, click elements, scroll to sections, clip a specific rectangle, inject custom CSS/JS, block images/fonts/scripts/frames, set cookies & headers for authenticated pages, bypass CSP when you need to.

📝

PDF, done properly

Every paper size A0–A6, Letter, Legal, Tabloid, Ledger. Portrait or landscape. Per-side margins, scale, templated headers/footers with page numbers, page-range filters, and full document metadata (title, subject, author, keywords, creator).

📷

OG image generator

Dedicated POST /v1/og-image endpoint tuned for social share cards. 1200×630 PNG, hi-DPI (2x), popup/ad-blocking by default. Drop the returned CDN URL straight into <meta property="og:image"> and every scraper — Facebook, LinkedIn, Slack, Discord, Twitter — renders the same crisp preview.

🔎

Visual regression diff

New POST /v1/diff compares two URLs pixel-by-pixel and returns a similarity score plus a red-overlay diff image. Wire it into CI to catch unintended visual changes on deploys, or run it as a scheduled check against your competitors. Sub-second math on top of Playwright captures, cached like everything else.

♿

Accessibility audit

New POST /v1/audit runs axe-core against any URL and returns categorised WCAG 2.0/2.1/2.2 violations by impact (critical / serious / moderate / minor). Filter by tag (wcag2aa, section508, ACT) or specific rule ID. Ships with a getsnap audit CLI for one-shot checks and CI regression gates.

👥

Team accounts + team billing

Share one plan, one monthly quota, and one rate limit across multiple api_keys. Invite by email — roles are owner / admin / member. Owners can transfer ownership or dissolve the team. Each team gets its own Stripe subscription (independent from any member's personal billing) via /checkout + /portal + /billing. 7-day trial included.

🔗

Render links & S3

Signed GET URLs that serve screenshots without exposing your API key — embed them in <img> tags, OG meta, or emails. Or push directly to your own S3-compatible bucket (AWS, R2, DO Spaces, etc).

💰

4–12× cheaper

$0.79–1.80/1K captures vs. competitors at $1.75–9.80/1K. Starting at $9/mo for 5,000 credits. No hidden fees, no per-feature upcharges. Node.js SDK on npm, Python SDK on PyPI.

How we compare

Same category. Same quality. Dramatically better pricing.

Feature getSnap.dev ScreenshotAPI Urlbox ScreenshotOne ApiFlash
5,000 screenshots / month $9 $39.99 $49 $29 $19
Cost per 1,000 $1.80 $8.00 $9.80 $5.80 $3.80
Free tier 100/mo 100/mo no 100/mo 100/mo
AI popup removal (90+ selectors) yes no partial partial no
Batch capture (up to 100 URLs) yes no no no no
Text & HTML extraction yes no no partial no
Signed render links yes no yes yes no
Async webhooks yes no yes yes no
Upload to your S3 bucket yes no yes yes no
Node.js + Python SDKs yes Node only Node only yes no
AVIF output yes no yes yes no
Full-page slicing for AI vision yes no no no no
PDF metadata + page ranges + custom H/F yes no partial partial no
Page metadata extraction (title, favicon, OG, fonts, status) yes no yes partial no
Scheduled captures (cron + webhook + HMAC) yes no yes no no
Scrolling video (MP4/GIF) yes no yes no no
Geo/proxy routing (BYOP + pool) yes yes yes no yes

Pricing pulled from each vendor's public pricing page. See detailed comparisons: vs ScreenshotAPI · vs Urlbox · vs ScreenshotOne · vs ApiFlash

Simple, transparent pricing

Start free. Upgrade when you're ready. Cancel anytime.

Free

$0/mo
Free tier — no credit card
  • 100 screenshots/mo
  • All formats (PNG, JPG, WebP, PDF)
  • AI popup removal
  • CDN delivery
  • 5 req/min rate limit
Get Started

Pro

$29/mo
$1.16 / 1,000 screenshots
7-day free trial
  • 25,000 screenshots/mo
  • All formats
  • AI popup removal
  • CDN delivery
  • 60 req/min rate limit
  • Priority support
Start free trial

Business

$79/mo
$0.79 / 1,000 screenshots
7-day free trial
  • 100,000 screenshots/mo
  • All formats
  • AI popup removal
  • CDN delivery
  • 120 req/min rate limit
  • Dedicated support
Start free trial

All paid plans include a 7-day free trial — card required, cancel anytime, no charge if you cancel before day 7. Overage billed at $0.003/screenshot. Custom enterprise plans available.
Learn how billing & payments work →

Built for developers

One line to install. Two lines to capture. Ready in production in under 5 minutes.

Node.js / TypeScript
$ npm install getsnap
import GetSnap from "getsnap";

const snap = new GetSnap("sk_live_YOUR_KEY");
const { url } = await snap.screenshot({ url: "https://example.com" });
Python
$ pip install getsnap
from getsnap import GetSnap

snap = GetSnap("sk_live_YOUR_KEY")
result = snap.screenshot(url="https://example.com")
cURL
$ curl -X POST https://api.getsnap.dev
curl -X POST https://api.getsnap.dev/v1/screenshot \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'

Full reference: API docs · Code examples · Interactive playground

All systems operational

Real-time uptime and response-time monitoring, publicly viewable.

View public status page →

Frequently Asked Questions

Do I need a credit card to start?

No. The free tier gives you 100 screenshots per month with no credit card required. Sign up with an email, click the activation link we send you, and the key is ready.

How fast are screenshots?

Sub-3-second average. Cached responses are served instantly via CDN with an X-Cache: HIT header and don't count against your monthly quota. Full-page captures on JS-heavy sites can take up to 5 seconds.

Why is getsnap.dev cheaper than the alternatives?

We run a lean stack — Fastify + Playwright + Redis in Docker on a single DigitalOcean droplet, screenshots served via DigitalOcean Spaces CDN. No VC funding to service, no sales team, no bloat. The savings pass to you.

What happens if I exceed my monthly limit?

You won't be cut off. Overage is billed at $0.003 per screenshot. Upgrade any time for a higher allowance.

How does AI popup removal work?

Our system detects and removes cookie banners, newsletter popups, chat widgets, and overlay modals before capture using 90+ heuristic selectors. You can also pass your own hide_selectors or remove_selectors arrays for full control.

What output formats are supported?

PNG, JPG, WebP, and PDF. You can set custom viewports, emulate mobile or tablet, render in dark mode, capture specific elements via CSS selector, and take Retina-quality captures.

Is there an uptime SLA?

Yes — we target 99.9% and publish real uptime and response-time data at our public status page.

Can I capture pages behind authentication?

Yes. Pass custom cookies and HTTP headers (including auth tokens) in your request. You can also inject JavaScript to handle login flows or dismiss dialogs before capture.

Do you have Node.js and Python SDKs?

Yes. npm install getsnap for Node/TypeScript, pip install getsnap for Python. Both are officially maintained and cover every API option including batch capture, render links, extraction, and webhooks.

How do I cancel my subscription?

Cancel any time via the Stripe billing portal (POST /v1/billing). No questions asked, no lock-in. Your API key stays active until the end of the billing period.

How does signing up for a paid plan work?

Enter your email → get an API key → click the activation link in the welcome email → for paid plans, you'll be redirected to Stripe checkout. Your plan upgrades automatically after payment.

Earn credit

Refer developers, earn $5 for every paid signup

Every account gets a unique ?ref=CODE link at signup — no opt-in, no approval.

You get
$5.00

Stripe balance credit the moment they pay their first invoice. Reduces your next bill.

They get
20% off

One-time Stripe coupon on their first paid month. Starter, Pro, or Business.

1 Grab your link from Docs → Referrals
2 They sign up — auto-attributed, discount applied at checkout
3 First invoice pays — $5 lands on your Stripe balance

20 referrals = $100 = one free month of Pro. Stack them, no cap. Anti-abuse: self-referrals blocked, one referrer per referee, credit only on real payments.

See your referral link
Live on every account since v1.7.0.

Get your free API key in 30 seconds

No credit card required. 100 free screenshots every month.