Website Screenshot & PDF Generator API
Pricing
from $7.00 / 1,000 screenshots
Website Screenshot & PDF Generator API
Website screenshot API: full-page, viewport or element captures, and webpage-to-PDF export. Removes cookie banners, blocks ads, loads lazy images. Device presets, retina scale, dark mode. Pay per use, no subscription.
Pricing
from $7.00 / 1,000 screenshots
Rating
0.0
(0)
Developer
Power On Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
A website screenshot API that captures any web page as a PNG, JPEG, WebP or PDF — full page, visible viewport, or a single element. Built for the part every other screenshot tool leaves broken: the cookie banner covering the hero image, the lazy images that never loaded, the ad slot that left a grey hole in the middle of your capture.
Give it a list of URLs. Get back clean images (or PDFs) and a dataset row per URL with a direct file link — usable from the Apify API, the REST API, or the visual UI, with no server of your own to run or maintain.
What makes this website screenshot API different
Most "URL to image" tools stop at rendering the page and hoping for the best. This one handles the reasons a plain screenshot looks broken:
| Cookie banners removed | Consent overlays from OneTrust, Cookiebot, Didomi, Quantcast, Usercentrics, Sourcepoint, Iubenda and 40+ others are stripped before the capture. The default removes the banner rather than clicking it, so no consent is given and no tracking cookies are set. Switch to "reject all" or "accept all" if you need a real click instead. |
| Ads blocked and their empty slots collapsed | Blocking ad requests alone leaves grey boxes labelled "Advertisement". Those get cleaned up too, so a full-page screenshot doesn't look broken. |
| Lazy-loaded images actually load | The page is scrolled before a full-page capture, so images below the fold render instead of coming back blank. |
| Real device presets | Desktop 1920, laptop 1366, iPad and iPhone viewports with matching user agent, touch support and pixel density — not just a resized browser window. |
| Retina / high-DPI output | 2x and 3x pixel density for crisp images in presentations, decks and documentation. |
| Element screenshots | Give a CSS selector and capture just that element — a pricing table, a chart, a single card — instead of the whole page. |
| Webpage-to-PDF export | Single-page PDF sized to the real page height, or standard A4, as an alternative output to an image. |
| Batch capture in parallel | Many URLs in one run, with automatic retries. One broken URL doesn't kill the run — you get a row explaining what went wrong and the rest complete normally. |
Quick start
Minimal input — just a list of URLs:
{ "urls": ["https://example.com"] }
Call it however fits your stack: the Apify API and REST endpoints, the official Node.js and Python clients, or no-code via Zapier, Make or n8n through Apify's integrations. A minimal call with the JavaScript client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('power_on/screenshot-url-pdf').call({urls: ['https://example.com'],device: 'desktop',format: 'png',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].fileUrl);
And with the Python client:
from apify_client import ApifyClientclient = ApifyClient('<APIFY_TOKEN>')run = client.actor('power_on/screenshot-url-pdf').call(run_input={'urls': ['https://example.com'], 'format': 'pdf'})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items[0]['fileUrl'])
Input parameters
Only urls is required. Everything else has a sensible default.
{"urls": ["https://example.com","https://news.ycombinator.com"],"device": "desktop","fullPage": true,"format": "png","scaleFactor": 2,"dismissCookieBanners": "hide","blockAds": true}
Useful extras: selector (capture one element), hideSelectors (kill a sticky header
or a chat widget), customCss, darkMode, waitForSelector, delayMs, locale,
timezone, cookies and basicAuth for pages behind a login, and proxyConfiguration
for geo-specific pages. The full list, with descriptions and defaults, is in the
Input tab.
Output
One dataset row per URL:
{"url": "https://example.com","ok": true,"statusCode": 200,"title": "Example Domain","format": "png","width": 1920,"height": 3480,"bytes": 214233,"device": "desktop","scaleFactor": 2,"durationMs": 1842,"key": "001-example.com.png","fileUrl": "https://api.apify.com/v2/key-value-stores/.../records/001-example.com.png"}
The image or PDF is stored in the run's key-value store, and fileUrl is a direct
link to it — no separate download step. Failed URLs come back with ok: false and
the reason in error, instead of stopping the run.
Typical use cases
- Open Graph and social preview images — generate the image your link preview uses when shared on Slack, X or LinkedIn
- Visual monitoring — capture the same pages on a schedule and compare them over time to catch layout regressions or unwanted changes
- Webpage-to-PDF export — archive a page as a PDF with the layout intact, for compliance, records or offline reading
- Design and QA review — desktop, tablet and mobile capture in one run, side by side
- Documentation and changelogs that need current, accurate screenshots without a human taking them by hand
Pricing
Pay per screenshot. A failed URL is not charged. There's no monthly subscription and no minimum commitment — you pay for what you actually capture, unlike most standalone screenshot APIs that charge a fixed monthly plan whether you use it or not.
FAQ
Is there a free website screenshot API? This Actor has no free tier of its own, but every new Apify account starts with free monthly platform credit, which covers a number of screenshots before any charge applies.
Can I take a full-page screenshot, not just the visible area?
Yes — set fullPage: true (the default). The page is scrolled first so lazy-loaded
images below the fold render before the capture.
Can I convert a webpage to PDF instead of an image?
Yes — set format: "pdf". You get a single-page PDF sized to the real page height,
or standard A4.
Does it handle cookie consent banners automatically? Yes, by default. Overlays from the major consent management platforms are removed before capture, without clicking "accept" — so no consent is granted and no tracking cookie is set. You can switch to a real "accept all" or "reject all" click instead.
Can I screenshot just one element instead of the whole page?
Yes — pass a CSS selector and only that element is captured.
Does this work with pages behind a login?
Yes, via cookies or basicAuth in the input, depending on how the site
authenticates.
Known limitations
Worth knowing before you run it:
- On a few sites an ad container also holds real content, and its reserved empty space survives the clean-up. Removing it would risk deleting real content, so it stays.
- Pages taller than roughly 16,000 pixels are clipped by the browser engine; the run falls back to a clipped capture instead of failing.
- Pages behind a bot wall may need
proxyConfigurationand a longertimeoutSecs. - Video and animation are captured as a still frame, at whatever moment the page is in.
Related tools
Need the page's text or structured data instead of a picture of it? Apify's Website Content Crawler extracts clean text and markdown from a site — a common pairing with this Actor when you need both a visual and the content.
Support
Found a page it handles badly? Open an issue on this Actor with the URL and the settings you used. Broken pages are the fastest way to make it better, and they get fixed.