Clioos › Guides › Website Screenshots
How to Take a Screenshot of a Website
The reliable way to take a screenshot of a website without running a browser yourself is an API: you POST a URL, you get image bytes back. Shot (at clioos.com/shot/) does exactly that for public URLs — PNG, JPEG or WebP, viewport or full page, with ads blocked — and the free tier is 20 renders a day per key with no credit card, plus a 50 renders a day cap per IP and 5 requests a minute. On 2 November 2026 a real viewport render of example.com came back 1280x800 in 2,482 ms.
At a glance
- Shot renders public http/https URLs only — private IPs, localhost and cloud metadata endpoints are blocked (unsafe URLs return 422).
- Free quota, verified on the live Shot page 2 November 2026: 20 renders a day per key, 50 renders a day per IP, 5 requests a minute; no credit card while the probe runs.
- Repeat renders of the same URL and parameters are served from a 1-hour cache, and cached renders do not consume your daily quota.
- Default size is 1280x800; width 320-2000, height 200-4000, device scale 1-2, with a 16,000,000-pixel cap on width x height x scale squared.
- Tested 2 November 2026: example.com viewport render, 1280x800 PNG, 70,115 bytes, X-Render-Ms 2,482, X-Cache MISS, 19 renders remaining.
Steps
- Get a free API key at https://clioos.com/shot/ — email verification code or Google sign-in. Free keys get 20 renders a day, no credit card, and paid packs are not on sale yet (the probe is measuring demand first; the interest form only registers interest, no payment).
- Send one POST request: curl -X POST https://clioos.com/shot/v1/screenshot -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" -d '{"url": "https://example.com", "full_page": false}' --output shot.png. For a viewport shot, set full_page to false; the default is true (full page).
- Pick format and size deliberately: format png, jpeg or webp (jpeg and webp take quality 10-100); width 320-2000 and height 200-4000 (default 1280x800); device_scale_factor 1-2 for retina; delay 0-5 seconds of extra wait after load; selector to capture one element instead of the whole page.
- Read the response headers before you trust the file: X-Render-Ms is the render time, X-Cache HIT means it came from the 1-hour cache (and did not consume quota), X-RateLimit-Remaining is your daily renders left. A 0-byte or tiny file with a JSON error body means the request failed — read the error code, do not just retry.
- If you need the same screenshot again within an hour, repeat the identical request: a cache HIT returns the same image without spending quota. Change any parameter and it counts as a new render.
Worked example (tested 2 November 2026)
Method, disclosed in full: this run used a server-side test key created directly in the Shot database, because the public key flow needs an email verification code in a browser and this draft run did not use a browser signup. Renders were called against the local service (127.0.0.1:8091), the same service behind clioos.com/shot/. The test key was revoked after the run, so it cannot be reused.
| Request | Result |
|---|---|
| Viewport render: example.com, full_page false, 1280x800, PNG | HTTP 200, 70,115 bytes, PNG 1280x800, X-Render-Ms 2,482, X-Cache MISS, X-RateLimit-Remaining 19, wall time 2,672 ms |
| Second render in the same run (full page, see the companion guide) | HTTP 200, X-RateLimit-Remaining 18 — the quota counter moved by exactly one per fresh render |
Two honest notes on the numbers. First, 2,482 ms is slower than the landing page's typical under 2 seconds — this was a cache MISS (a first render), and the page itself says typical, not guaranteed. Second, the wall time (2,672 ms) is slightly longer than X-Render-Ms because it includes the local request round trip; quote X-Render-Ms when comparing renders, not wall time.
What it can't do
- No private or logged-in pages: private IPs, localhost, cloud metadata endpoints and redirect tricks to private addresses are blocked (422). Shot accepts no custom headers or cookies, so it cannot screenshot a page behind a login.
- No JavaScript you send: Shot does not run JavaScript you supply, and it does not accept custom headers or cookies. If a page needs interaction (clicks, scrolling past a login wall) before it looks right, a plain render will not do it.
- 30-second hard timeout: the endpoint times out at 30 seconds (504). Very slow or very heavy pages may fail instead of returning a partial image.
- Pixel cap: width x height x scale squared must stay under 16,000,000 pixels. A 1280x800 viewport at scale 2 is about 4.1 million pixels and fits; a very tall full page at scale 2 may not (see the full-page guide).
- Free quota is small by design: 20 renders a day per key, 50 a day per IP, 5 requests a minute. Burst scripts hit 429 or 402 quickly — space requests out, and reuse the 1-hour cache instead of re-rendering.
- Paid packs do not exist yet: as of 2 November 2026 the probe period is free and paid packs are not on sale. Any guide promising a paid Shot tier today is inventing it.
Free alternatives, honestly compared
- Your browser's built-in capture: free and private, but manual — one page at a time, no API, no automation.
- Playwright or Puppeteer on your own machine: free and fully controllable (logins, clicks, cookies), but you install, maintain and scale the browser yourself.
- Shot: no browser to manage and a free daily quota, but public URLs only, no login, no custom headers, and a 30-second timeout.
- Other screenshot APIs: several exist with their own free tiers; compare on the same three numbers — renders per day, timeout, and whether cached renders consume quota — before picking one.
Frequently asked questions
How many free screenshots does Shot give per day?
20 renders a day per key, plus a 50 renders a day cap per IP and 5 requests a minute, no credit card while the probe runs. Cached renders (1-hour cache) do not consume quota.
Can Shot screenshot a page behind a login?
No. It accepts no custom headers or cookies, and private IPs and localhost are blocked. Only public http/https URLs render.
What does X-Cache HIT mean?
The identical URL and parameters were rendered within the last hour, so the cached image was returned. A HIT does not consume your daily quota; a MISS is a fresh render and does consume one.
Why did I get 402 or 429?
402 means the free daily limit (20 per key, or 50 per IP) is reached. 429 means the per-minute rate limit (5 requests a minute per key) or the render queue is full — wait for the Retry-After interval before retrying.
Can I buy more renders?
Not yet. As of 2 November 2026 paid packs are not on sale; the probe period is free, and the interest form only registers interest with no payment taken.
Related guides: How to capture a full web page · Shot — fast website screenshot API · All guides · Tool: PDF Probe