✨ 25 free screenshots every month — no credit card needed

Beautiful screenshots.
One API call.

Capture any website as a stunning, device-framed screenshot. Perfect for OG images, documentation, marketing, and more.

GET https://grabshot.dev/v1/screenshot?url=https://stripe.com&frame=browser&apiKey=sk_demo_123456
curl "https://grabshot.dev/v1/screenshot\
  ?url=https://example.com\
  &width=1280&height=800\
  &frame=browser\
  &format=png\
  &apiKey=YOUR_API_KEY" \
  -o screenshot.png

See the quality difference

🖥
Browser Frame
Perfect for landing pages
📱
Mobile Frame
Showcase mobile designs
💻
MacBook Frame
Professional presentations

What developers are saying

A
Alex Chen
Senior Frontend Developer

"Finally, an API that just works. We use it for auto-generating OG images for our blog posts. The device frames look incredible!"

M
Maria Santos
Product Manager @ TechCorp

"Replaced our buggy in-house solution. GrabShot.dev is fast, reliable, and the ad-blocking feature saves us hours of cleanup."

Everything you need for perfect screenshots

📐

Custom Dimensions

Set exact width, height, or go full-page. Retina support for crystal-clear 2x renders.

📱

Device Frames

Wrap screenshots in beautiful browser, iPhone, MacBook, or iPad frames automatically.

🌙

Dark Mode

Capture websites in dark mode with a single parameter. Perfect for showcasing both themes.

🎯

Element Selector

Screenshot specific elements with CSS selectors. Capture just the hero, pricing table, or any component.

Blazing Fast

Browser pool with smart reuse. Most screenshots complete in under 3 seconds.

🛡️

Ad Blocking

Automatically block ads and trackers for clean, professional screenshots every time.

Try it live

Enter any URL and see the result instantly

Choose your plan

Start free. Scale as you grow. Cancel anytime.

🚀 25 free screenshots/month — No credit card required
FREE

Free

$0

25 screenshots/month

Perfect for trying out

  • ✓ All screenshot options
  • ✓ Device frames
  • ✓ 3 requests/min
  • ✓ Community support
  • ✕ No AI cleanup
  • ⚠ Small watermark on frames
GROWING

Starter

$9/mo

1,000 screenshots/month

$0.009 per screenshot

  • ✓ Everything in Free
  • ✓ No watermarks
  • ✓ AI cleanup (remove popups)
  • ✓ 20 requests/min
  • ✓ Email support
  • ✓ Priority email support
MOST POPULAR

Pro

$29/mo

10,000 screenshots/month

$0.003 per screenshot — Save 67%!

  • ✓ Everything in Starter
  • ✓ 60 requests/min
  • ✓ Webhook callbacks
  • ✓ Priority rendering
  • ✓ Phone + email support
  • ✓ Priority support
ENTERPRISE

Business

$79/mo

50,000 screenshots/month

$0.0016 per screenshot — Save 82%!

  • ✓ Everything in Pro
  • ✓ 120 requests/min
  • ✓ Custom device frames
  • ✓ Dedicated support
  • ✓ Dedicated support
  • ✓ Volume discounts available

All plans include: SSL, CORS support, multiple formats, ad blocking, dark mode, and more.

✓ Free plan available✓ No setup fees✓ Cancel anytime

API Documentation

Simple REST API. Get started in minutes.

Endpoint

GET https://grabshot.dev/v1/screenshot?url={url}&apiKey={key}

Parameters

Param Type Default Description
urlstringrequiredURL to screenshot
apiKeystringrequiredYour API key
widthnumber1280Viewport width in pixels
heightnumber800Viewport height in pixels
formatstringpngpng, jpeg, or webp
qualitynumber80Image quality (jpeg/webp only, 1-100)
fullPagebooleanfalseCapture the full scrollable page
devicestringdesktopdesktop, mobile, or tablet
darkModebooleanfalseEnable dark mode
delaynumber0Wait ms before capture (max 10000)
selectorstringCSS selector to screenshot specific element
framestringnonenone, browser, iphone, macbook
retinabooleanfalse2x resolution for retina displays
blockAdsbooleanfalseBlock ads and trackers
jsonbooleanfalseReturn JSON with base64 image instead of binary

Code Examples

cURL
curl "https://grabshot.dev/v1/screenshot?url=https://github.com&frame=browser&apiKey=YOUR_API_KEY" -o screenshot.png
Node.js
const response = await fetch(
  `https://grabshot.dev/v1/screenshot?url=https://github.com&frame=browser`,
  { headers: { 'Authorization': 'Bearer gs_your_key' } }
);
const buffer = await response.arrayBuffer();
fs.writeFileSync('screenshot.png', Buffer.from(buffer));
Python
import requests

response = requests.get(
    "https://grabshot.dev/v1/screenshot",
    params={"url": "https://github.com", "frame": "browser"},
    headers={"Authorization": "Bearer gs_your_key"}
)
with open("screenshot.png", "wb") as f:
    f.write(response.content)