Quick Start: Screenshot a URL in 60 Seconds
Authenticate with your API key and send requests to https://api.addscreenshots.com/screenshots. Control viewport, load waits, CSS and JavaScript injection, and where screenshots land—all with a single payload.
Node.js (axios)
import axios from "axios";
const payload = {
url: "https://example.com",
full_page: true,
storage: {
provider: "s3",
bucket: "example-screenshots",
path: "daily/homepage.png"
}
};
const response = await axios.post(
"https://api.addscreenshots.com/screenshots",
payload,
{
headers: {
"x-api-key": process.env.ADDSCREENSHOTS_KEY,
"Content-Type": "application/json"
}
}
);
console.log(response.data.status);
Python (requests)
import os
import requests
payload = {
"url": "https://example.com/pricing",
"full_page": True,
"wait_for": 3500,
"storage": {
"provider": "azure",
"container": "captures",
"path": "pricing/latest.png"
}
}
response = requests.post(
"https://api.addscreenshots.com/screenshots",
json=payload,
headers={
"x-api-key": os.environ["ADDSCREENSHOTS_KEY"],
"Content-Type": "application/json"
}
)
print(response.json())
PHP (cURL)
<?php
$payload = [
"url" => "https://example.com/login",
"selector" => "#hero",
"storage" => [
"provider" => "cloudflare_r2",
"bucket" => "marketing",
"path" => "hero.png"
]
];
$ch = curl_init("https://api.addscreenshots.com/screenshots");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-api-key: " . getenv("ADDSCREENSHOTS_KEY"),
"Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
Ruby (Net::HTTP)
require "json"
require "net/http"
uri = URI("https://api.addscreenshots.com/screenshots")
payload = {
url: "https://example.com/dashboard",
full_page: true,
webhook: {
url: "https://hooks.example.com/screenshots",
secret: "demo-secret"
}
}
request = Net::HTTP::Post.new(uri)
request["x-api-key"] = ENV["ADDSCREENSHOTS_KEY"]
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.body
Explore the GET and POST API reference plus advanced guides for CSS overrides, script injection, and storage templates.
Why teams choose Add Screenshots
- No throttling or queueing: Capture high-volume batches without hidden concurrency caps.
- Global parity testing: Route jobs through 20+ regions to validate localized pricing, consent banners, and CDN behavior.
- Automation-friendly: Schedule recurring jobs, trigger webhooks, and chain workflows via Zapier, Make, or custom integrations.
- Developer observability: Access usage logs, diff highlights, and granular response codes to troubleshoot quickly.
- Flexible delivery: Stream captures to S3, Azure Blob, Google Cloud Storage, Cloudflare R2, FTP/SFTP, or email.
Automation workflows the API unlocks
Visual QA and regression testing
Pair screenshots with diff detection to alert engineering when UI changes exceed configurable thresholds. Capture before/after views during release pipelines or nightly builds.
Competitor and price monitoring
Schedule hourly captures across global regions to track competitor pricing, promotional banners, and checkout flows. Drop assets into S3, share to Slack, or archive for compliance.
Compliance and record keeping
Generate timestamped captures for legal holds, advertising approvals, and regulatory submissions. Retain residency control by routing jobs through specific regions and storage buckets.
Add Screenshots vs other website screenshot APIs
| Capability | Add Screenshots | Urlbox | ApiFlash | Site-Shot |
|---|
| No throttling on concurrent jobs | Yes | Limits by plan | Limits by plan | Queue delays |
| Global capture regions | 20+ across AWS, Azure, Google | Limited regions | EU & US only | Single EU region |
| Direct uploads (S3, Azure, GCS, R2) | Included on all plans | Add-on configuration | S3 only | Email & download |
| Scheduled bulk jobs | Hourly, daily, CRON | Limited automation | Manual or Zapier | Daily |
| Visual diff change detection | Integrated | Third-party | Not available | Not available |
Looking for a migration path? Read the website screenshot service overview or contact support for tailored onboarding.
Infrastructure and trust signals
- Multi-cloud resiliency: Capture via AWS, Azure, and Google infrastructure with automatic retries when providers hiccup.
- Secure storage handoff: Signed URLs, encrypted transfers, and customer-controlled retention policies.
- Transparent monitoring: Real-time status page, 99.9% uptime, and incident postmortems.
- GDPR-ready: Route EU data to regional storage and integrate consent banners using cookie consent automation.
Website Screenshot API FAQs
Is there a free website screenshot API plan?
Yes. Every Add Screenshots account starts with 100 free captures per month, perfect for prototypes and staging validation. Upgrade any time for higher volume, team seats, and advanced automation features.
How fast are captures returned?
Real-time captures complete in a few seconds depending on page complexity. Batch jobs run concurrently with no throttling, and you can use webhooks to receive completion notifications without polling.
Can I capture behind authentication or consent walls?
Absolutely. Use authentication helpers, inject custom JavaScript, or simulate clicks and form fills before capture. Consent banners can be accepted automatically using the cookie consent features.
How do I store screenshots in my own cloud?
Define a storage block in your request with credentials for S3, Azure Blob, Google Cloud Storage, Cloudflare R2, FTP, or email. The API delivers assets directly without temporary hosting.
Can I trigger captures using my sitemap?
Yes. Use sitemap screenshot patterns to fan out captures across thousands of URLs, or combine with scheduled jobs for recurring coverage.