Capture any website as PNG, JPEG, WebP, or PDF with three lines of JavaScript. No Puppeteer to babysit, no Chromium binary in your deploy.
200 free screenshots/month. No credit card required.
Install the official SDK from npm, paste your API key, and capture. TypeScript types are included.
npm install snaprender
import SnapRender from 'snaprender';
import fs from 'node:fs';
const snap = new SnapRender({ apiKey: 'sk_live_your_key_here' });
const buffer = await snap.capture({ url: 'https://example.com' });
fs.writeFileSync('screenshot.png', buffer);
const buffer = await snap.capture({
url: 'https://example.com',
format: 'jpeg',
fullPage: true,
darkMode: true,
device: 'iphone_15_pro',
cache: true
});
Ads and cookie banners are blocked by default. The same client also handles signed URLs, content extraction, batch jobs, and webhooks.
Puppeteer is a fine library for browser automation, but using it just to capture screenshots brings a lot of baggage. npm install puppeteer downloads a 170MB+ Chromium build. In production you have to keep that browser alive: zombie processes after crashed renders, memory that climbs until the container is killed, and page.goto timeouts on slow third-party scripts. None of that is your product. It is plumbing.
With a screenshot API, the browser runs on our side. Your Node.js process makes one HTTPS request and receives the finished image. Crash recovery, browser updates, font rendering, ad blocking, and cookie banner removal are already handled. Your deploy artifact stays small and your dependency tree stays clean: the SDK has no Chromium download at all.
If you are currently debugging Puppeteer memory issues, we wrote up how a customer moved off a self-hosted setup in this case study, and the cost math lives in Puppeteer on Lambda vs an API.
Running headless Chrome inside AWS Lambda or Vercel functions means special builds like chrome-aws-lambda or @sparticuz/chromium, deployment size limits, version pinning between Puppeteer and the Chromium layer, and painful cold starts while the browser boots. Every Node.js runtime upgrade risks breaking the whole stack.
An HTTP call has none of those problems. The snaprender package works in any environment that can reach the internet: Lambda, Vercel, Netlify functions, Cloud Run, Render, Railway, a cron container, or a plain Express server. Function bundles stay under a megabyte and cold starts stay fast, because there is no browser to start.
| SnapRender SDK | Self-hosted Puppeteer | |
|---|---|---|
| Install size | Under 1MB | 170MB+ (bundled Chromium) |
| Runs on Lambda/Vercel | Yes, no setup | Special Chromium layers required |
| Memory management | Not your problem | Leaks, zombie processes, restarts |
| Cookie banners and ads | Blocked by default | Custom code per site |
| Caching | Built-in, opt-in per request | Build it yourself |
| Browser updates | Handled for you | Yours to test and ship |
Prefer to verify the output first? Try the free website screenshot tool in your browser. It uses the same rendering engine as the API.
Install the snaprender package from npm, create a client with your API key, and call snap.capture({ url }). The rendering happens on SnapRender's servers in real Chrome, so your Node.js app never launches a browser. You get the screenshot back as a Buffer in a few seconds. There is no Chromium download, no browser lifecycle to manage, and no memory leaks to debug.
Yes. Because the SDK only makes HTTPS requests, it runs in any Node.js environment: AWS Lambda, Vercel functions, Cloudflare Workers with node compatibility, Docker containers, and plain servers. There is no chrome-aws-lambda layer to maintain, no 50MB deployment limit problem, and no cold start penalty from booting Chromium.
Yes. The package ships with full TypeScript definitions for every method and option: capture, signed URLs, content extraction, batch jobs, and webhooks. You get autocomplete and compile-time checks without installing a separate @types package.
Yes. Pass fullPage: true to capture the entire scrollable page instead of just the viewport. You can combine it with format, darkMode, device emulation presets like iphone_15_pro, and ad or cookie banner blocking, which are on by default.
Yes. The free plan includes 200 screenshots per month with every feature enabled: all formats, full-page capture, device emulation, dark mode, and caching. No credit card is required to sign up.
The same API has official quickstarts for other languages.
Related guides: Full-page screenshots in Node.js and the Puppeteer screenshot guide.
npm install, paste your key, capture. 200 free screenshots per month, no credit card.