ScreenshotKit: Website Screenshot, Scrolling Video & PDF API
Pricing
Pay per usage
ScreenshotKit: Website Screenshot, Scrolling Video & PDF API
Screenshots, smooth scrolling videos (MP4/GIF) and PDFs of any website or HTML. Full page, element, retina, mobile, dark mode, proxies, cookie-banner removal. Batch or real-time API.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Ayush Yadav
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
7 days ago
Last modified
Categories
Share
Capture screenshots, smooth auto-scrolling videos and PDFs of any website, or of your own HTML. Pass a list of URLs and get back a clean file per page, sized for desktop, laptop, tablet, phone or any custom viewport. Already used for 100,000+ captures on Replicate.
Use it as a normal Actor (batch of URLs) or as a real-time HTTP API through Standby mode, where one request returns the file.
What can ScreenshotKit do?
- 📸 Screenshots: viewport, full page, a single element (
#pricing), or a region (x,y,width,height) - 🔍 Retina: 1×, 2× or 3× pixel density
- 🎬 Scrolling videos: the page scrolls smoothly top to bottom, exactly 0.1–30 seconds long, as MP4, WebM or GIF
- 📄 PDFs: A4, Letter or Legal, with backgrounds
- 🧾 HTML input: render your own HTML (OG images, invoices, templates)
- 📱 Devices: Desktop 1920×1080, Laptop 1440×900, Tablet 820×1180, Phone 390×844 (real mobile sites), or custom up to 4000px
- 🧹 Clean captures by default: cookie banners and chat widgets removed, lazy-loaded images and scroll animations loaded first
- 🚫 Block ads and trackers, hide any element, inject your own CSS or JavaScript, click something before capturing
- 🔐 Logged-in pages: send cookies and HTTP headers (e.g.
Authorization) - 🌍 Dark mode, timezone, locale, user agent, and residential proxies with country selection for sites that block cloud servers
- ⚡ Real-time API: Standby mode returns the file from one HTTP call
Typical uses: link previews and OG images, landing-page videos for social media, visual monitoring, archiving pages as PDF, competitor tracking, documentation screenshots, and feeding page images to AI agents.
How to use ScreenshotKit
- Click Try for free and enter one or more URLs (
stripe.comworks;https://is added automatically), or paste HTML. - Pick Screenshot, Scrolling video or PDF, and a device.
- Click Start. Each page produces a file in the run's key-value store and a row in the dataset with a direct download link.
Input
| Field | Description | Default |
|---|---|---|
urls | Website URLs | — |
html | Raw HTML to render instead of a URL | — |
action | screenshot, video or pdf | screenshot |
device | desktop, laptop, tablet, phone or custom (+ width, height) | desktop |
device_scale_factor | Pixel density 1–3 (2 = retina) | 1 |
full_page | Capture the whole scrollable page | false |
selector | Capture only this element, e.g. #pricing | — |
clip | Capture a region, "x,y,width,height" | — |
image_format, image_quality | png, jpeg or webp; quality 1–100 | png |
video_duration, video_format | 0.1–30 seconds; mp4, webm or gif | 10, mp4 |
pdf_format | A4, Letter or Legal | A4 |
hide_cookie_banners | Remove cookie/consent popups | true |
hide_chat_widgets | Remove Intercom, Drift, Crisp, HubSpot and similar chat bubbles | true |
block_ads | Block major ad networks and trackers | false |
hide_selectors | Elements to remove, e.g. [".promo-bar"] | — |
custom_css, custom_js | CSS or JavaScript to run before capturing | — |
click_selector | Element to click before capturing | — |
wait_until | load, domcontentloaded, networkidle or time | load |
wait_for_selector | Wait until this element appears | — |
wait_time | Extra seconds to wait | — |
dark_mode | Request the site's dark theme | false |
timezone, locale, user_agent | e.g. Europe/Berlin, de-DE | — |
headers, cookies | e.g. {"Authorization": "Bearer …"}, [{"name": "session", "value": "…"}] | — |
proxy, proxy_country | none, datacenter or residential; e.g. US | none |
{"urls": ["https://stripe.com", "apify.com"],"action": "screenshot","device": "laptop","device_scale_factor": 2,"full_page": true,"image_format": "jpeg","image_quality": 80}
Output
One dataset item per page:
{"url": "https://stripe.com","action": "screenshot","file_url": "https://api.apify.com/v2/key-value-stores/aBcDeFgHiJkLmNoPq/records/screenshot-1.jpeg","key": "screenshot-1.jpeg","content_type": "image/jpeg","device": "laptop","width": 1440,"height": 900,"error": null}
If a page can't be loaded (bad domain, element not found), its item has an error message and you are not charged for it. The other URLs still complete.
Real-time API (Standby mode)
Call the Actor like a regular screenshot API. The response body is the file itself.
curl -H "Authorization: Bearer $APIFY_TOKEN" \"https://ayushunleashed--screenshotkit.apify.actor/?url=stripe.com&device=phone&image_format=webp" \-o stripe.webp
Every input field works as a query parameter (lists and objects as JSON strings), or send them as a JSON body with POST /, which is the way to pass html:
curl -X POST -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \-d '{"html": "<h1>Hello</h1>", "device": "custom", "width": 1200, "height": 630, "device_scale_factor": 2}' \"https://ayushunleashed--screenshotkit.apify.actor/" -o og.png
Responses: 200 with the file, 400 for invalid parameters, 502 when the page could not be captured (not charged).
Pricing
Pay per event. You pay only for successful captures; failed pages are free. Residential proxy use is charged per capture on top. See the pricing tab for current prices.
FAQ
Why are some images blank in full-page screenshots? ScreenshotKit scrolls the page first to load lazy images, but a few sites only render sections while they're on screen. Recording a scrolling video captures those.
Why did I get a "blocked" page? Some sites block cloud servers. Set proxy to residential (optionally with proxy_country), which gets through most of them (e.g. Reddit). A few sites with advanced bot protection (e.g. NYT) still can't be captured.
Can I capture pages behind a login? Yes: pass your session cookies or an Authorization header.
Does dark mode work everywhere? It works on sites that follow the system dark-mode setting (prefers-color-scheme). Sites with only a manual toggle can be switched with click_selector or custom_js.
What video format is used? MP4 (H.264, 30 fps) by default, exactly the duration you request. WebM and GIF (10 fps, up to 640px wide) are also available.
How are scrolling videos made? ScreenshotKit loads the whole page (including lazy images), captures it once, and renders a perfectly smooth ease-in-out scroll over it. That makes every video smooth no matter how heavy the site is. The trade-off: the page is frozen while it scrolls, so sticky headers stay at the top and on-page animations or embedded videos don't play.
How long does a capture take? A viewport screenshot usually takes 3–15 seconds (ScreenshotKit waits for the page to finish rendering and loads lazy content), a full page a bit longer. Short videos take about 20–60 seconds; a 30-second video takes around 3 minutes. For long videos, use a normal run rather than the real-time API.
Is it legal to screenshot websites? Capturing publicly available pages is generally fine. Respect each site's terms and don't capture personal data without a legitimate reason.