# Changelog of Website Screenshot & PDF API (Full Page, Mobile) (`saiberops/website-screenshot-api`) Actor

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

## Changelog

### Unreleased (independent-review fixes)

- Memory: full-page and element captures are capped at 40 million device pixels as well as 32,000 device px tall, and flagged `truncated: true`; custom viewports wider than 1920 px use at most 2x. A 3840-wide 3x full page previously produced an 11520 x 31998 PNG and 2.5 GB of RAM.
- Robustness: any unexpected error on one URL now gives a free `capture_failed` row instead of ending the run.
- Stop signals: after a 401/403/429 or a bot challenge on a host, the run's remaining URLs on that host get free rows without being loaded.
- robots.txt is re-checked whenever the final URL differs from the requested one, including same-host redirects.
- Dataset: new `imageUrl` (null for PDFs) feeds the Gallery view's image column, so PDF rows no longer show a broken image; the "Errors (not charged)" view is now "Status and errors" (views can't filter rows).
- Cookie banners: the home-grown banner heuristic now ignores header, nav and footer landmarks and anything with more than 600 characters of text, so a sticky footer with a "Cookie policy" link is no longer hidden.
- Privacy: the `title` field is replaced by `titlePresent` (boolean); page titles can be a person's name.

### 1.0 (2026-10-24)

- First release: viewport, full-page, element and PDF captures; desktop, HD, tablet, mobile and custom devices; PNG, JPEG and WebP; free vision-model thumbnails.
- Cookie and consent banners hidden with CSS (never clicked), with consent-wall detection.
- robots.txt respected (RFC 9309), login-walled hosts refused, private and internal addresses blocked through a local egress filter (covers redirects, subresources and DNS rebinding).
- Pay per event only for saved captures; errors, blocks and timeouts are free; clean stop at the run's max cost; `SUMMARY` record per run.
