Bulk Website Screenshot: Full-Page & Mobile avatar

Bulk Website Screenshot: Full-Page & Mobile

Pricing

from $1.75 / 1,000 screenshots

Go to Apify Store
Bulk Website Screenshot: Full-Page & Mobile

Bulk Website Screenshot: Full-Page & Mobile

Take reliable screenshots of any list of public URLs: full-page, viewport, mobile/tablet or a single element. Lazy-load scrolling, cookie-banner hiding, auto-retries. Pay only for successful screenshots; failed URLs are never charged.

Pricing

from $1.75 / 1,000 screenshots

Rating

0.0

(0)

Developer

Mogul Tools

Mogul Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Bulk Website Screenshot API: Full-Page, Mobile & Element Screenshots (Pay Only for Success)

Turn any list of public URLs into clean, full-page screenshots, with retries, lazy-load scrolling and cookie-banner hiding built in. You're only charged for screenshots that actually worked. Timeouts, DNS errors, HTTP 4xx/5xx and anti-bot challenge pages are logged in the dataset with the reason, and they're free.

Use it as a website screenshot API, a bulk URL to PNG/JPEG converter, a full-page screenshot tool for SEO and QA, or a visual tool for AI agents (via the Apify MCP server). Paste URLs, click Start, download the images.

Quick start (about 1 minute)

  1. Paste your URLs into URLs (one per line; example.com works too).
  2. Pick a Device / viewport (desktop, laptop, tablet, mobile or custom) and keep Full-page screenshot on.
  3. Click Start. Open the Screenshots view in the Output tab to preview, or export the list as CSV/Excel/JSON with direct image links.

What can it do?

  • 📸 Full-page or viewport screenshots of up to thousands of URLs per run
  • 📱 Device emulation: desktop 1920×1080, laptop 1366×768, tablet, iPhone-size mobile (retina), or any custom size
  • 🎯 Element screenshots: capture just #pricing, header, main, or any CSS selector
  • 🍪 Hides cookie/consent pop-ups (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast and more) with CSS. Nothing gets clicked or accepted for you
  • 🖼️ Lazy-loaded images get triggered by auto-scrolling before the capture
  • 🌙 Dark mode (prefers-color-scheme: dark), PNG or JPEG with a quality setting, and your own selectors to hide (chat widgets, sticky bars)
  • 🔁 Automatic retries in a fresh browser context, with no retries wasted on permanent errors
  • 🧾 Honest output: every input URL gets a row with the HTTP status, final URL after redirects, page title, size, attempts and the error reason if it failed

Who uses it?

  • SEO & marketing teams: archive landing pages and competitor homepages, and build visual reports
  • QA & developers: visual checks across desktop and mobile, and before/after deploy snapshots
  • Agencies: monthly client-site snapshots and proof of ad or page placement
  • AI agents & automations: give an LLM a picture of a page. It works with the Apify API, MCP server, Make, Zapier and n8n
GoalSuggested settings
Competitor homepage archive (weekly)viewport: desktop, fullPage: true, schedule the run in Apify
Mobile-friendliness check for a client listviewport: mobile, fullPage: false
Pricing-page monitoringelementSelector: "#pricing" (or your selector), format: jpeg
Lead-gen / cold-outreach visuals ("here's your site on mobile")viewport: mobile, format: jpeg, jpegQuality: 70
Dark-mode QAdarkMode: true
Thumbnails for a link directoryfullPage: false, format: jpeg, jpegQuality: 60

How much does it cost?

Pay per successful screenshot: $3.00 per 1,000 on the Free plan, $2.50 on Starter (Bronze), $1.75 on Scale (Silver), and $1.75 on Business (Gold). No platform-usage fees on top. Failed, blocked and error pages cost $0.

ScreenshotsApprox. price
100$0.30
1,000$3.00
10,000$30.00

Tip: set Max total charge on the run to cap your spend. The Actor stops cleanly when it hits the cap.

Input

