Website Screenshot (PNG, JPEG, PDF) avatar

Website Screenshot (PNG, JPEG, PDF)

Pricing

from $2.00 / 1,000 screenshots

Go to Apify Store
Website Screenshot (PNG, JPEG, PDF)

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

TTech

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Categories

Security

Limited permissions

Share

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

  1. Add one or more URLs.
  2. Pick the output format and any options.
  3. 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:

ParameterExampleNotes
urlhttps://example.comRequired
formatjpeg, png, jpg, pdfDefault jpeg (smallest, so fastest to download)
width, height1280, 800Viewport size
full_pagetrueWhole page instead of the viewport
quality80JPEG only
scale_factor2Retina
wait_untildom_loaded, page_loaded, network_idleDefault page_loaded
delay2Extra seconds to wait
wait_for / element.chartWait for / capture one element
no_ads, no_cookie_bannersfalseBoth on by default
hide_selectors.popup,#chatComma-separated
dark_modetrue
proxydatacenter, residentialDefault: no proxy (fastest)
response_typeredirect, jsonredirect 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:

EventPricePer 1,000
Screenshot (PNG / JPEG / JPG)$0.002$2
PDF$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.