Website Screenshot API - Full-Page Captures, Scrolling Video & PDF Output
The Website Screenshot API renders any public or password-protected URL in a real browser and returns a screenshot, scrolling video, or PDF from a single GET request. Output formats include PNG, JPG, WebP, and PDF for stills, plus MP4, GIF, and WebM for scrolling captures - with full-page rendering, device simulation, ad and cookie-banner blocking, and CSS/JS injection. It is built for engineers running visual regression tests, teams generating Open Graph preview images, and developers archiving rendered pages at scale.
Features
Full-Page & Element Capture
Setfull_page=true to capture the entire rendered document - every section below the fold - instead of just the viewport. Target a single component with selector, crop to exact coordinates with clip, or scroll to a specific element first with scroll_to_element. Control the canvas with width (max 7680) and height (max 4320), and double pixel density with retina for high-DPI output. Use it for thumbnails, design-review captures, and pixel-accurate records of long pages.Scrolling Video Capture
Setscrolling_screenshot=true to record a page as motion instead of a still, returned as MP4, GIF, or WebM via file_type. The capture walks the full page top to bottom, so dynamic and lazy-loaded sections render on the way down. Use it for demoing user flows, capturing animation playback, and showing how long-form pages behave when a real visitor scrolls through them.Fine-Grained Scroll Control
Shape exactly how a scrolling capture moves:scroll_speed sets fast, normal, or slow pacing, duration caps the recording (up to 60 seconds), scroll_back loops the page back to the top for a seamless replay, and start_immediately begins recording without waiting for full page load. Use it for tuning the pace of product demos and matching capture length to the content you need on screen.Multi-Resolution Scrolling
Enablemultiple_scrolling with a sizes array of width/height objects to capture the same page at several device resolutions in one request. Each entry produces its own output, so a single call returns desktop, tablet, and mobile scrolling captures together. Use it for responsive QA and side-by-side device comparisons without firing a separate request per breakpoint.Device & Geolocation Simulation
Reproduce real-world rendering conditions: setwidth, height, and a custom user_agent to emulate specific devices and browsers, and pass latitude and longitude to render region-specific content like localized pricing or language. Enable dark_mode for sites that respond to color-scheme preferences. Use it for responsive testing, compliance visuals, and verifying how a page looks for users in a given market.CSS & JavaScript Injection
Modify the page before the capture fires: inject inline styles withcss or load a stylesheet with css_url, and run custom scripts with js or js_url. Hide elements, highlight sections, or trigger UI states that only appear after interaction. Use it for cleaning up captures, emphasizing parts of a layout, and testing style changes without editing the source site.Clean Captures: Ads, Banners & Elements
Strip distractions automatically:no_cookie_banners dismisses consent prompts, block_ads removes advertising overlays, block_chat_widgets hides support bubbles, and block_tracking stops analytics scripts from loading. For precise edits, remove_selector deletes any element by CSS selector and blur_selector masks sensitive areas like names or account numbers. Use it for producing publication-ready screenshots and redacting private data before sharing.Output Formats & Page Data
Choose your export withfile_type: PNG, JPG, or WebP for images and PDF for documents, with omit_background for transparent PNGs. Switch output between json (a hosted file URL plus metadata) and image (raw bytes streamed back). Set extract_html or extract_text to return the page’s HTML or plain text alongside the capture. Use it for fitting the screenshot into your stack and storing the underlying content next to the image.Built for These Use Cases
Visual regression & cross-device QA
Capture a baseline of each critical page, then re-capture on a schedule and diff the images to catch unintended visual changes. Usemultiple_scrolling with a sizes array to record desktop, tablet, and mobile renders in a single call. Pair full_page=true with a fixed width so layout shifts show up cleanly in the comparison.Open Graph & link-preview images
Generate share images on demand by capturing a target component withselector or a fixed viewport, then returning it as a PNG or WebP. Enable retina for crisp previews on high-DPI displays, and use no_cookie_banners to keep consent prompts out of the frame.SEO & audit reporting
Produce clean, rendered screenshots of landing pages for audit decks and client reports.block_ads and no_cookie_banners remove distractions, while dark_mode and device simulation document how a page appears across contexts.Web archiving & compliance snapshots
Save a fixed visual record of a page as a PDF withfile_type=PDF and full_page=true, and set extract_text or extract_html to store the underlying content alongside the image. To snapshot many URLs at once, the Bulk Screenshot API processes up to 50 URLs per request and returns an output link for each.Rendered captures for scraping pipelines
When a data pipeline needs both the structured content and a visual record, run the Web Scraper API for parsed data and the Website Screenshot API for the rendered image of the same URL. Browser-level rendering, proxy support, and JS injection keep both outputs consistent with what a real user sees.API Endpoint
Need more than one page per call? The Bulk Screenshot API captures up to 50 URLs in a single request.
$ pip install requestsimport requests
url = "https://api.apifreaks.com/v1.0/screenshot?url=google.com"
payload = {}
headers = {
'X-apiKey': 'API-KEY'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
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=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_667de59d66a3.png", "url": "http://github.com", "created_at": "2026-06-10T14:28:00.546Z", "full_page": "true", "format": "json", "ttl": "2026-07-10T14:27:54.931Z", "sizes": null }curl -X 'GET' 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&full_page=true&apiKey=API-KEY'
When the output is image:
# Responsecurl -X 'GET' 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&full_page=true&output=image&apiKey=API-KEY'
Take a Scrolling Screenshot (As GIF, MP4, or WebM)
For pages that scroll or load dynamically, enable scrolling screenshot mode by setting scrolling_screenshot=true. You can:
- Choose output format:
gif,mp4, orwebm - Set scroll speed:
slow,normal, orfast - Define duration (up to 60 seconds)
- Optionally scroll back or start the animation immediately
Ideal for capturing user flows, animation playback, or long-form content in motion.
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/tweetstorm_ai_89a70463a7dd.gif", "url": "https://tweetstorm.ai", "created_at": "2026-06-10T13:28:15.276Z", "scrolling_screenshot": "true", "file_type": "gif", "format": "json", "ttl": "2026-07-10T13:28:03.526Z", "sizes": null }curl -X 'GET' 'https://api.apifreaks.com/v1.0/screenshot?scrolling_screenshot=true&url=https%3A%2F%2Ftweetstorm.ai&file_type=gif&apiKey=API_KEY'
Set file_type=gif with scrolling_screenshot=true to capture the full page as a scrolling
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.
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/tweetstorm_ai_40c37e4b6ae9.png", "url": "https://tweetstorm.ai", "created_at": "2026-06-10T13:48:14.397Z", "width": "1000", "height": "500", "format": "json", "ttl": "2026-07-10T13:48:10.815Z", "sizes": null }curl -X 'GET' 'https://api.apifreaks.com/v1.0/screenshot?url=https%3A%2F%2Ftweetstorm.ai&width=1000&height=500&apiKey=API-KEY'
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.
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/tweetstorm_ai_adee58976f15.png", "url": "http://tweetstorm.ai", "created_at": "2026-06-10T13:55:11.258Z", "css_url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css", "format": "json", "ttl": "2026-07-10T13:55:06.951Z", "sizes": null }curl -X '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'
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)
# Response { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/github_com_db8500efcac5.png", "url": "http://github.com", "created_at": "2026-06-10T13:43:04.946Z", "latitude": "51.5074", "longitude": "-0.1278", "format": "json", "ttl": "2026-07-10T13:43:01.038Z", "sizes": null }curl -X 'GET' 'https://api.apifreaks.com/v1.0/screenshot?url=http://github.com&latitude=51.5074&longitude=-0.1278&apiKey=API-KEY'
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
Frequently Asked Questions
output=json) the API returns a JSON object with a hosted URL to the rendered file, the source url, a created_at timestamp, and a ttl marking when the cached render expires. Set output=image to stream the raw image bytes back directly instead. Rendered files remain available for 30 days.file_type to PNG, JPG, WebP, or PDF. For scrolling captures (scrolling_screenshot=true), choose MP4, GIF, or WebM. PNG also supports transparent backgrounds via omit_background.full_page=true and the API captures the entire rendered HTML document from top to bottom - no manual scrolling or stitching. “Full page” refers to the complete document height, not just the viewport defined by width and height.wait_for_event (load, domcontentloaded, or networkidle) to control when rendering starts, add a delay in milliseconds for slow pages, and set lazy_load=true to trigger deferred content before capture.file_type=PDF to render the page as a PDF document. Combine it with full_page=true to capture the complete page in a single PDF - useful for archiving and compliance records.no_cookie_banners=true to dismiss consent prompts and block_ads=true to remove advertising overlays. block_chat_widgets hides support bubbles, and remove_selector or blur_selector lets you delete or mask any element by CSS selector before the capture.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.