FieldDefaultNotes
urls–List of URLs (example.com works too)
viewportdesktopdesktop, laptop, tablet, mobile, custom
fullPagetrueWhole page vs. visible area
formatpngpng or jpeg (jpegQuality 1–100)
elementSelector–Capture a single element
waitUntil / delayMsload / 1000Wait for slow pages and animations
scrollToBottomtrueTriggers lazy-loaded images
hideCookieBanners / hideSelectorstrue / []Cleaner shots
maxFullPageHeight15000Very long pages are cut there (truncated: true)
maxRetries / maxConcurrency2 / 3Reliability vs. speed
proxyConfigurationoffOptional Apify Proxy for geo views (billed by Apify separately)

Example:

{
"urls": ["https://apify.com", "https://en.wikipedia.org/wiki/Web_scraping"],
"viewport": "mobile",
"fullPage": true,
"format": "jpeg"
}

Output

Images are saved to the run's key-value store. Each dataset row links to its image:

{
"url": "https://www.python.org",
"finalUrl": "https://www.python.org/",
"httpStatus": 200,
"title": "Welcome to Python.org",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/<id>/records/00002-www-python-org.jpg",
"format": "jpg", "viewport": "desktop", "width": 1920, "height": 2632,
"truncated": false, "fileSizeBytes": 325632, "attempts": 1,
"blocked": false, "charged": true, "error": null
}

Download everything as JSON, CSV or Excel, or open the Screenshots table view with image previews.

Use it from code (API)

Run it synchronously and get the dataset back in one call:

curl -X POST "https://api.apify.com/v2/acts/blond_terrarium~bulk-website-screenshot/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls":["https://example.com"],"viewport":"mobile","fullPage":true}'

Node.js (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('blond_terrarium/bulk-website-screenshot').call({ urls: ['https://example.com'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map(i => i.screenshotUrl));

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("blond_terrarium/bulk-website-screenshot").call(run_input={"urls": ["https://example.com"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["url"], item["screenshotUrl"])

Use it from AI agents (MCP)

Add the Apify MCP server (https://mcp.apify.com) to Claude, Cursor, ChatGPT or any MCP client and ask: "Take a mobile screenshot of example.com with blond_terrarium/bulk-website-screenshot." The agent gets back a screenshotUrl it can open or pass to a vision model. Set a Max total charge so an agent can never overspend.

Integrations

Zapier, Make, n8n, Google Sheets, Slack, webhooks, and scheduled runs all work out of the box through Apify integrations. A common recipe: Google Sheet of URLs → this Actor (weekly schedule) → Google Drive/Slack with the image links.

How it compares

This ActorTypical free/DIY screenshot scripts
Pay only for successful screenshots✅ errors and blocked pages are $0❌ you pay compute for failures too
Cookie banners hidden✅ major consent platformsusually ❌
Lazy-load scrolling before capture✅often ❌ (blank images)
One output row per input URL, with error reason✅partial
Device presets + element capture + dark mode✅varies
Predictable price per 1,000✅ fixed per screenshotdepends on memory/runtime

FAQ

Why did a URL fail? Look at the error column. Common reasons are a non-existent domain, an HTTP error page, a site that blocks automated browsers, or a page that never finished loading. You weren't charged for any of these.

How fast is it? Typically a few seconds per page; raise Parallel pages (maxConcurrency) for big lists.

How many URLs per run? Thousands. For very large lists, split into batches or set Max total charge to cap spend.

Can I get PDF or WebP? PNG and JPEG today. Open an issue if you need another format.

Can it screenshot pages behind a login? No. This Actor is for public pages only. Please respect each website's terms of use.

Does it accept cookies or click buttons? No. Consent banners are only hidden visually.

Internal or private addresses? Blocked for safety (localhost, 10.x, 192.168.x and so on).

Can I schedule it? Yes. Save your input as a Task and add a Schedule (daily, weekly, monthly) in Apify.

Something broken? Open an issue on the Issues tab with the URL and settings. Fixes usually ship within a few days.

Related tools by the same developer: Sitemap URL Extractor (get every URL of a site, then screenshot them here) and Broken Link Checker.