ScrapeforLLM Docs
ScrapeforLLM Docs
Getting StartedScrape a PageScreenshotCrawl a SiteMap, Search & ExtractList & Get ScrapesError Codes

Screenshot

Capture viewport, full-page, responsive, scroll-sliced, and element-targeted screenshots of any URL.

Screenshot

Capture pixel-perfect screenshots of any page. Supports single viewport, full-page, responsive multi-device, scroll-sliced, and element-targeted captures. Cookie popups and consent dialogs are automatically dismissed.

Modes

ModeDescriptionCredits
viewportSingle screenshot at given dimensions (default 1920x1080)2
fullPageFull scrollable page from top to bottom2
responsiveGallery of 3 screenshots: Desktop (1920x1080), Tablet (768x1024), Mobile (375x812)6
scrollViewport-sized slices at each scroll position — like real screen-by-screen browsing2 per slice
elementScreenshot a specific element by CSS selector or clip coordinates2

Viewport Screenshot

Captures exactly what you'd see in a browser window at the specified size.

curl -X POST https://scrapeforllm.com/api/app/scrapes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "url": "https://example.com",
    "type": "screenshot",
    "options": {
      "mode": "viewport",
      "width": 1920,
      "height": 1080
    }
  }'
const response = await fetch("https://scrapeforllm.com/api/app/scrapes", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer YOUR_API_KEY",
  },
  body: JSON.stringify({
    url: "https://example.com",
    type: "screenshot",
    options: { mode: "viewport", width: 1920, height: 1080 },
  }),
});

const data = await response.json();
// data.scrape.result.screenshots[0].url → image URL
import requests

response = requests.post(
    "https://scrapeforllm.com/api/app/scrapes",
    headers={
        "Content-Type": "application/json",
        "Authorization": "Bearer YOUR_API_KEY",
    },
    json={
        "url": "https://example.com",
        "type": "screenshot",
        "options": {"mode": "viewport", "width": 1920, "height": 1080},
    },
)

data = response.json()
print(data["scrape"]["result"]["screenshots"][0]["url"])

Response:

{
  "scrape": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "url": "https://example.com",
    "type": "screenshot",
    "status": "completed",
    "creditsUsed": 2,
    "result": {
      "mode": "viewport",
      "screenshots": [
        {
          "label": "screenshot",
          "url": "/api/screenshots/screenshots/.../screenshot-1920x1080.png",
          "viewport": { "width": 1920, "height": 1080 }
        }
      ]
    }
  }
}

Full Page Screenshot

Captures the entire scrollable page from top to bottom as a single tall image.

curl -X POST https://scrapeforllm.com/api/app/scrapes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "url": "https://example.com",
    "type": "screenshot",
    "options": {
      "mode": "fullPage"
    }
  }'

Responsive Gallery

Captures 3 screenshots at standard breakpoints — useful for testing responsive designs.

curl -X POST https://scrapeforllm.com/api/app/scrapes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "url": "https://example.com",
    "type": "screenshot",
    "options": {
      "mode": "responsive"
    }
  }'

Response includes 3 screenshots:

{
  "scrape": {
    "result": {
      "mode": "responsive",
      "screenshots": [
        { "label": "desktop", "viewport": { "width": 1920, "height": 1080 }, "url": "..." },
        { "label": "tablet", "viewport": { "width": 768, "height": 1024 }, "url": "..." },
        { "label": "mobile", "viewport": { "width": 375, "height": 812 }, "url": "..." }
      ]
    }
  }
}

Scroll Slices

Scrolls through the page and captures a viewport-sized screenshot at each position. Each slice is exactly one viewport tall, like taking a photo at each scroll stop.

curl -X POST https://scrapeforllm.com/api/app/scrapes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "url": "https://example.com",
    "type": "screenshot",
    "options": {
      "mode": "scroll",
      "width": 1920,
      "height": 1080
    }
  }'

Response includes one screenshot per scroll position:

{
  "scrape": {
    "result": {
      "mode": "scroll",
      "totalHeight": 12234,
      "sliceCount": 12,
      "screenshots": [
        { "label": "Scroll 1 of 12", "scrollY": 0, "viewport": { "width": 1920, "height": 1080 }, "url": "..." },
        { "label": "Scroll 2 of 12", "scrollY": 1080, "viewport": { "width": 1920, "height": 1080 }, "url": "..." },
        { "label": "Scroll 3 of 12", "scrollY": 2160, "viewport": { "width": 1920, "height": 1080 }, "url": "..." }
      ]
    }
  }
}

Element Screenshot

Screenshot a specific element by CSS selector — perfect for capturing pricing tables, headers, forms, or any identifiable section.

By CSS Selector

curl -X POST https://scrapeforllm.com/api/app/scrapes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "url": "https://example.com",
    "type": "screenshot",
    "options": {
      "mode": "element",
      "selector": "footer",
      "padding": 10
    }
  }'
const response = await fetch("https://scrapeforllm.com/api/app/scrapes", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer YOUR_API_KEY",
  },
  body: JSON.stringify({
    url: "https://example.com",
    type: "screenshot",
    options: { mode: "element", selector: "footer", padding: 10 },
  }),
});

const data = await response.json();
// data.scrape.result.screenshots[0].url → cropped image of the footer
// data.scrape.result.screenshots[0].boundingBox → { x, y, width, height }
import requests

response = requests.post(
    "https://scrapeforllm.com/api/app/scrapes",
    headers={
        "Content-Type": "application/json",
        "Authorization": "Bearer YOUR_API_KEY",
    },
    json={
        "url": "https://example.com",
        "type": "screenshot",
        "options": {"mode": "element", "selector": "footer", "padding": 10},
    },
)

data = response.json()
print(data["scrape"]["result"]["screenshots"][0]["url"])
print(data["scrape"]["result"]["screenshots"][0]["boundingBox"])

Any valid CSS selector works: #pricing, .hero-section, header, [data-section="features"], main > section:nth-child(2), etc.

By Clip Coordinates

Capture an exact pixel region of the page:

curl -X POST https://scrapeforllm.com/api/app/scrapes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "url": "https://example.com",
    "type": "screenshot",
    "options": {
      "mode": "element",
      "clip": { "x": 0, "y": 0, "width": 1920, "height": 600 }
    }
  }'
Clip fieldTypeDescription
xnumberLeft offset in pixels
ynumberTop offset in pixels
widthnumberWidth of the region
heightnumberHeight of the region

Element Response

{
  "scrape": {
    "result": {
      "mode": "element",
      "selector": "footer",
      "screenshots": [
        {
          "label": "Element: footer",
          "url": "/api/screenshots/screenshots/.../element.png",
          "viewport": { "width": 1920, "height": 1080 },
          "boundingBox": { "x": 0, "y": 11184, "width": 1920, "height": 1049 }
        }
      ]
    }
  }
}

Selector not found?

If the CSS selector doesn't match any element on the page, the API returns a clear error: Element not found: #your-selector. Make sure the element is visible and not behind a lazy-load gate.

Credits

Viewport, Full Page, and Element cost 2 credits each. Responsive costs 6 credits (3 breakpoints x 2). Scroll costs 2 credits per slice (varies by page length).

Scrape a Page

Extract content from any single URL as markdown, HTML, or structured JSON.

Crawl a Site

Crawl an entire website and get every page as clean markdown.

On this page

ScreenshotModesViewport ScreenshotFull Page ScreenshotResponsive GalleryScroll SlicesElement ScreenshotBy CSS SelectorBy Clip CoordinatesElement Response