Fast Website Screenshot — full-page, pay only on success avatar

Fast Website Screenshot — full-page, pay only on success

Pricing

from $5.00 / 1,000 screenshots

Go to Apify Store
Fast Website Screenshot — full-page, pay only on success

Fast Website Screenshot — full-page, pay only on success

Full-page website screenshots that actually capture the full page. Fails fast instead of hanging, and only charges for screenshots that succeed.

Pricing

from $5.00 / 1,000 screenshots

Rating

0.0

(0)

Developer

Tit Slobodjanac

Tit Slobodjanac

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Share

Fast Website Screenshot — full-page screenshot API

Take full-page website screenshots that capture the whole page — fast, and you only pay for screenshots that actually come back.

Give it one URL or a thousand, get back a PNG, JPEG, WebP or PDF for each. A screenshot API with no API key to manage, no browser infrastructure to run, and no charge for pages that fail.

Example output

Real, unedited captures from this Actor (click any image for the full-size original):

news.ycombinator.comapify.comstripe.com
Full-page screenshot of Hacker NewsFull-page screenshot of apify.com, 9,578 pixels tall, with lazy-loaded images renderedFull-page screenshot of stripe.com, 14,760 pixels tall
1,215 px · 1.6 s9,578 px · 3.8 s14,760 px · 9.2 s

Every pixel of every page, edge to edge — including the lazy-loaded images near the bottom, and without the sticky header stamped down the image every 900 pixels.


Why this one

Most screenshot tools fail in the same four ways. This one is built around not doing that.

The full page really is the full page. Long pages are scrolled first so lazy-loaded images render, and sticky headers are pinned in place so your navigation bar isn't repeated down the capture. "Full page" that silently stops at the fold is the single most common complaint about screenshot tools, and it's the first thing this fixes.

It's quick, and the numbers below are real. Most pages finish in a couple of seconds. Very tall pages take longer, because time is dominated by encoding the image, and that scales with pixel count — so the honest range is seconds for ordinary pages, tens of seconds for the extremes. Measured on the Apify platform at default settings (re-measured 5 Aug 2026):

PagePage heightCapturedTime
news.ycombinator.com1,215 px1,215 px1.6 s
apify.com9,578 px9,578 px3.8 s
stripe.com14,760 px14,760 px9–27 s
en.wikipedia.org/wiki/Slovenia48,273 px20,000 px (capped)17.6 s

Trackers, video and audio are skipped to save time. Images and web fonts are always loaded — blocking fonts would be faster still, but the screenshot would come back in fallback typefaces and no longer match the real page.

It fails fast, and failures are free. The per-page timeout (60 s by default) is a budget for the whole page, not for each internal step, so a slow page cannot quietly run several times longer than the limit you set. If a page won't render, the run moves on instead of hanging — and you are not charged for a screenshot that didn't happen. Every failed URL is written to the dataset with the reason.

Very long pages are capped, and the output says so. Encoding an unbounded capture of a 48,000 px article takes minutes, so captures stop at maxPageHeight (20,000 px by default, about 22 screens — set 0 to disable). Every record reports pageHeight, capturedHeight and clipped, read back from the encoded image itself, so you always know whether you got the whole page.

Cookie banners are out of the way. Common consent notices are hidden before capture. Note that they are hidden, never accepted — no consent is given on your behalf.


What people use it for

  • Visual change monitoring & visual regression testing — schedule it, diff the images, catch layout breaks and unwanted changes
  • Link previews, Open Graph images and social cards — turn any URL into a thumbnail
  • Website archiving — save pages as PNG or convert a webpage to PDF for records, compliance or legal evidence
  • Batch screenshots — capture hundreds of URLs in one run for audits, SEO reports or content inventories
  • Design & competitor reference — full-page captures of landing pages at any viewport width
  • QA across devices — retina (deviceScaleFactor: 2), mobile and desktop viewport sizes
  • AI agents and RAG pipelines — give an LLM an accurate visual snapshot of any webpage

Input

