Skip to content
SnapRender
The new standard for website screenshotsWorks with Claude, Cursor and Codex

Screenshot any website with one API call.

Real Chrome captures as PNG, JPEG, WebP or PDF, cookie walls cleared. Watch any page for changes, or give your AI agent eyes on the web.

Or try

Free, no sign-up. Rendered in real Chrome in a few seconds.

200 captures a month freeNo card

  1. linear.app
  2. behance.net
  3. github.com

See the content. Not the cookie wall.

Most of the web greets a fresh browser with a consent dialog. SnapRender clears it before the shutter fires, on every plan, with nothing to configure.

  • Consent dialogsFound and removed, whichever vendor
  • Ads and trackersBlocked before they load
  • Lazy imagesScrolled into view and loaded
  • Web fontsWaited for, so text renders right
SnapRender capture of spiegel.de with the consent wall removed The same page in a plain browser, covered by a consent wall Plain headless browser SnapRender
spiegel.de, captured Oct 6, 2026

Delete your screenshot server.

Keeping Chrome alive in production is a job of its own. SnapRender does that job: every problem your script handles by hand is solved before the image comes back.

  1. A server just for Chrome, its fonts and its system libraries
  2. Some pages never go quiet, so the call hangs
  3. A different consent dialog on every site, changed every month
  4. Lazy images stay blank until something scrolls
  5. Web fonts arrive late and the text renders in a fallback
  6. Crashes, retries and memory that creeps up until the box restarts

35 lines to keep alive

screenshot.jsthe way it used to be done
import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
  args: ['--no-sandbox', '--disable-dev-shm-usage'],
});

export async function screenshot(url) {
  const page = await browser.newPage();
  try {
    await page.setViewport({ width: 1440, height: 900 });
    await page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 });

    // Cookie walls: one selector per consent vendor
    for (const sel of ['#onetrust-accept-btn-handler', '.fc-cta-consent', '[aria-label="Accept all"]']) {
      const button = await page.$(sel);
      if (button) { await button.click(); break; }
    }

    // Lazy images only load once they are scrolled into view
    await page.evaluate(async () => {
      for (let y = 0; y < document.body.scrollHeight; y += 600) {
        window.scrollTo(0, y);
        await new Promise((r) => setTimeout(r, 120));
      }
      window.scrollTo(0, 0);
    });
    await page.evaluate(() => document.fonts.ready);
    return await page.screenshot({ type: 'png' });
  } catch (err) {
    // Retry? Restart Chrome? Page someone?
    throw err;
  } finally {
    await page.close();
  }
}

The same result, one call

curl "https://app.snap-render.com/v1/screenshot?url=example.com" \
  -H "X-API-Key: $SNAPRENDER_KEY" -o page.png

200 OKimage/pngX-Response-Time: 2481 msX-Remaining-Credits: 199

One call. Every output.

Change a parameter and see what comes back. Every frame is a real capture of tailwindcss.com.

Playing a demo. Click any option to take over.

Device
Theme
Area
Format

Request

GET /v1/screenshot?url=tailwindcss.com

Response

200 OK image/png
Capture of tailwindcss.com on desktop, light theme

Watch any page. Hear the moment it changes.

Put a URL on a schedule and SnapRender captures it hourly, daily or weekly, keeps every version with its SHA-256, compares it with the last one and emails you or calls your endpoint the moment it changes. Set it up in the dashboard, no code needed.

  • Hourly, daily, weeklyThe free plan schedules daily or weekly
  • Pixel diff on every captureAlert on any change, down to one changed number
  • Email or signed webhookBefore and after side by side in the dashboard

Watch a page free

Scheduled capturesCompetitor trackingAgency reports

Schedulestime-lapse next frame25:00
  • news.ycombinator.comsample runwatching
  • github.com/trendingsample run0.33% changed, under 0.5%: no webhook
Capture of news.ycombinator.com at 00:59 Capture of news.ycombinator.com at 01:24 Capture of news.ycombinator.com at 01:49 Capture of news.ycombinator.com at 02:14 news.ycombinator.com · 02:14

change.detectednews.ycombinator.com · 02:14

6.5% of the page changed

POST your-app.com/hooks/snaprender
X-SnapRender-Event: change.detected
{
  "url": "https://news.ycombinator.com/",
  "status": "completed",
  "changed": true,
  "diffPercent": 6.479,
  "threshold": 0.5,
  "sha256": "bd36b3a89a33c65b…",
  "capturedAt": "2026-10-07T02:14:00+03:00"
}

Start free. About $0.001 a capture at scale.

Every plan includes every feature. Save 17% with yearly billing, which is two months free.

Get free API key No card to start. Cancel any time from the dashboard. All plan details

The same workload elsewhere

Captures a monthFree plan2,00010,00050,000200,000
SnapRender200$9$29$79$199
ScreenshotOne100$17$79$259$859
Urlbox (Hi-Fi)None$49$67$240$800
ApiFlash100$35$35$180Quote
CaptureKit100$16$29$89$1,214
Microlink25 a day$49$49$90$300
htmlcsstoimage50$24$69$249$749

