Screenshot Pro — Full-Page Screenshot, Element Capture & PDF
Pricing
from $2.00 / 1,000 screenshots
Screenshot Pro — Full-Page Screenshot, Element Capture & PDF
Capture full-page or element screenshots in PNG, JPEG or WebP, or render pages to PDF. Auto-dismisses cookie banners, blocks ads, emulates devices and waits for the element you actually care about.
Pricing
from $2.00 / 1,000 screenshots
Rating
0.0
(0)
Developer
Peerapat Pongnipakorn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Screenshot Pro — Full-Page Screenshots, Element Capture & PDF
Turn any URL into a PNG, JPEG, WebP or PDF. Built for the jobs a screenshot tool actually gets used for: visual regression checks, competitor monitoring, OG images, PDF archiving, and feeding page renders to a vision model.
You are charged per delivered file. Failed URLs cost nothing.
What it does that basic screenshot Actors don't
| Screenshot Pro | Typical basic screenshot Actor | |
|---|---|---|
| Full-page flag | ✅ explicit | ⚠️ scroll hack only |
| JPEG / WebP output | ✅ | ❌ PNG only |
| Capture a single element | ✅ CSS selector | ❌ |
| Wait for a selector | ✅ | ❌ fixed delay only |
| Cookie banner dismissal | ✅ 15+ CMPs, 12 languages | ❌ |
| Ad & tracker blocking | ✅ | ❌ |
| Device emulation | ✅ 10 presets | ❌ |
| Retina (2x / 3x) | ✅ | ❌ |
| Dark mode | ✅ | ❌ |
| Viewport height control | ✅ | ❌ width only |
| PDF page setup | ✅ format, margin, scale, media | ⚠️ defaults only |
| Custom CSS / JS injection | ✅ | ❌ |
| Auth via headers & cookies | ✅ | ❌ |
| Per-URL retry with a fresh IP | ✅ | ❌ |
| Failed URLs billed | ❌ never | ⚠️ often |
WebP typically comes out 60–75% smaller than PNG at visually identical quality, which matters when you are capturing thousands of pages.
Quick start
{"urls": [{ "url": "https://apify.com" }],"format": "webp","fullPage": true,"quality": 80}
Every run writes the image or PDF to the key-value store and one metadata record per URL to the dataset:
{"startUrl": "https://apify.com","url": "https://apify.com/","status": "success","screenshotUrl": "https://api.apify.com/v2/key-value-stores/.../screenshot-00000.webp","screenshotKey": "screenshot-00000.webp","format": "webp","width": 1440,"height": 9562,"bytes": 387078,"httpStatus": 200,"clipped": false,"cookieBannerHandled": true,"durationMs": 3749,"attempts": 1}
Recipes
Mobile screenshot, retina
{"urls": [{ "url": "https://example.com" }],"device": "iphone-15","format": "jpeg","quality": 85}
One element only — pricing table, hero, chart
{"urls": [{ "url": "https://example.com/pricing" }],"selector": "#pricing-table","format": "png","omitBackground": true}
Archive an article as PDF, as the reader sees it
{"urls": [{ "url": "https://example.com/article" }],"format": "pdf","pdfFormat": "A4","pdfMedia": "screen","pdfPrintBackground": true,"pdfMargin": "1cm"}
A page that renders late
{"urls": [{ "url": "https://example.com/dashboard" }],"waitUntil": "networkidle","waitForSelector": ".chart-rendered","delayMs": 500}
Behind a login
{"urls": [{ "url": "https://example.com/account" }],"cookies": [{ "name": "session", "value": "abc123", "domain": ".example.com", "path": "/" }]}
Different wait rules per URL — any URL entry accepts waitForSelector, selector, fullPage and delayMs as overrides:
{"urls": [{ "url": "https://example.com/fast" },{ "url": "https://example.com/slow", "waitForSelector": "#loaded", "delayMs": 2000 }]}
Notes on the tricky options
dismissCookieBanners (on by default) tries known CMP buttons first, then accept buttons matched by text — but only inside a container that looks like consent UI, so an "Accept" button in your target's own content is never clicked. Banners are usually injected after load and some only appear on scroll, so the sweep runs on a short poll and again after scrolling. The cookieBannerHandled field tells you whether it actually did anything.
blockAds (on by default) makes pages load faster and captures finish sooner. Be aware that a blocked ad slot leaves its reserved space empty, so some sites show a blank band where the ad would have been. Turn it off if you need a pixel-faithful capture.
stickyMode defaults to keep, which leaves the page untouched. unstick returns pinned bars to normal flow — useful when a sticky header is dragging off-screen elements into a tall capture — but it mutates layout, and on some sites that shifts content down by several hundred pixels. Try it per site rather than switching it on globally.
customJs runs inside the browser page context, in the same sandbox as the site's own scripts. It cannot reach this Actor's token, environment or filesystem.
Very tall pages: Chromium cannot rasterise beyond 16,384px. Taller pages are captured down to that limit and flagged with "clipped": true rather than failing.
Cost
Priced per delivered file. A URL that fails every retry produces a dataset record with status: "failed" and is not charged — you pay for screenshots you receive, not for attempts.
Runs finish faster with blockAds on, and faster still if you also block media or font resource types on sites that don't need them.
If a run hits your maximum charge limit, remaining URLs are recorded with status: "skipped" instead of silently dropped.
Run locally
npm installnpx playwright install chromiummkdir -p storage/key_value_stores/defaultecho '{"urls":[{"url":"https://apify.com"}],"format":"webp"}' > storage/key_value_stores/default/INPUT.jsonACTOR_TEST_PAY_PER_EVENT=true npm start
Results land in storage/key_value_stores/default/ and storage/datasets/default/.
Legal
Capture pages you are allowed to capture. Respect the target site's terms of service and robots directives, and take care with personal data — a screenshot of a profile page is still personal data under the GDPR and Thailand's PDPA.