API Comparison

Website Screenshot API: Best Options for Developers in 2026

April 202612 min readSnapAPI · ScreenshotOne · Urlbox · Apiflash

You need screenshots of web pages — rendered, full-page, with JavaScript executed. You don't want to maintain a Chromium cluster. Here's a practical comparison of every major screenshot API, with real code and real pricing.

Why Use a Screenshot API Instead of Self-Hosting?

Running Playwright or Puppeteer yourself sounds simple until you're debugging why Chromium consumes 4GB of RAM, why screenshots time out on SPAs, or why your Lambda function exceeds the 512MB memory limit. A screenshot API offloads all of that:

The cost break-even point: if your engineering time is worth $100/hour, a screenshot API pays for itself after about 2 hours of debugging headless Chrome.

What to Look For

FeatureWhy It Matters
SPA / JavaScript renderingSites built with React, Vue, Next.js require full JS execution
Anti-bot / stealth modeMany sites block headless browsers; stealth bypasses detection
wait_for optionsnetworkidle vs domcontentloaded — determines render completeness
Full-page captureCaptures entire scrollable page, not just viewport
Custom viewport / device emulationMobile screenshots, responsive testing
PDF generationSome APIs bundle PDF and screenshot in one endpoint
Webhook / asyncLong captures return immediately, webhook fires when ready
Custom JS/CSS injectionRemove popups, hide dynamic content before capture

1. SnapAPI Best Value

snapapi.pics

Screenshots, scraping, content extraction, PDF, video recording, and AI page analysis in one API.

PlanCalls/moPricePer-call cost
Free200Free
Starter5,000$19/mo$0.0038
Pro50,000$79/mo$0.0016
Business500,000$299/mo$0.0006
✓ Pros
  • Best price at scale ($79/50K vs $79/30K at ScreenshotOne)
  • Stealth mode for anti-bot sites
  • PDF, video, scrape, extract all in one API
  • MCP server — works with Claude/Cursor/VS Code
  • Custom JS/CSS injection
  • 30+ device presets
✗ Cons
  • Newer service (smaller community)
  • No managed proxy network (built-in stealth only)
// SnapAPI — screenshot endpoint
const response = await fetch('https://api.snapapi.pics/v1/screenshot', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'sk_live_YOUR_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    url: 'https://example.com',
    full_page: true,
    width: 1280,
    height: 800,
    wait_for: 'networkidle',
    block_ads: true,
    format: 'png'   // or 'jpeg', 'webp'
  })
});

const data = await response.json();
// data.screenshot = base64-encoded PNG
const imageBuffer = Buffer.from(data.screenshot, 'base64');
require('fs').writeFileSync('screenshot.png', imageBuffer);
// With device emulation (iPhone 14)
const response = await fetch('https://api.snapapi.pics/v1/screenshot', {
  method: 'POST',
  headers: { 'X-Api-Key': 'sk_live_YOUR_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    url: 'https://example.com',
    device: 'iPhone 14',
    wait_for: 'networkidle',
    stealth: true     // Bypass anti-bot detection
  })
});
const { screenshot } = await response.json();

2. ScreenshotOne

screenshotone.com

Established screenshot API with strong documentation and a large user community.

PlanCalls/moPricePer-call cost
Hobby2,500$19/mo$0.0076
Startup30,000$79/mo$0.0026
Business150,000$299/mo$0.0020
✓ Pros
  • Mature API, good docs
  • AI-powered screenshot features
  • Signed URLs for caching
  • SDKs in 6+ languages
