Website Screenshot (PNG, JPEG, PDF)
Pricing
from $2.00 / 1,000 screenshots
Website Screenshot (PNG, JPEG, PDF)
Take full-page or viewport screenshots of any website as PNG, JPEG or PDF. Hides ads and cookie banners, supports custom viewport, retina, dark mode, element capture and bulk URLs.
Pricing
from $2.00 / 1,000 screenshots
Rating
0.0
(0)
Developer
TTech
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Security
Limited permissionsShare
Website Screenshot — PNG, JPEG & PDF
Take clean screenshots of any website as PNG, JPEG/JPG or PDF. Paste one URL or thousands, and get back image files ready to download, embed or send to other tools.
What can it do?
- 📸 Viewport or full-page screenshots, with a height limit for very long pages
- 🖼️ PNG, JPEG/JPG or PDF output, with adjustable JPEG quality and PDF page size
- 🚫 Hides ads and cookie banners automatically for a clean image
- 🔍 Retina / HiDPI images (2× or 3× scale)
- 🌙 Dark mode: asks sites to use their dark theme
- 🎯 Capture one element using a CSS selector, e.g. a pricing table or a chart
- ⏳ Waits for JavaScript-heavy sites: network idle, wait for an element, or a fixed delay
- 🖱️ Loads lazy images by scrolling the page before a full-page capture
- 🧩 Custom CSS & JavaScript, extra headers, cookies and user agent
- 🌍 Proxy support for geo-specific content and sites that block data centers
- ⚡ Bulk: captures many URLs in parallel
How to use it
- Add one or more URLs.
- Pick the output format and any options.
- Click Start. When the run finishes, open the Output tab to preview and download each file.
Example input
{"urls": [{ "url": "https://apify.com" }, { "url": "https://en.wikipedia.org/wiki/Web_scraping" }],"format": "png","fullPage": true,"width": 1440,"height": 900,"scaleFactor": 2,"hideAds": true,"hideCookieBanners": true}
Example output
Each URL produces one item in the dataset. The file itself lives in the run's key-value store, and fileUrl is a direct download link.
{"url": "https://apify.com/","status": "success","format": "png","screenshotUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/apify-com-1a2b3c4d.png","fileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/apify-com-1a2b3c4d.png","fileKey": "apify-com-1a2b3c4d.png","contentType": "image/png","sizeBytes": 845123,"httpStatus": 200,"finalUrl": "https://apify.com/","title": "Apify: Full-stack web scraping and data extraction platform","width": 1440,"height": 900,"fullPage": true,"pageHeight": 7340,"truncated": false,"takenAt": "2026-10-17T10:00:00.000Z"}
If a page can't be captured (timeout, DNS error, invalid URL), the item has "status": "failed" and an error message. You are not charged for failed screenshots.
Use it from your code
Run the actor and get the results in one HTTP call. Find your API token in Apify Console → Settings → API & Integrations.
curl -X POST "https://api.apify.com/v2/acts/ttechx~website-screenshot/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"urls": [{"url": "https://example.com"}], "format": "jpeg", "quality": 80}'
Or with the JavaScript client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('ttechx/website-screenshot').call({urls: [{ url: 'https://example.com' }],format: 'png',fullPage: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((item) => item.fileUrl));
⚡ Instant screenshot API (Standby mode)
Need a screenshot back in a couple of seconds, like a classic screenshot API? Call the Actor's Standby endpoint. It keeps a warm browser ready, so there is no start-up wait: most pages come back in 1–4 seconds, and the response body is the image itself.
curl "https://ttechx--website-screenshot.apify.actor/?url=https://example.com&format=png&full_page=true" \-H "Authorization: Bearer <YOUR_API_TOKEN>" -o screenshot.png
You can paste the URL straight into an <img> tag or any HTTP client. Parameters use the same names as the input (snake_case or camelCase), and common names from other screenshot APIs also work:
| Parameter | Example | Notes |
|---|---|---|
url | https://example.com | Required |
format | jpeg, png, jpg, pdf | Default jpeg (smallest, so fastest to download) |
width, height | 1280, 800 | Viewport size |
full_page | true | Whole page instead of the viewport |
quality | 80 | JPEG only |
scale_factor | 2 | Retina |
wait_until | dom_loaded, page_loaded, network_idle | Default page_loaded |
delay | 2 | Extra seconds to wait |
wait_for / element | .chart | Wait for / capture one element |
no_ads, no_cookie_banners | false | Both on by default |
hide_selectors | .popup,#chat | Comma-separated |
dark_mode | true | |
proxy | datacenter, residential | Default: no proxy (fastest) |
response_type | redirect, json | redirect sends you to a fast download link (best for full-page and other big images); json returns the link with page details |
Tip for big images: add response_type=redirect (and use curl -L). Large files then download straight from Apify storage instead of streaming through the API, which is often faster for clients far from the US. Links stay valid for as long as Apify keeps the run's storage (7 days by default).
Pricing is the same per screenshot/PDF. In Standby mode, Apify bills the platform usage of the warm browser to your account in addition.
Pricing
You pay per successful capture:
| Event | Price | Per 1,000 |
|---|---|---|
| Screenshot (PNG / JPEG / JPG) | $0.002 | $2 |
| $0.003 | $3 | |
| Actor start (once per run) | $0.004 per run at the default 2 GB memory | — |
| Residential proxy traffic (only if you choose it) | $0.015 per MB | $15 per GB |
Failed pages are free. Platform usage and datacenter proxy are included.
For example, 500 PNG screenshots in one run cost about $1.00.
Residential proxy is only needed for sites that block data centers. A typical page uses 1–5 MB, so with residential proxy each screenshot costs roughly $0.015–0.075 extra. When residential proxy is used, each output item gets a residentialProxyMb field with that page's traffic.
FAQ
What's the difference between JPG and JPEG? None, it's the same format. Pick whichever file extension you prefer.
Why is my full-page screenshot cut off? Pages taller than Max full-page height (15,000 px by default) are cut, to keep files small and avoid memory errors. You can raise the limit to 30,000 px. The truncated field in the output tells you when this happened.
A cookie banner is still visible. Add its CSS selector to Hide elements, or let us know in the Issues tab so we can add it to the built-in list.
The page looks empty or half-loaded. Set Wait until to Network idle, add a Delay of a few seconds, or use Wait for element with a selector that appears once the content is ready.
Can I capture pages behind a login? Yes, if you have a session cookie: pass it in Cookies. Only do this for accounts you own.
Can I screenshot local or internal addresses? No. For security, localhost and private network addresses are blocked.