Record a scrolling video of a web page
record_scrolling_videoRecords a browser-scrolling video of a web page and returns a hosted URL, letting you set scroll speed, duration, and scroll-back; use viewport mode for animations or live dashboards.
Instructions
Records a video (mp4, webm, or gif) of the browser scrolling down a web page and returns the hosted video URL. Control scroll speed, duration, and scrolling back to the top. Set video=true to record the viewport without scrolling (for animations or live dashboards). Pass 'sizes' to record the same page at several viewport sizes in one request. Rendering takes noticeably longer than a screenshot.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| js | No | JavaScript executed in the page before capture, e.g. "document.querySelector('.popup').remove();". | |
| css | No | CSS injected before capture, e.g. '.header { display: none; }'. | |
| url | No | Website URL to render, including the protocol, e.g. 'https://example.com'. Either url or custom_html is required. | |
| block | No | Resources to block while rendering. For a clean capture use ['ads', 'cookie_banners', 'chat_widgets']. 'tracking' blocks analytics. 'javascript', 'stylesheets', 'xhr', and 'fetch' can break pages or hide content — use only when needed. Others: images, media (audio/video), fonts, text_tracks, event_source, websockets, manifest. | |
| delay | No | Extra wait in milliseconds after the page loads, before capture. Default 0. Use 1000-5000 for animations, charts, or late-loading content. | |
| proxy | No | Proxy to route the request through: 'address:port' or 'username:password@address:port' (an http:// prefix is accepted). Useful for geo-specific content or CAPTCHA-prone sites. | |
| sizes | No | Record one video per viewport size, e.g. [{width:1920,height:1080},{width:390,height:844}]. Overrides width/height. | |
| video | No | Record the visible viewport for 'duration' seconds without scrolling. Default false. | |
| width | No | Browser viewport width in pixels (max 7680). Default 1680. Use ~390 to emulate a phone, ~768 for a tablet. | |
| height | No | Browser viewport height in pixels (max 4320). Default 876. | |
| js_url | No | URL of an external JavaScript file to execute before capture. | |
| cookies | No | Cookies to set before loading, as 'name=value; other=value;'. Use for pages behind a login. | |
| css_url | No | URL of an external stylesheet to inject before capture. | |
| headers | No | Extra HTTP headers as 'Name: value;' pairs separated by semicolons, e.g. 'Authorization: Bearer abc; X-Test: 1;'. | |
| timeout | No | Maximum milliseconds the API waits for the page to load before aborting. Default 100000. | |
| duration | No | How long the scrolling (or viewport recording) lasts, in seconds, 0-60. | |
| latitude | No | Latitude reported by the browser Geolocation API. | |
| timezone | No | IANA timezone to emulate, e.g. 'America/New_York', 'Asia/Karachi'. Default is the server timezone. | |
| dark_mode | No | Render with the dark color scheme (for sites that support it). Default false. | |
| file_type | No | Video format. Default mp4. gif loops and has no sound; webm is smaller. | |
| grayscale | No | Desaturate the output, 0 (full color, default) to 100 (fully grayscale). | |
| lazy_load | No | Scroll through the whole page first so lazy-loaded images and sections render. Default false. | |
| longitude | No | Longitude reported by the browser Geolocation API. | |
| save_path | No | Optional local path to save the video to (ignored when 'sizes' is used, since that returns several files). | |
| adjust_top | No | Scroll the viewport down this many pixels before capture. Default 0. Not supported for PDFs. | |
| user_agent | No | Custom User-Agent string, e.g. a mobile Safari UA to get the mobile site. | |
| custom_html | No | Raw HTML to render instead of loading a URL. Takes precedence over url. Inline CSS and JavaScript in the HTML are applied. Useful for pages that are not publicly reachable. | |
| scroll_back | No | Scroll back up to the top after reaching the bottom. Default false. | |
| template_id | No | ID of a saved cookie template from the ScreenshotAPI dashboard to apply before navigation. | |
| scroll_delay | No | Milliseconds to wait between scroll steps when lazy_load is true. Default 500. High values on long pages can hit the timeout. | |
| scroll_speed | No | Scrolling speed. Default normal. | |
| blur_selector | No | CSS selector(s) of elements to blur, comma-separated — for redacting emails, account numbers, or other sensitive data. | |
| wait_for_event | No | Page lifecycle event to wait for before capture. 'load' (default) waits for all resources; 'domcontentloaded' is faster but may miss images; 'networkidle' waits until no network requests for 500ms — best for SPAs and dashboards. | |
| click_recursion | No | How many times to click selector_to_click in sequence. Requires selector_to_click. Default 0. | |
| remove_selector | No | CSS selector(s) of elements to remove from the page before capture, comma-separated, e.g. '.ad-banner, #sidebar'. Non-matching selectors are ignored. | |
| accept_languages | No | Accept-Language header for localized content, e.g. 'fr-FR,fr;q=0.9'. Default 'en-US,en;q=0.8'. | |
| enable_incognito | No | Render in an isolated incognito session with no persisted cookies or storage. Default false. | |
| scroll_to_element | No | CSS selector of an element to scroll into view before a viewport capture. | |
| selector_to_click | No | CSS selector of an element to click before capture, e.g. to open a tab, dropdown, or accordion. | |
| start_immediately | No | Start recording as soon as navigation begins instead of after load, to capture the page loading. Default false. | |
| block_specific_requests | No | Specific request URLs or patterns to block, separated by commas, spaces, or newlines, e.g. 'https://example.com/api/data, https://ads-domain.com'. |