Website Screenshot - Full Page and Lazy Content avatar

Website Screenshot - Full Page and Lazy Content

Pricing

Pay per usage

Go to Apify Store
Website Screenshot - Full Page and Lazy Content

Website Screenshot - Full Page and Lazy Content

Screenshot any public web page as PNG, JPEG or WebP. Loads lazy content before capturing, hides cookie banners and floating bars, lets you choose full page, first screen or an exact height, and never charges for a failed capture.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Jacob Knowles

Jacob Knowles

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Website Screenshot — Full Page and Lazy Content

Free beta. Tested on Apify against a fixed set of 20 public pages chosen to be difficult (lazy loading, sticky headers, cookie banners, emoji, very long pages) and on an automated test suite. That is a small, hand-picked set: some sites will still render wrongly. Known problems are listed below, and every image comes with warnings when something looked off.

Screenshot public web pages as PNG, JPEG or WebP: the whole page, the first screen, or an exact height. One URL or up to 1,000 per run.

Faithful by default; cleanup only if you ask

Faithful capture (default). The image shows the page as a visitor sees it after it loads: nothing is hidden, clicked or accepted. Cookie banners stay visible. Floating bars and widgets appear once, at the top of the image, where a visitor first sees them. They are not repeated down the page.

Optional cleanup (off by default). You can hide cookie banners (common consent tools, plus banners that name themselves "cookie-banner", "consent" or "notice"), hide floating bottom bars and chat widgets, or hide elements by CSS selector. Cleanup changes the page and can remove real content that uses the same names. Every hidden element is counted in the result's warnings.

What it does

  • Lazy content: scrolls through the page once so lazy-loaded images and scroll-triggered sections load, waits for images, then captures. Images still loading at capture time are reported in warnings.
  • Long pages: captured screen by screen and joined. If the page changes height while it is being captured, it is captured again after it settles. If it never settles, the result says layoutChanged: true.
  • Sticky headers: converted to normal elements, so they appear once rather than over the content lower down.
  • Emoji and CJK text: color emoji and Chinese/Japanese/Korean fonts are installed.
  • Hard limits per page: a page that never finishes loading is captured as it is, with a warning. A page that hangs is stopped and reported. One slow page does not hold up the rest of the run.

What you pay for

This Actor is free during the beta: you pay only Apify's normal platform usage for the run (compute and storage), like any Actor without its own price. Failed pages (unreachable site, HTTP error, timeout, refused address) appear in the results with an errorCode and are cheap, because they stop early.

Planned pricing. Pay-per-event pricing may be added later: $0.002 per stored screenshot up to 5,000 px tall, plus $0.0015 for each further 5,000 px. Failed pages would never be charged. Apify notifies users before any pricing change takes effect. Each row's extraHeightBlocks already shows how many extra-height blocks an image would count as.

Output

One dataset row per URL:

  • Every row: url, status (ok / failed), screenshotUrl, screenshotKey, width, height, format, bytes, httpStatus, finalUrl, title, pageHeight, truncated, layoutChanged, extraHeightBlocks, warnings, loadMs and captureMs.
  • Failed rows also have: errorCode and error.

Images are stored in the run's key-value store. The SUMMARY record gives the run outcome (complete, partial, stopped_by_limit or failed) and lists the failures.

Check warnings, truncated and layoutChanged before using an image. They are how the Actor tells you an image may not match the page.

Known limitations

  • Bot-protected sites (Cloudflare challenges, login walls) are not bypassed. There is no proxy. When the page looks like a challenge or access-denied page, the image comes with a warning.
  • Pages taller than 30,000 px are cut at 30,000 px and flagged truncated.
  • Pages that keep growing (infinite feeds, some news front pages) stop after the scroll time limit and are flagged. Such an image is not a complete page.
  • Elements that change position on timers or scroll handlers can occasionally appear twice or cover a heading. Seen on apple.com, where a dark bar covers a section heading. This is unresolved.
  • Pages that add or remove content after loading (promotions, personalised boxes) are captured as they settled, which can differ between runs. The warnings say when this happened.
  • Local and private network addresses are refused, including redirects to them.

Develop

npm install # on a machine where Chromium can run
npm test # 35 tests: pixel-checked captures + end-to-end Actor runs with simulated billing