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
| Mode | Description | Credits |
|---|---|---|
viewport | Single screenshot at given dimensions (default 1920x1080) | 2 |
fullPage | Full scrollable page from top to bottom | 2 |
responsive | Gallery of 3 screenshots: Desktop (1920x1080), Tablet (768x1024), Mobile (375x812) | 6 |
scroll | Viewport-sized slices at each scroll position — like real screen-by-screen browsing | 2 per slice |
element | Screenshot a specific element by CSS selector or clip coordinates | 2 |
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 URLimport 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 field | Type | Description |
|---|---|---|
x | number | Left offset in pixels |
y | number | Top offset in pixels |
width | number | Width of the region |
height | number | Height 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).