Website Screenshot API: Full-Page, Mobile & Bulk URL Capture
Pricing
$2.00 / 1,000 screenshot captureds
Website Screenshot API: Full-Page, Mobile & Bulk URL Capture
Capture full-page or viewport screenshots of any URLs in bulk: desktop, tablet and mobile, PNG or JPEG, cookie banners hidden, lazy-loaded images included. Returns a public image URL plus title, final URL and HTTP status. Pay only for successful shots.
Pricing
$2.00 / 1,000 screenshot captureds
Rating
0.0
(0)
Developer
Birchwood Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Turn any list of URLs into clean, full-page screenshots for desktop, tablet and mobile, in bulk, at a low per-image price. Each result includes a public image URL you can drop into a spreadsheet, a Slack/Zapier/Make/n8n workflow, a report or an AI agent, along with the page title, final URL after redirects, HTTP status and load time.
You pay only for successful screenshots. URLs that fail (DNS errors, timeouts, crashes) are retried automatically and, if they still fail, reported in the dataset with the error and not charged.
What can this website screenshot tool do?
- 📸 Full page or viewport. Lazy-loaded images are scrolled into view first.
- 📱 Device presets: Desktop 1366, Desktop HD 1920, Laptop 1280, Tablet (2x), Mobile iPhone (3x, mobile user agent). Pick several to get one image per device, or set a custom width and height.
- 🍪 Cookie banners hidden (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast…) with CSS only. Nothing is clicked or accepted for you.
- 🎯 Capture one element (
#pricing,main), wait for a selector, add an extra delay, hide elements (chat widgets), use dark mode or block videos. - 🖼️ PNG or JPEG (quality setting), with a max-height cap for very long pages.
- 🔁 Retries in a fresh browser context, per-page timeouts and parallel pages.
- 🌍 Optional proxy, to see a page as it looks from another country.
Use cases
Visual monitoring and change tracking, SEO and competitor snapshots, website archiving and compliance evidence, link previews and thumbnails, QA of responsive layouts, and feeding page images to vision LLMs.
More use cases:
- Visual website monitoring: schedule daily captures of pricing pages or landing pages and compare them over time.
- SEO and competitor research: archive what competitors' homepages and SERP landing pages looked like on a given date.
- Link previews and thumbnails: generate preview images for directories, newsletters or internal tools.
- Responsive QA: capture the same URL on desktop, tablet and mobile in one run.
- Vision LLM input: send page images to GPT-4o, Claude or Gemini for layout or content analysis.
- Compliance evidence: keep timestamped page captures (
takenAt) for audits.
Input example
{"urls": [{ "url": "https://apify.com" }, { "url": "https://www.bbc.com/news" }],"devices": ["desktop", "mobile"],"fullPage": true,"format": "jpeg","quality": 80,"hideCookieBanners": true}
Output
One dataset item per URL and device. The images are stored in the run's key-value store, and screenshotUrl links straight to the image file. Here's a real item from a test run (store ID replaced):
{"url": "https://example.com","finalUrl": "https://example.com/","device": "mobile","httpStatus": 200,"success": true,"title": "Example Domain","screenshotUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/example-com-mobile-327c3fda.png","screenshotKey": "example-com-mobile-327c3fda.png","format": "png","fullPage": true,"viewportWidth": 390,"viewportHeight": 844,"bytes": 254295,"loadTimeMs": 851,"attempts": 1,"error": null,"takenAt": "2026-10-26T13:54:51+00:00"}
A failed URL looks like this and is not charged:
{ "url": "https://this-domain-does-not-exist-xyz123.com", "device": "mobile", "success": false,"error": "Page.goto: net::ERR_CONNECTION_CLOSED at https://this-domain-does-not-exist-xyz123.com/", "screenshotUrl": null }
The dataset's Screenshots view shows image thumbnails right in the Console table. A RUN_SUMMARY record shows the succeeded and failed counts.
Pricing
Pay per event: screenshot, charged once for each image successfully saved. Failures are free. See the Pricing tab for the current price. Set Max cost per run and the Actor stops cleanly at your budget.
Tips
- Use JPEG for long pages: it's much smaller than PNG.
- With many URLs, raise Parallel pages together with memory (minimum 2 GB; about 512 MB per parallel page).
- For single-page apps, use
waitUntil: networkidleorwaitForSelector. - Images are kept for your plan's storage retention period. Copy them elsewhere if you need them long-term.
Is it legal?
Screenshots capture what any visitor sees on a public page. Don't capture pages behind logins you aren't authorized to use, and respect copyright when you reuse images.
Other Actors by Birchwood Data
Our Actors are built to chain together: find companies → find their job boards → scrape every job → screenshot or structure the results.
| Actor | What it does |
|---|---|
| ATS Job Scraper | Jobs from Greenhouse, Lever, Ashby, SmartRecruiters and Recruitee career pages, with salary, remote flag and new/removed-job tracking. |
| Workday Jobs Scraper | Jobs from any Workday (myworkdayjobs.com) career site: NVIDIA, Salesforce, Adobe and thousands more. Same core fields as ATS Job Scraper. |
| Y Combinator Scraper | The full YC startup directory with an optional job-board finder. Its atsBoardUrl output feeds straight into the two job scrapers. |
| Text to JSON | Turn job descriptions, emails or PDFs into JSON matching your own schema. For example, pull skills or tech stack out of descriptionText. |
Example pipeline: Y Combinator Scraper (onlyHiring, detectCareersPage) → feed the atsBoardUrl values into ATS Job Scraper or Workday Jobs Scraper → schedule daily with onlyNewJobs → send new jobs to Slack, Google Sheets or your ATS via Apify integrations.
Support
Found a bug or need a feature? Open an issue on the Issues tab and we will get back to you as soon as possible.