✗ Cons
  • 30K calls for $79 (vs SnapAPI's 50K)
  • No built-in PDF generation
  • No scraping/extraction endpoint
// ScreenshotOne
const params = new URLSearchParams({
  access_key: 'YOUR_ACCESS_KEY',
  url: 'https://example.com',
  full_page: true,
  viewport_width: 1280,
  viewport_height: 800,
  format: 'png',
  block_ads: true,
  delay: 1000
});
const imageUrl = `https://api.screenshotone.com/take?${params}`;
// GET request returns the image directly

3. Urlbox

urlbox.io

Feature-rich screenshot API with extensive render options and a long track record.

PlanCalls/moPricePer-call cost
Starter3,000$29/mo$0.0097
Growth20,000$99/mo$0.0050
Scale100,000$299/mo$0.0030
✓ Pros
  • Comprehensive render options
  • Blocking specific elements by CSS selector
  • Retina display support
  • Asynchronous webhooks
✗ Cons
  • Most expensive per-call at volume
  • No extraction or PDF bundled
// Urlbox — signed URL approach
const crypto = require('crypto');
const API_KEY = 'YOUR_API_KEY';
const SECRET = 'YOUR_SECRET';

const options = new URLSearchParams({
  url: 'https://example.com',
  full_page: true,
  width: 1280,
  format: 'png',
  block_ads: true
});

const token = crypto
  .createHmac('sha256', SECRET)
  .update(options.toString())
  .digest('hex');

const screenshotUrl = `https://api.urlbox.io/v1/${API_KEY}/${token}/png?${options}`;

4. Apiflash

apiflash.com

Simple, affordable screenshot API built on headless Chrome.

PlanCalls/moPrice
Free100Free
Basic2,000$10/mo
Medium20,000$50/mo
Advanced50,000$85/mo
✓ Pros
  • Very simple API (query params only)
  • Competitive pricing
  • Response caching
✗ Cons
  • No stealth mode
  • No extraction or PDF
  • Limited JS injection
// Apiflash — query param API
const params = new URLSearchParams({
  access_key: 'YOUR_KEY',
  url: 'https://example.com',
  full_page: true,
  width: 1280,
  format: 'png',
  fresh: false,           // Use cached version if available
  response_type: 'json'   // Get base64 in JSON instead of raw image
});

const res = await fetch(`https://api.apiflash.com/v1/urltoimage?${params}`);
const { url: imageUrl } = await res.json();

microlink.io

Link preview and metadata API that also captures screenshots.

PlanCalls/moPrice
Free50/dayFree
ProUnlimited$9/mo
✓ Pros
  • Very cheap for low volume
  • Includes meta tags, favicons, OG data
  • PDF export included
✗ Cons
  • Limited screenshot customization
  • No stealth or device emulation
  • Rate limits on free tier
// Microlink — returns metadata + screenshot URL
const params = new URLSearchParams({
  url: 'https://example.com',
  screenshot: true,
  meta: false,
  embed: 'screenshot.url'
});
const res = await fetch(`https://api.microlink.io?${params}`);
const { data } = await res.json();
console.log(data.screenshot.url); // CDN URL to the screenshot

6. Self-Hosted Playwright (for comparison)

Worth knowing what you're replacing. A minimal self-hosted screenshot service:

// server.js — DIY screenshot endpoint
const { chromium } = require('playwright');
const express = require('express');
const app = express();
let browser;

app.use(express.json());

app.post('/screenshot', async (req, res) => {
  const { url, fullPage = true, width = 1280 } = req.body;
  const page = await browser.newPage();
  try {
    await page.setViewportSize({ width, height: 800 });
    await page.goto(url, { waitUntil: 'networkidle' });
    const buffer = await page.screenshot({ fullPage, type: 'png' });
    res.set('Content-Type', 'image/png');
    res.send(buffer);
  } finally {
    await page.close();
  }
});

(async () => {
  browser = await chromium.launch();
  app.listen(3000);
  console.log('Running on :3000');
})();

This works for dev. In production you'll need: browser pool management, crash recovery, memory limits, Docker + shm, Lambda workarounds, anti-bot evasion, update schedules. That's why the APIs exist.

Full Comparison Table

API50K calls/moSPA supportStealthPDFScrapingDevice emulation
SnapAPI$79✅ 30+ presets
ScreenshotOne~$120Partial
Urlbox~$180
Apiflash$85Limited
Microlink$9 (unlimited)Partial

Which API for Which Use Case?

OG Image Generation

You're rendering custom HTML to PNG for social sharing. You need speed (sub-500ms), reliability, and the ability to inject custom HTML.

Best choice: SnapAPI (use the html parameter to pass raw HTML instead of a URL) or ScreenshotOne. Both support custom viewport and output format.

Website Monitoring / Visual Regression

Scheduled captures every hour or day to detect page changes. You need consistent rendering, full-page support, and webhook delivery for async.

Best choice: SnapAPI or Urlbox. Both support webhooks and full-page. SnapAPI is cheaper at volume.

SaaS Dashboard Exports

Users export their dashboards as PNG or PDF. You're capturing authenticated pages. You need cookie/session passing and clean rendering of charts.

Best choice: SnapAPI (pass cookies via headers) or Urlbox (signed URLs + cookie support). Microlink won't work well here.

Competitive Intelligence / Research

Capturing competitor websites, many of which block headless browsers. You need stealth mode.

Best choice: SnapAPI (built-in stealth, "stealth": true). ScreenshotOne has partial anti-bot support. Others will get blocked on Cloudflare-protected sites.

Link Previews (Thumbnails)

User pastes a URL, you show a thumbnail. Low volume, speed matters, cost matters at scale.

Best choice: Microlink for very low volume ($9/mo unlimited). SnapAPI for higher volume with caching on your side.

Quick start with SnapAPI: Free tier gives you 200 calls/month — enough to test your integration completely. No credit card required. Create free account →

Quickstart: SnapAPI in 5 Minutes

// 1. Install nothing — pure fetch
// 2. Get key at snapapi.pics/register.html
// 3. Make your first call:

const screenshot = await fetch('https://api.snapapi.pics/v1/screenshot', {
  method: 'POST',
  headers: { 'X-Api-Key': 'sk_live_YOUR_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({ url: 'https://news.ycombinator.com', full_page: true })
}).then(r => r.json()).then(d => d.screenshot);

// screenshot is a base64 PNG
require('fs').writeFileSync('hn.png', Buffer.from(screenshot, 'base64'));
console.log('Saved hn.png');
# Python equivalent
import requests, base64

resp = requests.post(
    'https://api.snapapi.pics/v1/screenshot',
    headers={'X-Api-Key': 'sk_live_YOUR_KEY'},
    json={'url': 'https://news.ycombinator.com', 'full_page': True}
)
with open('hn.png', 'wb') as f:
    f.write(base64.b64decode(resp.json()['screenshot']))
print('Saved hn.png')

Conclusion

If you're evaluating screenshot APIs in 2026, SnapAPI is the strongest option on price-per-call at volume, and the only one that bundles screenshots, scraping, extraction, PDF generation, and AI analysis into a single API. ScreenshotOne is a solid alternative with a larger community. Urlbox is the most feature-complete but the priciest. Apiflash wins for simplicity if you don't need stealth. Microlink is unbeatable for <$9/mo unlimited if your volume is low and your requirements basic.