v1 · stable · 99.9% uptime

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.

20/dayfree tier, no card
~1.8sp50 render latency
5REST endpoints
~/urlsnap — curl
$ curl -H "X-API-Key: $URLSNAP_KEY" \ "https://api.urlsnap.dev/api/screenshot?url=https://stripe.com&full_page=true&format=json"
200 application/json · 1.4 KB · 1.76 s
{ "ok": true, "url": "https://stripe.com", "image": "https://cdn.urlsnap.dev/s/8f3e2a1c.png", "width": 1280, "height": 7240, "render_ms": 1762, "via_proxy": false, "cached": false }
// capabilities

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
// endpoints

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.

GET/api/screenshot?url=PNG or JPEG of any page
GET/api/pdf?url=Print-ready PDF
GET/api/extract?url=Clean markdown for LLMs
GET/api/preview?url=OG tags, title, favicon
POST/api/monitorVisual change detection
GET/api/usageYour quota + billing period
// integrate

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"
// vs the alternatives

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.

feature
urlsnap
Urlbox
ScreenshotOne
ApiFlash
Free tier
20/day, no card
7-day trial
100/mo
100/mo
Entry plan
$9 / 1k
$19 / 1k
$17 / 2k
$7 / 1k
Residential proxy fallback
built-in
add-on
add-on
Markdown extract for LLMs
MCP server for AI agents
npm
Visual change monitoring
// pricing

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.

Free
$0/mo
20 requests / day
  • All 5 endpoints
  • Proxy fallback included
  • Community support
  • No credit card required
Start free
Pro
$29/mo
10,000 requests / month
  • Everything in Starter
  • Custom viewports, proxies
  • Webhook delivery for PDFs
  • Higher per-request timeout
Upgrade to Pro
// model context protocol

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.

View on npm
~/.claude — mcp install
$ npm install -g urlsnap-mcp # then add to claude_desktop_config.json: { "mcpServers": { "urlsnap": { "command": "urlsnap-mcp", "env": { "URLSNAP_KEY": "sk_..." } } } } $ # restart Claude. your agent can now see the web.
// go

Ship it in the next ten minutes.

Free key, no card. First screenshot in a single curl. Upgrade when you outgrow it.