Screenshot API - Capture, Scroll, and Control Every Pixel of the Web

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.

10K Free Credits, No Credit Card Required

Features

Full-Page Website Screenshots

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.

Scrolling Screenshot (Video or Animated Format)

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.

Simulate Any Device or Browser

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.

Inject CSS or JavaScript On-the-Fly

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.

Block Cookie Banners & Ads

Automatically remove annoying overlays, modals, and banners. What you capture is what you want — not what the browser throws at you.

Multi-Screen Scrolling Screenshots

Capture multiple scrolling versions of the same site — each with a different device resolution. It’s one API call, but multiple real-world views.

Fine-Grained Scroll Control

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.

Flexible Output Formats

Export your screenshot in the format that fits your stack — PNG, JPG for images, or WebM, MP4, GIF for scrolling captures.

Blazing-Fast Infrastructure

Under the hood, we run a high-performance headless browser environment designed to deliver speed, stability, and scalability — even on JS-heavy websites.

Documentation

API Endpoint

GET

https://api.apifreaks.com/v1.0/screenshot

Test
LANGUAGE
Python
PHP
Java
Node
Ruby
$ pip install requests

API Request

HeaderRequiredTypeDefaultDescription
urlYesString-
Specifies the URL of the website to be rendered as a screenshot or other format.
file_typeNoStringPNG
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_backgroundNoBooleanfalse
Removes white background and makes it transparent. Only works when file_type is PNG.
destroy_screenshotNoBooleanfalse
If true, the screenshot or PDF is not stored and must be downloaded immediately.
fail_on_errorNoBooleanfalse
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.
longitudeNoNumber-
Specifies the longitude for browser geolocation.
latitudeNoNumber-
Specifies the latitude for browser geolocation.
proxyNoString-
Proxy server configuration for the request. Supported formats: (1) address:port - Simple proxy server (2) username:password@address:port - Authenticated proxy server
no_cookie_bannersNoBooleanfalse
Blocks cookie banners during rendering.
block_adsNoBooleanfalse
Blocks advertisements before rendering.
headersNoString-
Custom HTTP headers to be included when the request is sent before rendering. Supports single or multiple headers.
cookiesNoString-
Cookies to be included in the request before rendering. Supports single or multiple cookies.
scroll_to_elementNoString-
CSS selector for an element to scroll to before rendering.
selectorNoString-
CSS selector for target element to render. Falls back to full page if not found.
blur_selectorNoString-
CSS selectors to target specific elements for blurring. Multiple selectors can be added to blur different elements simultaneously.
remove_selectorNoString-
CSS selectors for elements to remove while rendering.
cssNoString-
Inline custom CSS to inject into the page while rendering.
css_urlNoString-
URL of external CSS to load into the page while rendering.
jsNoString-
Custom JavaScript code to inject while rendering.
js_urlNoString-
URL of external JavaScript to inject while rendering.
ttlNoNumber2592000
Time to live (in seconds) for cache. Controls how long the render stays cached.
user_agentNoString-
Custom User-Agent string sent in the request headers.
accept_languagesNoStringen-US,en;q=0.8
Accept-Language header to set for the request.
delayNoNumber0
Delay in milliseconds before rendering begins. Useful to wait for full page load.
thumbnail_widthNoNumber-
Thumbnail width in pixels. If not set, defaults to original screenshot size.
outputNoStringjson
Render output type: 'image' or 'json'.
freshNoBooleantrue
If true, forces a fresh render. Otherwise, uses cached version if available.
enable_cachingNoBooleanfalse
If true, enables caching of the render for future reuse.
lazy_loadNoBooleanfalse
If true, scrolls down the page to trigger loading of lazy-loaded content.
full_pageNoBooleanfalse
If true, captures the entire page (not just the viewport).
retinaNoBooleanfalse
If true, the screenshot or render will be captured with a higher pixel density (2x).
heightNoNumber867
Viewport height in pixels for rendering. Max: 4320.
widthNoNumber1680
Viewport width in pixels for rendering. Max: 7680.
custom_htmlNoString-
Allows you to provide custom HTML content that will be rendered instead of loading a URL.
block_chat_widgetsNoBooleanfalse
Prevent chat widget scripts and resources from being loaded on websites.
block_jsNoBooleanfalse
Prevent JavaScript files from being loaded, which may improve performance or prevent dynamic content.
block_stylesheetsNoBooleanfalse
Prevent CSS files from being loaded, which can prevent styling from being applied.
block_imagesNoBooleanfalse
Prevent image files from being loaded on websites.
block_mediaNoBooleanfalse
Prevent media files (audio and video) from being loaded on websites.
block_fontsNoBooleanfalse
Prevent font files from being loaded on websites.
block_text_trackNoBooleanfalse
Prevent text track files like subtitles or captions from being loaded.
block_xhrNoBooleanfalse
Block XMLHttpRequest (XHR) requests, which prevents dynamic data fetching.
block_fetchNoBooleanfalse
Block Fetch API requests to prevent asynchronous data loading.
block_event_sourceNoBooleanfalse
Prevent Server-Sent Events (EventSource) connections from being established.
block_web_socketNoBooleanfalse
Prevent WebSocket connections, which can stop real-time communication.
block_manifestNoBooleanfalse
Prevent manifest files (.json, .webmanifest) from being loaded.
block_specific_requestsNoString
Prevent specific requests (URLs, files, patterns) from being loaded using delimiters like comma, space, or newline.
adjust_topNoNumber0
Scroll to a vertical pixel position from top before rendering. Not supported for PDF rendering.
image_qualityNoNumber80
Control the quality of the rendered image when using JPG or JPEG file types (0 to 100).
extract_htmlNoBooleanfalse
Retrieve raw HTML content as a .html file. Only available when output is set to JSON.
extract_textNoBooleanfalse
Retrieve plain text content as a .txt file. Only available when output is set to JSON.
dark_modeNoBooleanfalse
Enable dark mode for websites that support it.
block_trackingNoBooleanfalse
Prevent loading of tracking scripts and analytics services.
wait_for_eventNoStringload
Specifies when to start rendering. Options: (1)load (2)domcontentloaded (3)networkidle.
grayscaleNoNumber0
Apply grayscale effect from 0 (no effect) to 100 (fully grayscale).
clipNoobject
Capture a specific rectangular area. Includes x, y, width, and height properties.
result_file_nameNoString-
Custom name for the output file. May overwrite if not unique.
incognito_modeNoBooleanfalse
Enable private browsing mode that doesn't store any browsing data.
timeoutNoNumber100000
Set timeout duration in milliseconds for navigation.