{
"urls": ["https://apify.com", "https://news.ycombinator.com"],
"format": "png",
"fullPage": true,
"viewportWidth": 1440,
"deviceScaleFactor": 2,
"hideCookieBanners": true
}
OptionDefaultWhat it does
urlsOne or more URLs to capture
formatpngpng, jpeg, webp or pdf
fullPagetrueWhole scrollable page vs. just the viewport
viewportWidth / viewportHeight1440 × 900Browser window size
deviceScaleFactor1Set to 2 for retina-resolution output
hideCookieBannerstrueHide common consent notices
freezeStickyElementstrueStop fixed headers repeating down the image
scrollToLoadLazyImagestrueScroll first so lazy images load
hideSelectors[]Extra CSS selectors to remove (chat widgets, popups)
waitForSelectorWait for a specific element before capturing
waitUntilloaddomcontentloaded (fastest) → networkidle (slowest)
delayMs0Extra pause for animations
timeoutSecs60Hard budget for the whole page, not per step
maxPageHeight20000Cap for extremely long pages; 0 for no limit
blockResourcestrueSkip trackers, video and audio (images and fonts always load)
concurrency4Pages captured in parallel
proxyConfigurationOptional, for geo-specific rendering

Output

Images land in the key-value store. The dataset gets one row per URL:

{
"url": "https://apify.com",
"success": true,
"key": "screenshot-0001.png",
"imageUrl": "https://api.apify.com/v2/key-value-stores/<id>/records/screenshot-0001.png",
"bytes": 835410,
"durationMs": 3796,
"title": "Apify: The largest marketplace of trusted tools for AI",
"httpStatus": 200,
"pageWidth": 1454,
"pageHeight": 9578,
"capturedHeight": 9578,
"clipped": false,
"timings": { "goto": 942, "scroll": 1403, "freezeSticky": 16, "fonts": 47, "render": 747 }
}

capturedHeight is read back out of the encoded image rather than copied from what was requested, so clipped: false is a measurement, not a promise. timings breaks the duration down by phase, which makes a slow page diagnosable instead of mysterious.

Failures appear in the same dataset with "success": false and an error field, so a partial run is still useful.

Use it as a screenshot API

Run it from code like any Apify Actor — from Node.js, Python, or plain HTTP.

Node.js (npm install apify-client):

const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('gratified_ashram/fast-screenshot').call({
urls: ['https://example.com'],
format: 'png',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].imageUrl); // direct URL of the screenshot

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("gratified_ashram/fast-screenshot").call(
run_input={"urls": ["https://example.com"], "format": "png"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["imageUrl"])

Plain HTTP:

curl -X POST \
"https://api.apify.com/v2/acts/gratified_ashram~fast-screenshot/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://example.com"]}'

You can also schedule it in the Apify Console (e.g. daily captures for change monitoring) or wire it into Zapier/Make via the Apify integrations.

FAQ

How do I screenshot an entire webpage, not just the visible part?

Leave fullPage: true (the default). The page is scrolled first so lazy-loaded images actually render, sticky headers are frozen so they appear once, and the output row tells you the measured capturedHeight — so "full page" is verified, not assumed.

Can I screenshot multiple URLs at once?

Yes — pass any number of URLs in one run. They're captured in parallel (concurrency, default 4), and each URL gets its own dataset row, so one bad page never spoils the batch.

Can I convert a webpage to PDF?

Yes. Set "format": "pdf" and you get a PDF document of the page instead of an image.

Common consent banners are hidden automatically (hideCookieBanners, default on) — hidden, never accepted, so no consent is given on your behalf. For site-specific widgets (chat bubbles, newsletter popups), pass their CSS selectors in hideSelectors.

What happens when a page fails to load?

The run doesn't hang and you don't pay. The per-page timeout bounds the whole capture, the failure is recorded in the dataset with the reason, and failed pages are never charged.

How much do 1,000 screenshots cost?

$5.00 — see pricing below. Failed pages are free, and platform compute is included in the price.

Pricing

$5.00 per 1,000 screenshots — half a cent each, charged only for screenshots that actually come back. A URL that fails costs you nothing, and platform usage is included, so the price you see is the price you pay.

There is one exception worth stating plainly rather than hiding: starting a run costs $0.00001, one thousandth of a cent, which works out to a single cent per thousand runs. It exists because defining that event waives the first five seconds of container startup, and that saving is what keeps the per-screenshot price this low.