Website Screenshot API with Size and Time Limits
Pricing
from $4.00 / 1,000 saved png screenshots
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
Maintained by CommunityActor 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
| Mode | Output |
|---|---|
viewport | Exactly the requested width and height. A taller page is intentionally cropped. The browser does not scroll. |
boundedPage | Captures 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
| Fields | Meaning |
|---|---|
url, finalUrl, httpStatus | Requested URL, final page URL, and successful navigation status. |
screenshotUrl, screenshotKey, contentType, imageBytes | PNG file link, storage key, MIME type, and byte count. |
capturedAt, pageElapsedMs, elapsedMs | Capture timestamp, combined browser-work duration, and capture-stage duration. Times use milliseconds. |
networkBytes | Proxy traffic counted for this page. This includes connection overhead. |
mode, width, height | Requested mode and actual PNG dimensions. |
documentSize | Observed page width, height, and scroll position after capture. |
croppedToViewport | The page was taller than the requested viewport image. |
heightLimitReached | The page exceeded the configured page-mode height cap. |
layoutChangedDuringCapture | Document dimensions changed between the pre-image and post-image observations. |
scroll.steps, scroll.stopReason | Scroll 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 cinpm testapify validate-schemaapify 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.