# Changelog of Website Screenshot API — Full-Page, Element & Device Capture (`cheapapi/website-screenshot-api`) Actor

- **URL**: https://apify.com/cheapapi/website-screenshot-api/changelog.md
- **Full Actor documentation**: https://apify.com/cheapapi/website-screenshot-api.md

## Changelog

All notable changes to the Website Screenshot API actor are documented here. This project adheres to
[Semantic Versioning](https://semver.org/).

### 1.0 — 2026-06-14

First public release.

#### Capture

- Output formats: **PNG, JPEG, WebP, and PDF**.
- **True full-page** capture with a safe 16384 px height cap (`truncatedHeight` reported).
- **Element** capture by CSS `selector` and exact **region** capture via `clip`.
- **13 device profiles** (`device`) — desktop, laptop, QHD, Mac-retina, iPhone, Pixel, Galaxy, iPad and social aspect ratios — each a consistent viewport + pixel density + matching user-agent + touch.
- Retina (`deviceScaleFactor` 1–3), custom viewport, **dark mode**, transparent background.
- Emulation: `locale`, `timezoneId`, `userAgent`, `geolocation`, `isMobile`.

#### Page handling

- **Auto-accept cookie consent** (clicks Accept across CMP vendors + text heuristic, iframes) to unlock consent-gated content; plus banner hiding and ad/tracker blocking.
- **Stealth** mode (default on): masks `navigator.webdriver`, the `HeadlessChrome` UA and empty plugins. Does not solve CAPTCHAs.
- **Authenticated/paywalled pages** via `cookies` and `headers` (sent first-party only).
- **Bring-your-own `proxy`** (http/socks) for geo-located capture; `waitForSelector`, `waitUntil`, `delayMs`.

#### Platform & reliability

- **Standby HTTP API** and **batch** runs from one image.
- **Self-scaling**: detects the run's memory/CPU and tunes concurrency; bounded queue returns `429` under load.
- **Pay-per-event**, billed only on a **successful** screenshot.

#### Security

- **SSRF-safe**: a forced in-process proxy resolves, classifies and pins every IP (page + subresources + redirects); private/reserved/metadata ranges blocked; DNS-rebinding defeated.
- **No downloads** (`acceptDownloads:false`), per-capture timeout, response-size cap, and a fresh isolated browser context per capture.
