Website Screenshot API - Fast & Cheap (PNG, JPEG, WebP, PDF)
Pricing
from $0.80 / 1,000 screenshots
Website Screenshot API - Fast & Cheap (PNG, JPEG, WebP, PDF)
Capture screenshots of any website in bulk: full page or viewport, desktop/tablet/mobile presets, PNG/JPEG/WebP/PDF, dark mode, cookie-banner and ad blocking. Pay only per successful screenshot. Works great with AI agents and MCP.
Pricing
from $0.80 / 1,000 screenshots
Rating
0.0
(0)
Developer
NorthLedger Tools
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Website Screenshot API: fast, cheap, bulk (PNG, JPEG, WebP, PDF)
Website Screenshot API captures screenshots of any web page in bulk. Give it a list of URLs and it returns one image per page: full-page or viewport, desktop, tablet or mobile, PNG, JPEG, WebP or PDF. Cookie banners and ads are hidden automatically. You pay only for screenshots that succeed (US$0.80 per 1,000), plus standard Apify platform usage.
It runs a real Chromium browser (Playwright), so JavaScript-heavy sites, single-page apps and lazy-loaded images render the way a visitor sees them.
What can this website screenshot tool do?
- 📸 Bulk screenshots: send 1 URL or 10,000. Pages are captured in parallel.
- 📄 Full-page or viewport: scroll-and-capture whole pages (lazy images are loaded first) or only the visible area.
- 📱 Device presets: Desktop 1366×768, Desktop HD 1920×1080, Laptop, Tablet (iPad), Mobile (iPhone 13), Mobile (Pixel 7). Custom width, height and retina pixel ratio are also available.
- 🖼️ PNG, JPEG, WebP or PDF, with adjustable quality.
- 🍪 Hide cookie banners (OneTrust, Cookiebot, Didomi, Quantcast, Sourcepoint, generic "Accept" pop-ups) and 🚫 block ads and trackers (best effort).
- 🌙 Dark mode (
prefers-color-scheme: dark). - ⏱️ Wait options: extra delay, wait for a CSS selector, or wait for network idle.
- 🎯 Element screenshots: capture a single element, e.g.
headeror.pricing-table. - 🙈 Hide elements such as chat widgets or sticky headers.
- 🔒 Safe by default: only public
http(s)URLs; private and local network addresses are refused. - 🌍 Optional proxy to capture a site as seen from another country.
Use cases
- Visual monitoring and archiving: snapshot competitor pages, landing pages or prices daily with an Apify schedule.
- SEO and marketing reports: thumbnails of SERP results, client sites or backlinks.
- QA and responsive testing: compare desktop vs mobile layouts and dark mode.
- Link previews and directories: generate thumbnails for bookmarks, catalogs or newsletters.
- AI agents and LLM vision: let an agent "look" at a web page; feed the image URL to a vision model.
- Compliance and evidence: dated captures of web pages (each item has a
capturedAttimestamp).
How to use it
- Click Try for free.
- Paste your URLs (one per line).
- Pick full-page or viewport, a device and an image format.
- Click Start. The images appear in the Output tab, each with a direct link.
Example input
{"urls": ["https://apify.com", "https://en.wikipedia.org/wiki/Screenshot"],"fullPage": true,"devicePreset": "mobile","format": "webp","quality": 80,"darkMode": false,"blockCookieBanners": true,"blockAds": true,"delayMs": 500,"timeoutSecs": 30}
Example output (one dataset item per URL)
{"url": "https://apify.com/","status": "success","screenshotUrl": "https://api.apify.com/v2/key-value-stores/AbC123/records/screenshot-apify.com-d385e6e04d.webp","screenshotKey": "screenshot-apify.com-d385e6e04d.webp","finalUrl": "https://apify.com/","httpStatus": 200,"title": "Apify: Full-stack web scraping and data extraction platform","width": 390,"height": 5461,"deviceScaleFactor": 3,"format": "webp","fullPage": true,"sizeBytes": 412345,"durationMs": 4120,"error": null,"errorType": null,"capturedAt": "2026-10-18T13:05:00.000Z"}
Failed pages are still listed, with status: "failed", an error message and an errorType (TIMEOUT, DNS_ERROR, CONNECTION_ERROR, SSL_ERROR, HTTP_ERROR, SELECTOR_TIMEOUT, SELECTOR_NOT_FOUND, INVALID_URL, BLOCKED_URL). Failed pages are never charged.
The images are stored in the run's default key-value store. Open screenshotUrl directly, or download them all from the Storage tab.
Pricing
Pay per event, with no subscription:
| Event | Price |
|---|---|
| Successful screenshot (any format) | US$0.0008 (US$0.80 per 1,000) |
| Actor start | US$0.00005 per run (per GB of memory) |
- Failed, timed-out and skipped pages are free.
- Standard Apify platform usage (compute and storage) is billed separately at your plan's rates. Viewport captures at the default 2 GB usually take only a few seconds.
- Set Maximum cost per run in the run options to cap spending. The Actor stops cleanly when the limit is reached.
Example: 1,000 screenshots cost US$0.80 in event fees, plus platform usage.
Use it from AI agents, MCP and the API
This Actor is a good fit for agents: one URL in, one image URL out, with structured errors.
Apify MCP server (Claude, Cursor, VS Code, any MCP client): add https://mcp.apify.com/?actors=northledgertools/website-screenshot as an MCP server. Your agent gets a tool that takes urls and returns screenshot links.
HTTP API (synchronous): run it and get the dataset back in one call:
curl -X POST "https://api.apify.com/v2/acts/northledgertools~website-screenshot/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"urls":["https://example.com"],"format":"jpeg","quality":70}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('northledgertools/website-screenshot').call({ urls: ['https://example.com'], fullPage: true });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].screenshotUrl);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("northledgertools/website-screenshot").call(run_input={"urls": ["https://example.com"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["screenshotUrl"])
It also works with Make, Zapier, n8n, LangChain and LlamaIndex through Apify's integrations.
Tips for the best screenshots
- Cheaper and faster: use JPEG or WebP at quality 70–80, and viewport mode when you don't need the whole page.
- Charts and animations: raise
delayMs(e.g. 2000) or setwaitForSelector. - Very long pages are cut at
maxFullPageHeight(15,000 px by default); the item then hasfullPageTruncated: true. - Error pages: by default, pages that return HTTP 4xx/5xx are still captured, since a screenshot of an error page is often useful. Turn on Fail on HTTP errors to skip them (they are then free).
- Memory: 1 GB is enough for most jobs (about 2 pages in parallel). Use 2–4 GB for big batches of full-page captures.
Limitations
- Cookie-banner and ad blocking is best effort; unusual pop-ups may still show. Use Hide elements for those.
- Sites behind logins, CAPTCHAs or strong bot protection may show a challenge page instead of the content.
- Dark mode only works on sites that support
prefers-color-scheme.
FAQ
Is it legal to screenshot websites? Capturing publicly available pages is generally fine, but respect each site's terms and copyright and don't capture personal data without a legal basis.
How long are images kept? As long as your Apify plan keeps the run's storage (7 days on the free plan). Download them, or copy them to your own storage, if you need them longer.
Can I request a feature? Yes, open an issue in the Issues tab. Requests are usually handled quickly.