Website Screenshot API

Capture any URL as PNG, WebP, JPEG or PDF with a single REST call. Full-page capture, mobile emulation, dark mode, custom viewports. No Puppeteer. No browser to manage.

Get Free API Key — 200/month

The Simplest Screenshot API

One HTTP GET request is all it takes. Pass your target URL and your API key, receive a screenshot. No SDKs required, no browser binaries to install, no infrastructure to maintain. Works from Node.js, Python, PHP, Ruby, Go, or any language that can make an HTTP request.

curl "https://api.snapapi.pics/v1/screenshot?access_key=YOUR_KEY&url=https://example.com&format=png"   --output screenshot.png

All Output Formats

FormatUse CaseParameter
PNGLossless, perfect for UI screenshots and thumbnailsformat=png
WebP60% smaller than PNG, ideal for web servingformat=webp
JPEGMaximum browser compatibility, photographyformat=jpeg
PDFPrint-ready documents, invoices, reportsformat=pdf

Viewport and Device Options

# Desktop 1280x800
?width=1280&height=800

# Mobile (iPhone 15 Pro)
?device=iPhone_15_Pro

# Full page — capture entire scroll height
?full_page=true

# Specific element only
?selector=.main-content

# Dark mode
?dark_mode=true

# Retina / HiDPI
?device_scale_factor=2

JavaScript Wait Strategies

Modern sites need time to load dynamic content. SnapAPI supports multiple wait strategies to ensure you capture the fully-rendered page:

# Wait for network to go idle (best for SPAs)
?wait_until=networkidle

# Wait for a specific CSS selector to appear
?wait_for=.hero-section

# Add a fixed delay in milliseconds
?delay=2000

# Wait for a specific URL to load
?wait_for_url=https://example.com/api/data

Authentication and Custom Headers

# Pass an Authorization header to screenshot protected pages
?headers={"Authorization":"Bearer your-token"}

# Custom cookies
?cookies=[{"name":"session","value":"abc123","domain":"example.com"}]

# Basic auth
?username=user&password=pass

Custom CSS and JavaScript Injection

# Hide cookie banners and chat widgets before capture
?css=.cookie-banner{display:none!important}.intercom-launcher{display:none}

# Run custom JS before screenshot
?js=document.querySelector('.modal').remove()

Node.js Example

const params = new URLSearchParams({
  access_key: process.env.SNAPAPI_KEY,
  url: 'https://example.com',
  format: 'png',
  width: '1280',
  full_page: 'true',
  delay: '500',
});
const res = await fetch(`https://api.snapapi.pics/v1/screenshot?${params}`);
const buffer = Buffer.from(await res.arrayBuffer());
require('fs').writeFileSync('screenshot.png', buffer);

Python Example

import requests, os

params = {
    'access_key': os.environ['SNAPAPI_KEY'],
    'url': 'https://example.com',
    'format': 'png',
    'width': 1280,
    'full_page': 'true',
}
r = requests.get('https://api.snapapi.pics/v1/screenshot', params=params)
with open('screenshot.png', 'wb') as f:
    f.write(r.content)

Response Headers

Every SnapAPI response includes headers to help you handle the result: Content-Type for the format (image/png, image/webp, application/pdf), X-Snap-Duration for render time in ms, X-Snap-Credits-Remaining for your remaining quota this month, and X-Snap-Request-Id for support tracing.

Pricing

Free: 200 captures/month, no credit card. Starter: $19/month for 5,000 captures. Pro: $79/month for 50,000. Business: $299/month for 500,000. All plans include all formats, all features, and all endpoints. See full pricing.

Start Free

Why SnapAPI Is the Best Website Screenshot API in 2026

There are a handful of screenshot APIs on the market. SnapAPI differentiates on three dimensions: speed, completeness, and price. The median screenshot generation time is under 1.2 seconds for standard pages. All features — full-page capture, device emulation, custom CSS injection, PDF generation, scraping, and AI analysis — are available on every plan including free. And pricing starts at zero, not at a $49/month minimum like most competitors.

Speed Benchmarks

Page Typep50p95
Simple static HTML0.6s1.1s
React/Vue SPA (networkidle)1.4s2.8s
Complex dashboard2.1s4.2s
Full-page long content1.8s3.5s
PDF generation (A4)2.0s3.8s

Ad Blocking and Cookie Banner Removal

Screenshots of real websites are often cluttered with cookie consent banners, ad units, and chat widgets. SnapAPI includes built-in ad blocking that removes most common ad networks automatically. For cookie banners, use the CSS injection parameter to hide them before capture, or pass block_ads=true to activate the built-in blocker. Clean screenshots require no post-processing.

Stealth Mode for Bot-Protected Sites

Some sites actively block headless browsers. SnapAPI's stealth mode uses the same techniques as puppeteer-extra-plugin-stealth to appear as a real Chrome browser: realistic browser fingerprints, proper WebGL and Canvas implementations, human-like timing, and residential IP routing. Enable it with stealth=true on the screenshot endpoint. Use stealth mode only on sites where you have permission to access programmatically.

