Loading
Loading
The Bulk Screenshot API captures screenshots of up to 50 URLs in a single request. Every page in the batch renders with its own settings — file format, viewport size, image quality, even scrolling video capture — and comes back as an individual hosted image link with its own success or failure status. It's built for QA engineers running visual checks across entire sites, and for developers generating thumbnails, archiving pages, or monitoring competitor layouts at scale.
urls array of up to 50 objects — each one a webpage with its own capture settings. The API processes every page individually in the background and returns the full batch in one response, with a meta_data block (total_urls, successful_urls, failed_urls) summarising the run. No job IDs to create, no status endpoint to poll — one request, one response. Use it to replace 50 sequential calls — and 50 rounds of retry logic — with one request.urls object: file_type (PNG, JPG, WebP, PDF, GIF, MP4, WebM), width and height, image_quality, fresh, ad and cookie-banner blocking, CSS/JS injection, and scrolling_screenshot with duration. One batch can mix formats and viewports — capture one URL as a 4K PNG and the next as a scrolling GIF. The only exception: multiple_scrolling is not available in bulk requests.results array returns its own hosted screenshot URL — and an extracted_html link when extract_html is enabled — along with created_at and ttl timestamps, so you know exactly how long each file stays available. Map outputs back to inputs through the echoed url field. Download the files directly, or pass the links straight into your own storage pipeline.status (fulfilled or rejected) and error_message, and the response-level meta_data block counts successful_urls and failed_urls for the run. Filter on status to retry only the failures instead of resubmitting all 50 URLs.Feed your sitemap's top 50 pages into one request after each deploy, then diff the returned images against the previous run's captures. The per-page success status tells you immediately which pages failed to render. For single-page captures with multi-resolution scrolling output, use the Website Screenshot API.
Capture competitor pricing pages, landing pages, and checkout flows on a schedule — one batch per run instead of a queue of single calls. Every capture is timestamped and hosted with a known expiry window, giving you a clean visual record for audit trails and change tracking.
Generate preview images for up to 50 listings, bookmarks, or search results in one call. Set the dimensions and quality per URL to produce thumbnail-sized output directly, with no post-processing step.
Enable HTML extraction on any URL in the batch to receive both a rendered screenshot and the page's raw HTML file in the same result. When you need structured field extraction rather than raw HTML, pair the batch run with the Web Scraper API.
$ pip install requestsimport requests
import json
url = "https://api.apifreaks.com/v1.0/screenshot"
payload = json.dumps({ "urls": [ { "url": "https://whoisfreaks.com/", "file_type": "gif", "width": 3840, "height": 2160, "fresh": true, "image_quality": 100, "scrolling_screenshot": true, "duration": 10 } ] })
headers = {
'Content-Type': 'application/json',
'X-apiKey': 'API-KEY'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
A maximum of 50 URLs can be included in the request body for a bulk lookup request.
Send a POST to /v1.0/screenshot with a urls array. Each object needs at minimum a url; everything else is optional. The response returns one result per submitted URL, in a single JSON body.
# Response { "status": "success", "meta_data": { "total_urls": 2, "successful_urls": 2, "failed_urls": 0 }, "results": [ { "url": { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/ipgeolocation_io__8f4b66d77d7c.jpeg", "url": "https://ipgeolocation.io/", "created_at": "2026-06-11T18:35:14.388Z", "file_type": "jpg", "width": 1680, "height": 867, "fresh": true, "output": "json", "ttl": "2026-07-11T18:35:09.322Z", "sizes": null }, "status": "fulfilled", "error_message": null }, { "url": { "screenshot": "https://s3.eu-central-2.wasabisys.com/w.storage.apifreaks.com/apifreaks_com__a9087f892798.png", "url": "https://apifreaks.com/", "created_at": "2026-06-11T18:35:14.059Z", "file_type": "png", "width": 1680, "height": 867, "fresh": true, "output": "json", "ttl": "2026-07-11T18:35:09.253Z", "sizes": null }, "status": "fulfilled", "error_message": null } ] }curl -X 'POST' 'https://api.apifreaks.com/v1.0/screenshot' \ -H 'Content-Type: application/json' \ -H 'X-apiKey: API-KEY' \ -d '{ "urls": [ { "url": "https://ipgeolocation.io/", "file_type": "jpg", "width": 1680, "height": 867, "fresh": true }, { "url": "https://apifreaks.com/", "file_type": "png", "width": 1680, "height": 867, "fresh": true } ] }'
urls array. If the request body exceeds the maximum size, the API returns HTTP 413; split the batch and resubmit.urls array is configured independently — file_type, width, height, image_quality, extract_html, scrolling_screenshot, and the other render parameters apply per URL, not per request. One batch can mix static images, PDFs, and scrolling video captures.status (fulfilled or rejected) and error_message, and the meta_data block reports successful_urls and failed_urls for the whole run, so failed pages can be retried individually.multiple_scrolling (multiple viewport sizes for a single scrolling capture) is only available on the single-URL endpoint.ttl timestamp showing when the hosted file expires. The default retention is 30 days; the ttl parameter on each URL object controls the cache lifetime.scrolling_screenshot: true with a duration on any URL in the batch and choose gif, mp4, or webm as the file_type for that object.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 per requested domain.
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.