Cheapest published monthly plan that covers each volume, from each vendor's pricing page on October 6 and 7, 2026, in USD. Urlbox lists its Hi-Fi plans; ApiFlash quotes 200,000 a month on request; Microlink stops at its plan's cap. Detailed comparisons

Your AI agent can see the web too.

Add the hosted MCP server and Claude, Cursor or Codex can take screenshots and read pages as markdown. There is no key to paste.

Or let your agent set itself up. Paste one prompt; it adds the server, walks you through sign-in and takes a test capture.

Screenshots for AI agentsEvery AI client guide

AI agent? Start here: snap-render.com/llms.txt

$claude mcp add --transport http --scope user snaprender \https://app.snap-render.com/mcp

Then type /mcp, choose snaprender and Authenticate.

Everything is on every plan.

No feature tiers. Plans differ only in volume and in how many schedules they keep.

Capture

PNG, JPEG, WebP or PDF. Any viewport from 320 to 3840 px, full pages up to 10,000 px, iPhone, Pixel, iPad and MacBook presets, dark mode.

device=iphone_15_pro&full_page=true&dark_mode=true

Clean

Consent dialogs removed, ads blocked, lazy images loaded and web fonts waited for. On by default, off per request.

block_cookie_banners=true&block_ads=true
## Built for the modern web.

Tailwind is unapologetically modern, and takes advantage of all the latest and greatest CSS features…

## Ship faster and smaller.

Tailwind automatically removes all unused CSS…

Read

The same render as markdown, the main article, links or metadata, for your code or your model.

GET /v1/extract?type=markdown

Scale

Batches of 50 URLs with a webhook when they finish, schedules, caching for up to 30 days and signed links.

POST /v1/screenshot/batch

Run safely

99.9% uptime with a public status page, private networks refused, limits in every response, signed webhooks.

GET /health

Node.jsnpm install snaprender

Pythonpip install snaprender

Gogo get github.com/User0856/snaprender-go

MCPhttps://app.snap-render.com/mcp

Connect

Official SDKs, a hosted MCP server with 11 tools, an OpenAPI spec, a Postman collection, an n8n node and RapidAPI.

API referenceSDKs and integrationsContent extractionBatch screenshotsHTML to PDF

Questions developers ask.

How does the screenshot API work?

Send a GET request with the page URL and your API key. SnapRender opens the page in real Chrome, clears cookie walls and ads, waits for images and fonts, and returns the image. One HTTP call, with no browser to run yourself.

Is there a free plan?

Yes. The free plan includes 200 captures a month with every feature, and no credit card. Sign in with Google, GitHub or email and your API key is ready at once.

What formats and sizes are supported?

PNG, JPEG, WebP and PDF, from 320 to 3840 pixels wide, with full-page captures up to 32,768 pixels tall. Device presets cover iPhone, Pixel, iPad and MacBook, and dark_mode=true captures the page in its dark theme.

How fast are screenshots?

A fresh capture usually takes 2 to 5 seconds, depending on the page. With caching on, a repeat request for the same page returns in well under a second.

Do cookie banners and ads show up in the screenshot?

No, by default they are removed before the capture. You can turn either off per request with block_cookie_banners=false or block_ads=false, and hide anything else with a CSS selector.

Can I watch a page for changes?

Yes. Scheduled captures render a page hourly, daily or weekly, keep every capture with its SHA-256, compare it with the previous one, and send an email, a signed change.detected webhook, or both when the share of changed pixels passes your threshold. Set them up in the dashboard or with the API. Every plan includes them; the free plan runs one schedule, daily or weekly.

Can it capture pages behind a login or a firewall?

SnapRender opens pages without your browser session, so it captures public pages, preview deployments included. You can send custom request headers with POST /v1/screenshot. If a site you own shows a security check, one firewall rule lets SnapRender through; the guide is at snap-render.com/docs/allow-snaprender.

What happens when I reach my monthly limit?

Requests return a clear quota message with the date your allowance resets, and nothing is charged automatically. Upgrade from the dashboard whenever you need more, or wait for the next month.

Do you have SDKs?

Yes: official SDKs for Node.js, Python and Go. The REST API works from any language, and there is an OpenAPI spec, a Postman collection and an n8n node.

Can AI agents use SnapRender?

Yes. The hosted MCP server at https://app.snap-render.com/mcp gives Claude, Cursor, Codex, VS Code and other clients 11 tools, including screenshots, device emulation and page content as markdown. You sign in through your browser the first time, so there is no key to paste.

What is a good alternative to running Puppeteer for screenshots?

A managed screenshot API. Instead of keeping Chrome, its fonts, memory and consent-dialog workarounds alive yourself, you make one call and get the finished image. The free plan covers most development and small production workloads.

How does SnapRender compare on price?

At 2,000 captures a month SnapRender is $9; at 50,000 it is $79; at 200,000 it is $199, about $0.001 a capture. Every feature is on every plan, and annual billing gives two months free. The table on this page compares published prices from other screenshot APIs.

Your first capture is one call away.

Your free API key is ready in 30 seconds.