For Scrolling Screenshots, you can use the following parameters:

HeaderRequiredTypeDefaultDescription
urlYesString-
Specifies the URL of the website to be rendered as a screenshot or other format.
scrolling_screenshotYesBooleanfalse
Enables scrolling screenshot mode, allows you to capture a video of a web page.
multiple_scrollingNoBooleanfalse
Enables capturing multiple scrolling screenshots with different width and height dimensions for each capture. The "sizes" parameter is required when using this option.
sizesNoArray-
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_typeNoStringMP4
Determines the format in which the rendered content will be returned. Available file types: (1) WEBM. (2) MP4. (3) GIF.
scroll_speedNoStringnormal
Speed of scrolling during rendering. Available options: (1) fast (2) normal (3) slow
durationNoNumber-
Determines how long the scrolling action will take, measured in seconds. You can set a value between 0 and 60.
scroll_backNoBooleanfalse
When enabled, the page will scroll to the bottom and then return to the top, creating a looping effect.
start_immediatelyNoBooleanfalse
When set to true, starts recording immediately without waiting for the page to fully load.

API Response

For a comprehensive view of the API response structure and detailed field descriptions, explore the interactive Response Table by clicking here.

HTTP Status Codes

HTTP StatusReasons
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.

How-To-Guides

Capture a Full Webpage — From Top to Bottom

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.

curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&full_page=true&apiKey=API-KEY'
# 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 }

When the output is image:

curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&full_page=true&output=image&apiKey=API-KEY'
# Response screenshot

Take a Scrolling Screenshot (As GIF, MP4, or WebM)

For pages that scroll or load dynamically, enable scrolling screenshot mode by setting scrolling to true. You can:

  • Choose output format: gif, mp4, or webm
  • Set scroll speed: slow, normal, or fast
  • Define duration (up to 100 seconds)
  • Optionally scroll back or start the animation immediately
Ideal for capturing user flows, animation playback, or long-form content in motion.

curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?scrolling=true&url=https%3A%2F%2Ftweetstorm.ai&apiKey=API_KEY'
# 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 }

Simulate Any Device or Browser

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.

curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?url=https%3A%2F%2Ftweetstorm.ai&width=1000&height=500&apiKey=API_KEY'
# 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 }

Customize the Page Before Capture with CSS/JS

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.

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'
# 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 }

Simulate Location with Geolocation Settings

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)

curl --location --request GET 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&latitude=51.5074&logitude=-0.1278&apiKey=API_KEY'
# 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 }

Route Traffic Through a Proxy

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

Pricing

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.

Price Estimation Calculator