Webhook Delivery

For long-running captures, use async mode: pass a webhook_url parameter and SnapAPI will POST the completed screenshot to your endpoint when it's ready. This eliminates timeout concerns for complex pages and lets you fire-and-forget screenshot jobs from your application. The webhook payload includes the image as a base64-encoded string plus metadata like render time and credits used.

CDN Storage Option

Instead of receiving the screenshot binary directly, you can have SnapAPI store the result in its CDN and return a public URL. Pass store=true and receive a JSON response with a url field pointing to the hosted image. The URL is valid for 24 hours by default. Useful for generating OG images, link previews, and email thumbnails where you need a publicly accessible URL rather than binary data.

Comparing SnapAPI to Competitors

FeatureSnapAPIScreenshotOneUrlboxApiflash
Free tier200/mo100/moNo100/mo
Starter price$19/mo$19/mo$49/mo$14/mo
PDF generationYesYesYesNo
Web scrapingYesNoNoNo
AI analysisYesNoNoNo
MCP serverYesNoNoNo
SDKs8 languages3 languages4 languages2 languages

Common Use Cases

Link preview thumbnails for bookmark and read-later apps. Open Graph image generation for blogs and marketing sites. Website monitoring and visual regression testing. PDF export for invoices, reports, and dashboards. Competitor monitoring and price tracking. Social media preview cards. E-commerce product page archiving. Content moderation screenshots. Legal evidence capture with timestamp. Automated visual QA in CI/CD pipelines.

MCP Server for AI Agents

SnapAPI is available as an MCP (Model Context Protocol) server, letting AI agents built on Claude, Cursor, VS Code, and other MCP-compatible tools take screenshots directly as part of automated workflows. Install with: npx snapapi-mcp. The MCP server exposes all SnapAPI endpoints as AI-callable tools — screenshot, scrape, extract, pdf, video, and analyze. This makes SnapAPI a natural fit for AI-powered browser automation without any custom integration code.

API Reliability and SLAs

SnapAPI runs on dedicated infrastructure with multiple browser pool workers, automatic failover, and a daily disk and browser health watchdog. Uptime is monitored continuously with instant alerts for any degradation. Business plan customers receive a 99.9% uptime SLA with credits for any downtime. All plans benefit from the same infrastructure — there are no second-class tiers on reliability.

Get Started in 2 Minutes

Sign up at snapapi.pics, verify your email, and your API key is ready. Make your first screenshot call immediately — no onboarding wizard, no sales call, no waiting for approval. The docs at snapapi.pics/docs cover every parameter with live examples you can run directly in the browser.

Website Screenshot API: FAQ

How long does a screenshot take? Median is under 1.2 seconds for standard pages. JavaScript-heavy SPAs with networkidle wait typically take 1.5 to 3 seconds. Add the delay parameter for sites that animate content in after load.

Can I screenshot localhost or internal URLs? Only publicly accessible URLs are supported. For local development testing, use a tunneling service like ngrok or Cloudflare Tunnel to expose your local server temporarily.

Does it handle infinite scroll? For full-page captures, SnapAPI scrolls the page before capturing to trigger lazy-loaded content. Pass full_page=true and a delay of 1000-2000ms for best results on infinite-scroll pages.

Can I capture authenticated pages? Yes. Pass session cookies via the cookies parameter, or use the headers parameter to include an Authorization header. For OAuth-protected pages, generate a short-lived token server-side and pass it as a query parameter in the URL.

What happens if the target page returns a 404? SnapAPI screenshots whatever the browser renders, including error pages. If you want to detect 404s before capturing, check the response HTTP status using the metadata endpoint. For monitoring use cases, a screenshot of the error page is often exactly what you want as visual evidence.

Is there a SDK? Yes. JavaScript/TypeScript SDK is available as snapapi-js on npm. SDKs also available for Python, Go, PHP, Swift, Kotlin, Ruby, and Java at github.com/Sleywill. The REST API works identically from any language that can make HTTP requests, so SDKs are optional convenience wrappers.

What is the rate limit? Requests are rate-limited per account based on your plan. Burst spikes are accommodated. If you hit the rate limit you receive a 429 response with a Retry-After header indicating when to retry. For high-concurrency workloads, contact the team for a dedicated plan.

Why Teams Choose SnapAPI Over DIY Solutions

Building your own screenshot infrastructure sounds simple until you hit the edge cases: pages that load asynchronously, SPAs that need JavaScript execution, sites protected by anti-bot measures, or documents that require custom fonts. SnapAPI handles all of these automatically so your team can stay focused on your core product. With sub-second response times, 99.9% uptime SLAs, and automatic browser updates, you get enterprise-grade reliability without the operational overhead of managing Puppeteer or Playwright clusters yourself.