Build screenshots the way real users see the web — not just what fits on the screen. Our website screenshot API captures full-length pages, dynamic content, and even long-scroll experiences as static images or smooth video playback.
Whether you're testing responsive layouts, documenting entire flows, or monitoring live pages, our browser screenshot API gives you total control: simulate devices, inject CSS/JS, block cookie banners, and record scrolling screenshots in GIF, MP4, or WebM — with customizable speed and duration.
Capture the entire page, not just the visible part. Whether it’s a blog, dashboard, or ecommerce page, our site screenshot API captures the complete scroll — down to the last pixel.
Enable scrolling capture for dynamic, interactive pages. Output your screenshot as a smooth GIF, MP4, or WebM — with control over scroll speed, start time, scroll-back, and duration. Built for devs who want more than just static output. Screenshots are available for 30 days in the history.
Preview how your page behaves on mobile, tablet, or desktop by simulating real-world devices and user agents. Perfect for QA, visual testing, and responsive design workflows.
Before the screenshot happens, make it yours. Strip elements, add highlights, or test styles — all by injecting custom CSS or JavaScript directly via the API.
Automatically remove annoying overlays, modals, and banners. What you capture is what you want — not what the browser throws at you.
Capture multiple scrolling versions of the same site — each with a different device resolution. It’s one API call, but multiple real-world views.
Choose how the page scrolls: fast, slow, or normal. Decide whether to start immediately, scroll back, or run the capture for up to 100 seconds.
Export your screenshot in the format that fits your stack — PNG, JPG for images, or WebM, MP4, GIF for scrolling captures.
Under the hood, we run a high-performance headless browser environment designed to deliver speed, stability, and scalability — even on JS-heavy websites.
$ pip install requests
Header | Required | Type | Default | Description |
---|---|---|---|---|
url | Yes | String | - | Specifies the URL of the website to be rendered as a screenshot or other format. |
file_type | No | String | PNG | Specifies the file type for the output. Options:
(1) PNG (lossless with transparency)
(2) JPG (lossy, smaller size)
(3) WebP (modern format)
(4) PDF (document format). |
omit_background | No | Boolean | false | Removes white background and makes it transparent. Only works when file_type is PNG. |
destroy_screenshot | No | Boolean | false | If true, the screenshot or PDF is not stored and must be downloaded immediately. |
fail_on_error | No | Boolean | false | If true, the API returns an error for 4xx or 5xx responses. Useful for strict failure handling in case of server or client-side issues during rendering. |
longitude | No | Number | - | Specifies the longitude for browser geolocation. |
latitude | No | Number | - | Specifies the latitude for browser geolocation. |
proxy | No | String | - | Proxy server configuration for the request. Supported formats:
(1) address:port - Simple proxy server
(2) username:password@address:port - Authenticated proxy server |
no_cookie_banners | No | Boolean | false | Blocks cookie banners during rendering. |
block_ads | No | Boolean | false | Blocks advertisements before rendering. |
headers | No | String | - | Custom HTTP headers to be included when the request is sent before rendering. Supports single or multiple headers. |
cookies | No | String | - | Cookies to be included in the request before rendering. Supports single or multiple cookies. |
scroll_to_element | No | String | - | CSS selector for an element to scroll to before rendering. |
selector | No | String | - | CSS selector for target element to render. Falls back to full page if not found. |
blur_selector | No | String | - | CSS selectors to target specific elements for blurring. Multiple selectors can be added to blur different elements simultaneously. |
remove_selector | No | String | - | CSS selectors for elements to remove while rendering. |
css | No | String | - | Inline custom CSS to inject into the page while rendering. |
css_url | No | String | - | URL of external CSS to load into the page while rendering. |
js | No | String | - | Custom JavaScript code to inject while rendering. |
js_url | No | String | - | URL of external JavaScript to inject while rendering. |
ttl | No | Number | 2592000 | Time to live (in seconds) for cache. Controls how long the render stays cached. |
user_agent | No | String | - | Custom User-Agent string sent in the request headers. |
accept_languages | No | String | en-US,en;q=0.8 | Accept-Language header to set for the request. |
delay | No | Number | 0 | Delay in milliseconds before rendering begins. Useful to wait for full page load. |
thumbnail_width | No | Number | - | Thumbnail width in pixels. If not set, defaults to original screenshot size. |
output | No | String | json | Render output type: 'image' or 'json'. |
fresh | No | Boolean | true | If true, forces a fresh render. Otherwise, uses cached version if available. |
enable_caching | No | Boolean | false | If true, enables caching of the render for future reuse. |
lazy_load | No | Boolean | false | If true, scrolls down the page to trigger loading of lazy-loaded content. |
full_page | No | Boolean | false | If true, captures the entire page (not just the viewport). |
retina | No | Boolean | false | If true, the screenshot or render will be captured with a higher pixel density (2x). |
height | No | Number | 867 | Viewport height in pixels for rendering. Max: 4320. |
width | No | Number | 1680 | Viewport width in pixels for rendering. Max: 7680. |
custom_html | No | String | - | Allows you to provide custom HTML content that will be rendered instead of loading a URL. |
block_chat_widgets | No | Boolean | false | Prevent chat widget scripts and resources from being loaded on websites. |
block_js | No | Boolean | false | Prevent JavaScript files from being loaded, which may improve performance or prevent dynamic content. |
block_stylesheets | No | Boolean | false | Prevent CSS files from being loaded, which can prevent styling from being applied. |
block_images | No | Boolean | false | Prevent image files from being loaded on websites. |
block_media | No | Boolean | false | Prevent media files (audio and video) from being loaded on websites. |
block_fonts | No | Boolean | false | Prevent font files from being loaded on websites. |
block_text_track | No | Boolean | false | Prevent text track files like subtitles or captions from being loaded. |
block_xhr | No | Boolean | false | Block XMLHttpRequest (XHR) requests, which prevents dynamic data fetching. |
block_fetch | No | Boolean | false | Block Fetch API requests to prevent asynchronous data loading. |
block_event_source | No | Boolean | false | Prevent Server-Sent Events (EventSource) connections from being established. |
block_web_socket | No | Boolean | false | Prevent WebSocket connections, which can stop real-time communication. |
block_manifest | No | Boolean | false | Prevent manifest files (.json, .webmanifest) from being loaded. |
block_specific_requests | No | String | Prevent specific requests (URLs, files, patterns) from being loaded using delimiters like comma, space, or newline. | |
adjust_top | No | Number | 0 | Scroll to a vertical pixel position from top before rendering. Not supported for PDF rendering. |
image_quality | No | Number | 80 | Control the quality of the rendered image when using JPG or JPEG file types (0 to 100). |
extract_html | No | Boolean | false | Retrieve raw HTML content as a .html file. Only available when output is set to JSON. |
extract_text | No | Boolean | false | Retrieve plain text content as a .txt file. Only available when output is set to JSON. |
dark_mode | No | Boolean | false | Enable dark mode for websites that support it. |
block_tracking | No | Boolean | false | Prevent loading of tracking scripts and analytics services. |
wait_for_event | No | String | load | Specifies when to start rendering. Options:
(1)load
(2)domcontentloaded
(3)networkidle. |
grayscale | No | Number | 0 | Apply grayscale effect from 0 (no effect) to 100 (fully grayscale). |
clip | No | object | Capture a specific rectangular area. Includes x, y, width, and height properties. | |
result_file_name | No | String | - | Custom name for the output file. May overwrite if not unique. |
incognito_mode | No | Boolean | false | Enable private browsing mode that doesn't store any browsing data. |
timeout | No | Number | 100000 | Set timeout duration in milliseconds for navigation. |
For Scrolling Screenshots, you can use the following parameters:
Header | Required | Type | Default | Description |
---|---|---|---|---|
url | Yes | String | - | Specifies the URL of the website to be rendered as a screenshot or other format. |
scrolling_screenshot | Yes | Boolean | false | Enables scrolling screenshot mode, allows you to capture a video of a web page. |
multiple_scrolling | No | Boolean | false | Enables capturing multiple scrolling screenshots with different width and height dimensions for each capture. The "sizes" parameter is required when using this option. |
sizes | No | Array | - | Allows capturing multiple scrolling screenshots with custom width and height dimensions. It accepts a JSON array of objects, each containing width and height properties. Required with "multiple_scrolling" parameter. |
file_type | No | String | MP4 | Determines the format in which the rendered content will be returned. Available file types:
(1) WEBM.
(2) MP4.
(3) GIF. |
scroll_speed | No | String | normal | Speed of scrolling during rendering. Available options:
(1) fast
(2) normal
(3) slow |
duration | No | Number | - | Determines how long the scrolling action will take, measured in seconds. You can set a value between 0 and 60. |
scroll_back | No | Boolean | false | When enabled, the page will scroll to the bottom and then return to the top, creating a looping effect. |
start_immediately | No | Boolean | false | When set to true, starts recording immediately without waiting for the page to fully load. |
For a comprehensive view of the API response structure and detailed field descriptions, explore the interactive Response Table by clicking here.
HTTP Status | Reasons |
---|---|
400 | (1) Invalid URL: Unable to navigate to the provided URL.
(2) Invalid file type: Only PNG, JPEG, WEBP, or PDF supported.
(3) Invalid proxy URL: Please provide a valid proxy URL.
(4) Invalid geolocation: Latitude must be -90 to 90, longitude -180 to 180.
(5) Invalid CSS URL: Please check URL format.
(6) Invalid JS URL: Please check URL format.
(7) Invalid JavaScript code: Please verify code syntax.
(8) Invalid clipped area: Please check area parameters.
(9) Invalid integer input: Please provide a valid number.
(10) SSL certificate error: Unable to establish secure connection.
(11) Domain mismatch: SSL certificate doesn't match domain name.
(12) Unsupported content extraction: HTML/Text extraction not available for this format.
(13) Unsupported scrolling capture: Use MP4 format instead of PNG/JPG/WEBP.
(14) Invalid parameter combination: Check parameter dependencies and requirements. |
403 | Connection refused: Server may be down, blocked by firewall, or experiencing network issues. Check connection or try using a proxy. |
407 | Tunnel connection failed: Unable to establish connection due to URL or proxy configuration issues. |
408 | Request timeout: Operation taking longer than expected. Please retry. |
444 | Connection closed: Server terminated connection unexpectedly. Please retry. |
495 | SSL/TLS error: Unable to establish secure connection due to protocol incompatibility. |
Provide any URL, select your file format (PNG, JPG, etc.) with setting full_page to true, and the API will return a full-page screenshot, including content far below the fold — no stitching or manual scrolling needed.Note: "Full-page" refers to the entire HTML-rendered page, not just the visible viewport.
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/github_com_386253d75a6c.png", "url": "http://github.com", "created_at": "2025-06-02T12:48:20.882Z", "full_page": "true", "format": "json", "ttl": "2025-07-02T12:48:13.420Z", "sizes": null }curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&full_page=true&apiKey=API-KEY'
When the output is image:
# Responsecurl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&full_page=true&output=image&apiKey=API-KEY'
For pages that scroll or load dynamically, enable scrolling screenshot mode by setting scrolling to true. You can:
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/tweetstorm_ai_06738d18d962.png", "url": "https://tweetstorm.ai", "created_at": "2025-06-02T13:02:23.015Z", "scrolling": "true", "format": "json", "ttl": "2025-07-02T13:02:20.410Z", "sizes": null }curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?scrolling=true&url=https%3A%2F%2Ftweetstorm.ai&apiKey=API_KEY'
Want to see how your page looks on mobile, tablet, or desktop? Just set the browser width and height directly in your API call to match any screen size. You can also define a user-agent string to emulate specific browsers or devices.
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/tweetstorm_ai_ff8d33dec6a3.png", "url": "https://tweetstorm.ai", "created_at": "2025-06-02T13:14:57.921Z", "width": "1000", "height": "500", "format": "json", "ttl": "2025-07-02T13:14:55.613Z", "sizes": null }curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?url=https%3A%2F%2Ftweetstorm.ai&width=1000&height=500&apiKey=API_KEY'
Inject your own CSS or JavaScript by leveraging parameters like css, css_url, js or js_url to modify the page before the screenshot is taken. Hide elements, tweak styles, test layouts, or highlight sections — no manual editing required after the fact.
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/tweetstorm_ai_bea809ec1e77.png", "url": "http://tweetstorm.ai", "created_at": "2025-06-02T14:02:27.997Z", "css_url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css", "format": "json", "ttl": "2025-07-02T14:02:25.323Z", "sizes": null }curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?css_url=https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css&url=tweetstorm.ai&apiKey=API_KEY'
Enter a latitude and longitude to capture how a webpage renders for users in specific regions, perfect for testing language settings, pricing localization, or compliance visuals.
Example: Latitude: 51.5074, Longitude: -0.1278 (London)
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/github_com_bde2b41f63da.png", "url": "http://github.com", "created_at": "2025-06-02T13:56:08.168Z", "latitude": "51.5074", "logitude": "-0.1278", "format": "json", "ttl": "2025-07-02T13:56:05.147Z", "sizes": null }curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&latitude=51.5074&logitude=-0.1278&apiKey=API_KEY'
Use a proxy address to simulate requests from different countries or network types. This helps test geo-blocked content, local SEO variations, or IP-based user flows — all programmatically.
Format: user: password@your-proxy.com:port
To use the Screenshot API, API credits are required. Charges apply only for successful queries, defined by a 2xx status code. If a request results in a 4xx or 5xx status code, no credits will be deducted, and any credits already charged will be refunded.
For each successful request, 35 credit will be charged.
Utilize the Credits Usage API to efficiently monitor your recent consumption of both one-off and subscription credits. This API provides a streamlined way to track and manage your credit usage, ensuring you stay informed about your remaining balance and can optimize your resource allocation effectively.