Screenshot any website
with a simple API
Capture pixel-perfect screenshots of any URL. Desktop and mobile viewports, PNG and JPEG output, full page or viewport crop. One GET request is all it takes.
No credit card required. No catch.
Enter a URL and click Capture
0
screenshots captured
One request. One screenshot.
No SDKs to install, no headless browsers to manage. Send a GET request with the URL you want to capture and get back an image. It works from any language, any platform.
- Desktop (1440x900) and mobile (375x812) viewports
- PNG and JPEG output formats
- Full page capture or viewport crop
- Custom delay for JavaScript-heavy pages
- Configurable width and height
curl "https://api.savepage.io/v1/?url=https://example.com&width=1440&height=900&format=png" \
-H "Authorization: Bearer YOUR_API_KEY" \
-o screenshot.png{
"status": "success",
"url": "https://example.com",
"image": "https://cdn.savepage.io/captures/abc123.png",
"width": 1440,
"height": 900,
"format": "png",
"size": 847291,
"captured_at": "2026-04-01T12:00:00Z"
}Built for developers
Everything you need to capture, store, and serve website screenshots at any scale.
RESTful API
Standard HTTP GET requests. Works with curl, Python, JavaScript, Go, or any HTTP client.
Full Page Capture
Scroll the entire page and capture it as one continuous image. No content gets cut off.
Mobile Viewports
Test how sites look on phones and tablets. Set any viewport width and height.
JavaScript Rendering
Pages are rendered in a real Chromium browser. SPAs, dynamic content, and lazy-loaded images all work.
PNG and JPEG
Choose the format that fits your use case. PNG for pixel-perfect quality, JPEG for smaller files.
CDN Delivery
Screenshots are served from a global CDN. Fast delivery, no matter where your users are.
Used by 2,000+ developers and teams
Works with every language
If it can send an HTTP request, it can take a screenshot.
import requests
response = requests.get(
"https://api.savepage.io/v1/",
params={
"url": "https://example.com",
"width": 1440,
"height": 900,
"format": "png"
},
headers={
"Authorization": "Bearer YOUR_API_KEY"
}
)
data = response.json()
print(data["image"]) # CDN URLconst params = new URLSearchParams({
url: "https://example.com",
width: "1440",
height: "900",
format: "png"
});
const res = await fetch(
`https://api.savepage.io/v1/?${params}`,
{
headers: {
Authorization: "Bearer YOUR_API_KEY"
}
}
);
const data = await res.json();
console.log(data.image); // CDN URLpackage main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://api.savepage.io/v1/" +
"?url=https://example.com" +
"&width=1440&height=900&format=png"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}# Capture and save directly
curl -s "https://api.savepage.io/v1/?url=https://github.com&format=png" \
-H "Authorization: Bearer YOUR_API_KEY" \
| jq -r '.image' \
| xargs curl -o screenshot.png
# Mobile screenshot
curl "https://api.savepage.io/v1/?url=https://github.com&width=375&height=812&format=png" \
-H "Authorization: Bearer YOUR_API_KEY"
# Full page capture
curl "https://api.savepage.io/v1/?url=https://github.com&fullpage=true&format=jpeg" \
-H "Authorization: Bearer YOUR_API_KEY"Free. No catch.
100 screenshots per month at no cost. No credit card required. No trial period. Works for personal and commercial projects.
- 100 screenshots/month
- 1440x900 viewport
- PNG and JPEG
- Full page capture
- No credit card
Need higher limits? See paid plans
Start capturing screenshots today
Free, no credit card required. Set up takes less than a minute.
Get Your Free API Key