Website Screenshot API with Size and Time Limits avatar

Website Screenshot API with Size and Time Limits

Pricing

from $4.00 / 1,000 saved png screenshots

Go to Apify Store
Website Screenshot API with Size and Time Limits

Website Screenshot API with Size and Time Limits

Capture public web pages as PNG images. Set exact dimensions or page-height and scroll limits. Get image links, limit flags, and failed-page details.

Pricing

from $4.00 / 1,000 saved png screenshots

Rating

0.0

(0)

Developer

Ying Qi Mah

Ying Qi Mah

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Capture a public web page as a PNG image. Choose exact viewport dimensions or a page region with a height and scrolling limit. The Actor returns image links and capture metadata.

The Actor accepts one to 50 URLs per run. It saves one result row for each successful PNG image. Read the limits below before you start a large batch.

Price

The Actor uses Pay Per Event pricing.

The price is $0.004 per saved image ($4 per 1,000 images), plus $0.01 per run. The startup fee also applies when every page fails. At the fixed 1 GB memory setting, a run with one image would cost $0.014. A run with 50 images would cost $0.21. Check the Console price before starting a run.

The Actor uses fixed Pay Per Event pricing. It does not add platform usage to the event price. Apify can charge separately for later storage access or export.

Quick start

Enter a public page URL and keep Exact viewport mode for a fixed-size image. The default is 1280 × 720 pixels.

{
"urls": [{ "url": "https://example.com/" }],
"mode": "viewport",
"width": 1280,
"height": 720
}

Open Captured images after the run. Each row links to a PNG file. Open Run summary and errors for failed pages. A failed page does not produce a result row. The Actor continues after one page failure. Two page failures in a row stop the run.

Capture modes

ModeOutput
viewportExactly the requested width and height. A taller page is intentionally cropped. The browser does not scroll.
boundedPageCaptures from the page top with a height cap. The browser scrolls within the configured time and step limits, then returns to the top.

Page mode defaults to an 8,000-pixel height cap, 12 scroll steps, and a 1.5-second scroll time limit. A height cap or stopped scroll can leave content outside the image. The output reports those limits. An observed page bottom does not prove that all lazy content loaded.

Widths can be 100–1920 pixels. Viewport heights can be 100–1080 pixels. Page captures can be at most 12,000 pixels high. Duplicate normalized URLs are skipped within a run.

Loading and time limits

The default readiness setting is load. The faster domcontentloaded setting can capture before styles or images finish loading.

Defaults are 10 seconds for navigation, 10 seconds for the capture stage, and 20 seconds for combined browser work per page. Storage is separate from the browser-work limit. The Actor permits at most 60 seconds of runner work. It stops page work by 75 seconds from platform start. An 85-second safety timer ends the process if cleanup stalls. The default platform timeout is 90 seconds. A lower user timeout can end the run sooner. If a page times out, its details appear in the run summary.

Each page has a 5 MiB traffic limit. MiB means 1,048,576 bytes. The limit includes browser requests, remote replies, and connection overhead. The proxy closes connections when the limit is crossed. In-flight buffers can exceed the limit slightly. A PNG file above 2 MiB is rejected. These limits can reject pages with many assets or large images.

Images, fonts, and style sheets load normally. The Actor does not automatically accept cookie prompts or remove overlays. An image can therefore include those prompts.

Output fields

FieldsMeaning
url, finalUrl, httpStatusRequested URL, final page URL, and successful navigation status.
screenshotUrl, screenshotKey, contentType, imageBytesPNG file link, storage key, MIME type, and byte count.
capturedAt, pageElapsedMs, elapsedMsCapture timestamp, combined browser-work duration, and capture-stage duration. Times use milliseconds.
networkBytesProxy traffic counted for this page. This includes connection overhead.
mode, width, heightRequested mode and actual PNG dimensions.
documentSizeObserved page width, height, and scroll position after capture.
croppedToViewportThe page was taller than the requested viewport image.
heightLimitReachedThe page exceeded the configured page-mode height cap.
layoutChangedDuringCaptureDocument dimensions changed between the pre-image and post-image observations.
scroll.steps, scroll.stopReasonScroll count and stop reason: disabled, bottom observed, step limit, or time limit.

RUN_SUMMARY records successful results, failed URLs, duplicate inputs, total proxy traffic, and early-stop reasons. unprocessedUrls lists inputs with no final result. A partial batch can occur when a time, failure, or charge limit stops work. Submit only the remaining URLs in a later run.

Failed pages stay outside the default result dataset. The SDK charges the default dataset-item event once per saved result when Pay Per Event is enabled. The Actor checks the remaining event allowance before page work and before output. No extra custom result event is added. Use a graceful abort to save the final summary. A forced stop can interrupt that write.

Output example

This example uses a placeholder image URL. A real run returns an Apify file link.

{
"url": "https://example.com/",
"finalUrl": "https://example.com/",
"httpStatus": 200,
"screenshotKey": "capture-26793fa92e5bc98f.png",
"contentType": "image/png",
"imageBytes": 70915,
"capturedAt": "2026-10-25T03:12:40.579Z",
"pageElapsedMs": 673,
"networkBytes": 47071,
"mode": "viewport",
"width": 1280,
"height": 720,
"documentSize": {
"width": 1280,
"height": 775,
"scrollY": 0
},
"layoutChangedDuringCapture": false,
"croppedToViewport": true,
"heightLimitReached": false,
"scroll": {
"steps": 0,
"stopReason": "disabled"
},
"elapsedMs": 128,
"screenshotUrl": "https://example.com/capture.png"
}

Supported pages

Use public HTTP or HTTPS URLs on ports 80 or 443. Login details, private cookies, custom request headers, remote URL-list files, local addresses, and private network destinations are unsupported. The Actor does not solve CAPTCHAs. Sites can refuse access or return content that differs from a local browser.

The Actor captures the content the browser receives. An HTTP success and a PNG do not prove that a page is complete or that its content is correct. Inspect the image and the limit fields before using it in a report.

Local development

npm ci
npm test
apify validate-schema
apify run

On macOS the tests use installed Google Chrome. The cloud image includes Chrome and Playwright. The browser tests use synthetic pages. No cloud run is needed for these tests.