Official Node.js SDK on npm

Screenshot API
for Node.js

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.

Node.js quickstart: screenshot in 3 lines

Install the official SDK from npm, paste your API key, and capture. TypeScript types are included.

Install
npm install snaprender
screenshot.mjs
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);
Full page, mobile device, dark mode, cached
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.

Take a screenshot in Node.js without Puppeteer

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.

Works where Puppeteer does not: Lambda, Vercel, edge

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.

Node.js screenshot API FAQ

How do I take a screenshot of a website in Node.js without Puppeteer?+

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.

Does the Node.js SDK work on AWS Lambda and Vercel?+

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.

Does the snaprender npm package include TypeScript types?+

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.

Can I capture full-page screenshots in Node.js?+

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.

Is there a free tier for the Node.js screenshot API?+

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.

Not writing JavaScript today?

The same API has official quickstarts for other languages.

Related guides: Full-page screenshots in Node.js and the Puppeteer screenshot guide.

Ship screenshots, not browser infrastructure

npm install, paste your key, capture. 200 free screenshots per month, no credit card.