Screenshots, PDFs, and page content via one HTTP GET.
Real Chrome renders your target. Decodo proxy fallback handles Cloudflare. Markdown extract feeds LLMs. One API key, five endpoints, no SDK required.
Built for the pages that break other APIs.
SPAs, lazy-loaded feeds, Cloudflare challenges, cookie walls. We render them in real Chrome and fall through a residential proxy when origins push back.
Anti-blocking proxy fallback
If the origin returns 403 or a Cloudflare challenge, we retry through the Decodo residential network. Transparent, automatic, logged in the response.
via_proxy: true
Real Chrome rendering
Puppeteer on headless Chromium. Full JS execution, lazy-load scrolling, custom viewports, wait-for-selector, dark-mode emulation.
wait_for=.feed-loaded
PDF + markdown extract
One-shot PDF of any page, or clean markdown stripped of nav/ads — the shape LLMs actually want to ingest. No Readability workarounds.
/api/extract → md
MCP for AI agents
npm i urlsnap-mcp — drop urlsnap into Claude Desktop or Claude Code. Your agent can see any URL.
urlsnap-mcp · published
Five verbs. Zero ceremony.
Every endpoint accepts the same X-API-Key header. All responses include timing, cache status, and whether the proxy fallback fired.
Paste into your stack.
No SDK to install. If your language can speak HTTP, you can speak urlsnap.
# Save a screenshot to disk curl -H "X-API-Key: $URLSNAP_KEY" \ -o out.png \ "https://api.urlsnap.dev/api/screenshot?url=https://news.ycombinator.com&full_page=true"
// node 18+, no deps const key = process.env.URLSNAP_KEY; const url = "https://stripe.com"; const res = await fetch( `https://api.urlsnap.dev/api/extract?url=${encodeURIComponent(url)}`, { headers: { "X-API-Key": key } } ); const { markdown, title, render_ms } = await res.json(); console.log(title, render_ms + "ms");
import os, requests r = requests.get( "https://api.urlsnap.dev/api/pdf", params={"url": "https://arxiv.org/abs/1706.03762"}, headers={"X-API-Key": os.environ["URLSNAP_KEY"]}, timeout=60, ) r.raise_for_status() with open("paper.pdf", "wb") as f: f.write(r.content)
package main import ( "io" "net/http" "os" ) func main() { req, _ := http.NewRequest("GET", "https://api.urlsnap.dev/api/screenshot?url=https://go.dev", nil) req.Header.Set("X-API-Key", os.Getenv("URLSNAP_KEY")) resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close() out, _ := os.Create("go.png") io.Copy(out, resp.Body) }
<?php $ch = curl_init("https://api.urlsnap.dev/api/preview?url=https://laravel.com"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["X-API-Key: " . getenv("URLSNAP_KEY")], ]); $meta = json_decode(curl_exec($ch), true); echo $meta["title"];
Where we diverge from Urlbox, ScreenshotOne, ApiFlash.
Pulled from competitors' public pricing and docs as of this month. Correct anything you think is wrong — we update quarterly.
Pay for what you render.
No seats, no feature-gated tiers. Cancel in one click from the dashboard. Overage is billed at cost, not 5x.
- All 5 endpoints
- Proxy fallback included
- Community support
- No credit card required
- Everything in Free
- Email support < 24 h
- 99.9% uptime SLO
- Priority render queue
- Everything in Starter
- Custom viewports, proxies
- Webhook delivery for PDFs
- Higher per-request timeout
Give your LLM eyes.
Install the MCP server and Claude Desktop or Claude Code can screenshot, render, and extract any URL on your behalf. Zero glue code.
Ships with tools for screenshot, extract_markdown, and pdf.
Ship it in the next ten minutes.
Free key, no card. First screenshot in a single curl. Upgrade when you outgrow it.