Skip to main content
The Screenshot endpoint captures a pixel-perfect screenshot of any URL. It renders JavaScript, blocks ads and cookie banners, handles CAPTCHAs, and can emulate any device or viewport size. Endpoint: POST https://api.geekflare.com/screenshot

Basic Screenshot

Capture a screenshot and get back a CDN URL to the image.
import requests

response = requests.post(
"https://api.geekflare.com/screenshot",
headers={"x-api-key": "YOUR_API_KEY"},
json={"url": "https://example.com"}
)
print(response.json())

{
  "timestamp": 1778737930991,
  "apiStatus": "success",
  "apiCode": 200,
  "meta": {
    "url": "https://example.com",
    "type": "png",
    "device": "desktop",
    "fullPage": false,
    "blockAds": true,
    "hideCookie": true,
    "skipCaptcha": true,
    "addTimestamp": false,
    "test": { "id": "abc123" }
  },
  "data": "https://cdn.geekflare.com/tests/screenshot/kbi6d206g87ituahb7icwtpr.png"
}

Full-Page Screenshot

Capture the entire scrollable page, not just the viewport.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "fullPage": True
    }
)

Image Format and Quality

Choose between PNG, JPEG, or WebP output and control quality for JPEG/WebP.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "type": "webp",
        "quality": 85
    }
)

Device Emulation

Emulate a mobile device to capture mobile-specific layouts.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "device": "mobile"
    }
)

Custom Viewport

Set a custom viewport width, height, or page height for partial screenshots.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "viewportWidth": 1440,
        "viewportHeight": 900,
        "pageHeight": 1200
    }
)

Retina / High-DPI

Capture Retina-quality screenshots using a higher device scale factor.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "scaleFactor": 2
    }
)

Dark Mode

Render the page in dark mode before capturing.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "theme": "dark"
    }
)

Draw visible borders around all clickable links, buttons, and inputs. Useful for AI vision models and LLM web browsing agents.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "highlightLinks": True
    }
)

Remove Background

Remove the page background for transparent PNG output. Useful for design tools.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "removeBackground": True,
        "type": "png"
    }
)

Add Timestamp

Add a timestamp watermark to the screenshot for audit trails or monitoring.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "addTimestamp": True
    }
)

Proxy Routing

Route the browser through a specific country’s IP to capture geo-specific or localized content.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "proxyCountry": "de"
    }
)

Delayed Screenshot

Wait a set number of seconds after page load before capturing. Useful for pages with animations or slow-loading widgets.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "delay": 3
    }
)

Disable Animations

Freeze CSS animations and transitions before capturing. Produces cleaner, more consistent screenshots.
response = requests.post(
    "https://api.geekflare.com/screenshot",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://example.com",
        "disableAnimations": True
    }
)

All Parameters

ParameterTypeDefaultDescription
urlstringrequiredTarget URL
devicedesktop | mobiledesktopDevice to emulate
typepng | jpeg | webppngImage format
fullPagebooleanfalseCapture full scrollable page
blockAdsbooleantrueBlock ads before capturing
hideCookiebooleantrueRemove cookie consent banners
skipCaptchabooleantrueAttempt to bypass CAPTCHAs
proxyCountrystringRoute browser through country ISO code
viewportWidthnumberViewport width in pixels (320–3840)
viewportHeightnumberViewport height in pixels (240–2160)
pageHeightnumberPage height for partial screenshot (100–5000)
scaleFactornumberDevice pixel ratio (0.1–5). Use 2–3 for Retina
themelight | dark | autoautoColor scheme
qualitynumberImage quality 10–100 (JPEG/WebP only)
delaynumberSeconds to wait after page load (0–10)
highlightLinksbooleanfalseDraw borders around links/buttons (AI vision)
removeBackgroundbooleanfalseRemove page background (PNG only)
disableAnimationsbooleanfalseFreeze CSS animations before capture
captureBeyondViewportbooleanCapture content beyond viewport
addTimestampbooleanfalseAdd timestamp watermark