📸 Website Screenshot Generator
Pricing
from $2.99 / 1,000 results
📸 Website Screenshot Generator
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Beautiful full-page PNG & PDF captures of any website — at scale, with a built-in smart proxy ladder that gets past bot walls.
Drop in a list of URLs, pick PNG or PDF, hit Start. The Actor opens each URL in a real Chromium browser, scrolls to load lazy content, hides the cookie banners you don't want in the shot, and saves a pixel-perfect capture to your default key-value store. Metadata for every capture is also pushed to the dataset so you can export to JSON / CSV / Excel in one click.
🚀 Why choose this Actor?
- 🛡️ Smart proxy fallback — starts direct, automatically escalates to datacenter, then residential with retries when the target pushes back. Stops mid-flow when one tier works.
- 🖼️ Full-page PNG or printable PDF — your call, per run.
- 🔽 Lazy-load aware — scrolls to the bottom, optionally waits for the network to go idle, so infinite-scroll feeds capture cleanly.
- 🙈 Banner & widget hiding — supply CSS selectors to wipe cookie popups, chat widgets, or anything that ruins the shot.
- 📥 Live saving — each capture lands in the dataset as soon as it's done, so a crash never loses earlier work.
- 📋 Rich, per-section logs — you can watch URL-by-URL progress, proxy escalations, and final status in real time.
✨ Key features
| Feature | Detail |
|---|---|
| 🌐 Bulk input | Paste URLs, drop a CSV, or pull from Google Sheets — the standard Apify request-list editor |
| 🖼️ Output | png (full page) or pdf (printable) |
| 📐 Viewport | Custom width (100–3840 px), height fixed at 1080 with full-page mode |
| ⏳ Wait until | load · domcontentloaded · networkidle2 · networkidle0 |
| 🔁 Retries | 3 retries on the residential tier with jittered backoff |
| 🛡️ Proxy ladder | direct → datacenter → residential — automatic |
| 💾 Storage | PNG/PDF in default KVS, metadata rows in default dataset |
🧾 Input
{"urls": [{ "url": "https://apify.com" },{ "url": "https://github.com" }],"format": "png","waitUntil": "networkidle2","delay": 0,"viewportWidth": 1280,"scrollToBottom": true,"delayAfterScrolling": 2500,"waitUntilNetworkIdleAfterScroll": false,"waitUntilNetworkIdleAfterScrollTimeout": 30000,"selectorsToHide": ".cookie-banner, #chat-widget","proxyConfiguration": { "useApifyProxy": false }}
| Field | Meaning |
|---|---|
urls | 🌐 List of URLs to capture. Items may be plain strings or { "url": "..." } objects. |
format | 🖼️ png for image, pdf for printable document. |
waitUntil | ⏳ Browser navigation milestone before capture. |
delay | ⏱️ Extra wait (ms) after navigation, before capture. |
viewportWidth | 📐 Browser viewport width in pixels. |
scrollToBottom | 🔽 Scroll the page top-to-bottom before capturing — triggers lazy-loaded content. |
delayAfterScrolling | ⏱️ Wait this long after scrolling, before capturing. |
waitUntilNetworkIdleAfterScroll | 🌊 Instead of a fixed delay, wait for the network to settle after scrolling. |
waitUntilNetworkIdleAfterScrollTimeout | ⏰ Hard cap on the network-idle wait. |
selectorsToHide | 🙈 CSS selectors to hide before capturing (cookie banners, chat widgets, …). |
proxyConfiguration | 🛡️ Default off — Actor tries direct first and auto-escalates if the target blocks. |
📦 Output
Each captured URL produces:
- A binary record in the default key-value store at
screenshot_<sanitized-url>_<md5>.<png|pdf>. - A metadata row in the default dataset:
{"startUrl": "https://apify.com","finalUrl": "https://apify.com/","pageTitle": "Apify: Full-stack web scraping and data extraction platform","format": "png","success": true,"error": "","proxyTier": "direct","attempts": 1,"navigationStatus": "ok","scrolledToBottom": true,"hiddenSelectors": "","screenshotKey": "screenshot_https___apify_com_d0734ca443cdd7bb52b219011c750508.png","screenshotUrl": "https://api.apify.com/v2/key-value-stores/<store-id>/records/screenshot_https___apify_com_<md5>.png","fileSizeBytes": 524288,"viewportWidth": 1280,"viewportHeight": 1080,"waitUntil": "networkidle2","capturedAt": "2026-05-23T10:39:31.592253+00:00"}
The dataset view comes pre-configured with two ready-to-use tables: 🖼️ Capture Overview (the essentials) and 🔍 Capture Details (everything, including the proxy tier used and number of attempts).
🚀 How to use the Actor (via Apify Console)
- Log in at console.apify.com → Actors.
- Open 📸 Website Screenshot Generator.
- Paste your URLs, pick the output format, leave proxy on No proxy (the Actor escalates automatically when sites push back).
- Click Start.
- Watch the live log — you'll see each URL's status, the proxy tier used, and bytes captured.
- Open the Storage tab to grab your PNGs / PDFs and the Dataset tab to export metadata.
🛡️ How the proxy ladder works
┌──────────┐ blocked ┌──────────────┐ blocked ┌─────────────────┐│ direct │ ──────────▶ │ datacenter │ ──────────▶ │ residential ×3 │└──────────┘ └──────────────┘ └─────────────────┘retries w/ jitter
- Every capture starts on whatever tier the Actor is currently on.
- A block (HTTP 401/403/407/408/409/425/429/451/5xx or a CAPTCHA / "checking your browser" page) escalates the ladder one step.
- Residential is the last step and retries 3× with jittered backoff before giving up on that URL.
- Once we escalate, we stay there — the next URL begins on the new tier, so we don't burn time on a tier we already know the target rejects.
🧠 Best use cases
- 📊 Visual archives — periodically snapshot dashboards, landing pages, blog posts.
- 🔬 QA & visual regression — diff captures between deploys.
- 📰 Press / link previews — generate PDFs of articles before they paywall or change.
- 🛍️ Competitive intelligence — track competitor pages over time.
❓ Frequently asked questions
Q: Why does my screenshot look smaller than my desktop browser?
The default viewport width is 1280 px and full-page mode captures everything below the fold. Bump viewportWidth to 1920 (or larger) for "wide-monitor" captures.
Q: The page has a cookie banner blocking the top — what do I do?
Add the banner's CSS selector to selectorsToHide, e.g. .cookie-banner, #onetrust-banner-sdk. The Actor sets display: none on the matched elements before capturing.
Q: Why do PDFs sometimes look different from PNGs?
page.pdf() is Chromium-headless only and uses a print-media stylesheet. If a site has heavy @media print rules, the PDF will reflect them — that's by design.
Q: I want to skip the ladder and use residential straight away.
Set proxyConfiguration to { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] } — the Actor will use residential only, with retries.
🆘 Support and feedback
Found a bug or have a feature request? Open an issue in your Actor's GitHub repository, or message the maintainer directly via your Apify Console.
⚖️ Legal & ethical notes
- Only capture publicly available pages you have the right to view.
- Respect each site's Terms of Service.
- You are responsible for compliance with applicable laws (GDPR, CCPA, etc.).