Screenshot Pro — Full-Page Screenshot, Element Capture & PDF avatar

Screenshot Pro — Full-Page Screenshot, Element Capture & PDF

Pricing

from $2.00 / 1,000 screenshots

Go to Apify Store
Screenshot Pro — Full-Page Screenshot, Element Capture & PDF

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

Peerapat Pongnipakorn

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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 ProTypical 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 install
npx playwright install chromium
mkdir -p storage/key_value_stores/default
echo '{"urls":[{"url":"https://apify.com"}],"format":"webp"}' > storage/key_value_stores/default/INPUT.json
ACTOR_TEST_PAY_PER_EVENT=true npm start

Results land in storage/key_value_stores/default/ and storage/datasets/default/.

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.