Pixel-perfect screenshot API with bulk tools, visual change monitoring, and an MCP server — your agent sees the page in the same turn. EU-hosted on our own hardware, from $9/month.
100 captures/month free · no card required
curl "https://screenshotink.com/v1/capture" \
-H "Authorization: Bearer sk_live_…" \
-d url="https://stripe.com" -d full_size=true -d format=png
Your capture renders here — stamped and ready.
Pouring ink… rendering page
Capture failed
Check the URL and try again.
Width, height, full page up to 20,000px, lazy-load handling, zoom, ad blocking, custom delays, caching control. Same key everywhere — REST, tools, and MCP.
curl "https://screenshotink.com/v1/capture" \
-H "Authorization: Bearer sk_live_…" \
-d url="https://example.com" \
-d width=1440 -d full_size=true \
-d no_ads=true -d lazy_load=true \
-d format=png
$ink = new ScreenshotInk('sk_live_…');
$shot = $ink->capture([
'url' => 'https://example.com',
'width' => 1440,
'full_size' => true,
'no_ads' => true,
]);
echo $shot->image_url;
const res = await fetch("https://screenshotink.com/v1/capture", {
method: "POST",
headers: { Authorization: `Bearer ${key}` },
body: JSON.stringify({ url: "https://example.com",
width: 1440, full_size: true, no_ads: true })
});
const { image_url } = await res.json();
import requests
shot = requests.post("https://screenshotink.com/v1/capture",
headers={"Authorization": f"Bearer {key}"},
json={"url": "https://example.com",
"width": 1440, "full_size": True})
print(shot.json()["image_url"])
{
"status": "done",
"image_url": "https://screenshotink.com/shots/9f/9f2k1x.png",
"width": 1440,
"height": 8260,
"format": "png",
"render_ms": 1840,
"cached": false
}
The hero renders correctly — headline, subcopy and CTA are all visible at 1440px. The product card on the right loads its image. No layout overflow detected. ✓
Connect once and your agent can capture, compare, and audit any page — and see the screenshot in the same turn. No headless Chrome to babysit, no local browser at all.
npx @screenshotink/mcp --key sk_live_…
# or remote: https://mcp.screenshotink.com/mcp
Everything runs in the browser against your quota. No scripts to write for the everyday jobs.
Paste up to 20 URLs, get a zip of stamped captures in one run.
One URL across phone, tablet, laptop and desktop — side by side.
Performance, a11y, SEO scores with the rendered page beside them.
Point at a sitemap.xml, capture every page it lists. Up to 50 pages.
Schedule recurring captures of any page. We pixel-diff every run, keep a visual archive, and email you the moment something moves.
from: alerts@screenshotink.com
⚠ Change detected on acme.com/pricing
Your daily check at 06:00 UTC found 3.2% of pixels changed since yesterday.
Changed regions: hero headline, footer CTA.
At 10,000 captures/mo
$29 vs $79+
Pro plan undercuts the market leader at the same volume — and extra credits are $5 per 1,000, never expiring.
Included, not add-ons
Tools + Monitoring
Bulk, responsive, Lighthouse, sitemap tools and visual change monitoring ship on every plan. Competitors sell the API alone.
Your data stays in Europe
EU-hosted
Captures run on our own hardware in the EU — no hyperscaler middleman. GDPR-friendly by default, DPAs on request. US region on the roadmap.
$0
100 captures/mo
$9/mo
2,000 captures/mo
$29/mo
10,000 captures/mo
$79/mo
50,000 captures/mo
Most pages render in 1–3 seconds. Full-page captures of long pages (up to 20,000px) take longer; lazy-load handling adds what you ask for. Cached repeats return in under 200ms.
Yes — one capture is one capture, whether it comes from the REST API, a tool, or your agent over MCP. The Free plan's 100 monthly captures work everywhere, no card required.
Requests return a clear 429 with your reset date. You can buy extra credits at $5 per 1,000 — they never expire — or upgrade mid-cycle.
Captures run from our EU infrastructure on hardware we own — no hyperscaler middleman. Archives and account data stay in the EU, and we sign DPAs on request. A US region is on the roadmap.
Both are included on every plan. Send a URL with format=pdf for a print-quality PDF, or POST raw HTML in the html parameter and get back a PNG, JPEG or PDF. Same endpoint, same quota.