How to Run Batch Website Screenshots at Scale
Learn how to capture thousands of web pages in a single API call using batch screenshots. Covers CSV upload, capture options, progress tracking, and cloud delivery.
When you need more than one screenshot at a time
Monitoring a product catalog, archiving a sitemap, running a visual regression check across hundreds of pages — these workflows all require capturing URLs in bulk. Doing it one request at a time is slow and error-prone. The batch screenshot API solves this by accepting a URL list and processing everything in parallel.
How batch screenshots work
- Upload a URL list — CSV or plain text, one URL per line. Optionally include per-row parameter overrides (country, viewport, delay).
- Set shared capture options — output format, device, ad blocking, automation steps. These apply to every URL unless overridden per row.
- Submit the batch — the API returns a batch ID immediately.
- Poll for progress — check
/batch/infofor completion percentage, success/failure counts, and estimated time remaining. - Download results — retrieve a ZIP containing all screenshots, or deliver them directly to S3, Google Drive, or another integration.
Example: batch capture a sitemap
# 1. Extract URLs from sitemap
curl -s "https://example.com/sitemap.xml" | grep -oP '<loc>\K[^<]+' > urls.txt
# 2. Submit batch
curl -X POST "https://api.screenshotcenter.com/api/batch/create" \
-H "X-API-KEY: YOUR_API_KEY" \
-F "urls=@urls.txt" \
-F "options={"full_page":true,"pdf":false}"
# Response: { "id": "batch_abc123", "url_count": 847 }
Per-row overrides with CSV
Need different settings for different URLs? Use a CSV with column headers:
url,country,screen_width
https://example.com/us-pricing,us,1920
https://example.com/de-pricing,de,1920
https://example.com/jp-pricing,jp,1920
Each row inherits the shared batch options, with the CSV columns overriding specific parameters.
Delivering results to cloud storage
Instead of downloading a ZIP, push results directly to your storage backend. Add an apps parameter to the batch request:
{
"apps": [{
"app": "s3",
"bucket": "my-screenshots",
"path": "batch/{yyyy}/{mm}/{dd}/{domain}/{id}.png"
}]
}
The path template supports date variables so files are organized chronologically. See visual website backup for scheduling patterns.
Handling failures
The batch API retries failed URLs automatically (up to 5 times with exponential backoff). The result CSV includes a status column so you can identify and re-submit any permanently failed URLs.
Scale limits
The batch API accepts up to 100,000 URLs per batch on Enterprise plans. For recurring batch jobs (daily sitemap monitoring, weekly competitor checks), automate submission with a cron job or Zapier.