Website Screenshot & PDF API — Fast Captures avatar

Website Screenshot & PDF API — Fast Captures

Pricing

Pay per usage

Go to Apify Store
Website Screenshot & PDF API — Fast Captures

Website Screenshot & PDF API — Fast Captures

Capture pixel-perfect screenshots and PDFs from any URL in under 3 seconds. PNG/JPEG/WebP formats, custom viewports, full-page capture, batch up to 20 URLs.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

George Kioko

George Kioko

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 hours ago

Last modified

Share

📸 Website Screenshot & PDF API — Pixel-Perfect Captures in Under 3 Seconds

The fastest screenshot API on the market. Capture any webpage as PNG, JPEG, WebP, or PDF with sub-3-second delivery. Competitors take 6-21 seconds. We deliver in 1-2 seconds.


Architecture Overview

flowchart TB
subgraph Client["Your Application"]
REQ["HTTP Request"]
end
subgraph API["Screenshot & PDF API"]
ROUTER["Request Router"]
VALIDATE["Input Validation"]
CACHE["10-min LRU Cache"]
BROWSER["Pre-Warmed Puppeteer<br/>Chromium Browser"]
RENDER["Page Renderer"]
FORMAT["Output Formatter"]
CHARGE["PPE Billing"]
end
subgraph Output["Response"]
BIN["Binary Image/PDF"]
B64["Base64 JSON"]
end
REQ --> ROUTER
ROUTER -->|"/screenshot"| VALIDATE
ROUTER -->|"/pdf"| VALIDATE
ROUTER -->|"/batch"| VALIDATE
VALIDATE --> CACHE
CACHE -->|"Hit"| FORMAT
CACHE -->|"Miss"| BROWSER
BROWSER --> RENDER --> FORMAT
FORMAT --> CHARGE
CHARGE --> BIN & B64
style Client fill:#1a1a2e,color:#fff
style API fill:#16213e,color:#fff
style Output fill:#533483,color:#fff

Performance Comparison

gantt
title Screenshot Latency Comparison (lower is better)
dateFormat X
axisFormat %s seconds
section This API
Screenshot (2.1s) :done, 0, 2100
PDF (1.2s) :done, 0, 1200
section Competitor A
Screenshot (8.4s) :crit, 0, 8400
section Competitor B
Screenshot (14.2s) :crit, 0, 14200
section Competitor C
Screenshot (21s) :crit, 0, 21000
MetricThis APICompetitor Avg
Screenshot latency2.1 seconds14.5 seconds
PDF latency1.2 seconds8.3 seconds
Uptime100%74-94%
FormatsPNG, JPEG, WebP, PDFPNG only
Batch support20 URLs per callNone
Full-page captureYesLimited

Request Flow

sequenceDiagram
participant App as Your App
participant API as Screenshot API
participant Cache as LRU Cache
participant Chrome as Puppeteer Chrome
App->>API: GET /screenshot?url=github.com&width=1280
API->>Cache: Lookup (url + params hash)
alt Cache Hit (within 10 min)
Cache-->>API: Cached screenshot
API-->>App: Image binary (instant)
else Cache Miss
API->>Chrome: Create new page
Chrome->>Chrome: Set viewport (1280x720)
Chrome->>Chrome: Navigate to URL
Chrome->>Chrome: Wait for networkidle2
Chrome-->>API: Screenshot buffer
API->>Cache: Store screenshot
API->>API: Actor.charge($0.005)
API-->>App: Image binary (~2.1s)
end

API Endpoints

GET /screenshot — Capture webpage

GET /screenshot?url=https://github.com&width=1920&height=1080&format=png&fullPage=true
ParameterTypeDefaultRangeDescription
urlstringrequiredURL to capture
widthnumber1280320-3840Viewport width in pixels
heightnumber720200-2160Viewport height in pixels
formatstringpngpng, jpeg, webpImage format
fullPagebooleanfalseCapture full scrollable page
qualitynumber801-100Compression (jpeg/webp only)
delaynumber00-10000Wait ms before capture

GET /pdf — Generate PDF

GET /pdf?url=https://github.com&format=A4&landscape=false
ParameterTypeDefaultOptionsDescription
urlstringrequiredURL to convert
formatstringA4A4, Letter, LegalPaper size
landscapebooleanfalseLandscape orientation
printBackgroundbooleantrueInclude backgrounds

POST /batch — Batch screenshots

POST /batch
{
"urls": [
"https://google.com",
"https://github.com",
"https://apple.com"
],
"width": 1280,
"height": 720,
"format": "jpeg"
}

Output Formats

Binary (Default)

Returns raw bytes with headers:

Content-Type: image/png (or image/jpeg, image/webp, application/pdf)
Content-Length: 15856
X-Latency-Ms: 2172
X-From-Cache: false

Base64 JSON

Send header Accept: application/json to get:

{
"base64": "iVBORw0KGgoAAAANSUhEUgAABQ...",
"mimeType": "image/png",
"size": 15856,
"latencyMs": 2172,
"fromCache": false,
"url": "https://github.com"
}

Batch Response

{
"count": 3,
"succeeded": 3,
"failed": 0,
"latencyMs": 4521,
"results": [
{ "url": "https://google.com", "base64": "...", "mimeType": "image/jpeg", "size": 12340 },
{ "url": "https://github.com", "base64": "...", "mimeType": "image/jpeg", "size": 45678 },
{ "url": "https://apple.com", "base64": "...", "mimeType": "image/jpeg", "size": 23456 }
]
}

Use Case Workflows

Visual QA Testing Pipeline

flowchart LR
DEPLOY["New Deployment"] --> URLS["Page URL List"]
URLS --> BATCH["Screenshot API<br/>POST /batch"]
BATCH --> COMPARE["Visual Diff<br/>Engine"]
COMPARE --> PASS["All Match?"]
PASS -->|Yes| OK["Deploy to Prod"]
PASS -->|No| ALERT["Alert QA Team<br/>+ Diff Report"]
style BATCH fill:#10b981,color:#fff
style OK fill:#3b82f6,color:#fff
style ALERT fill:#ef4444,color:#fff

Social Media Preview Generator

flowchart LR
BLOG["New Blog Post<br/>Published"] --> SCREEN["Screenshot API<br/>GET /screenshot"]
SCREEN --> THUMB["1200x630<br/>OG Image"]
THUMB --> TWITTER["Twitter Card"]
THUMB --> LINKEDIN["LinkedIn Preview"]
THUMB --> FACEBOOK["Facebook Share"]
style SCREEN fill:#10b981,color:#fff

Competitive Price Monitoring

flowchart LR
SCHEDULE["Daily Cron Job"] --> URLS["Competitor<br/>Product Pages"]
URLS --> SCREEN["Screenshot API<br/>POST /batch"]
SCREEN --> ARCHIVE["Screenshot<br/>Archive"]
ARCHIVE --> COMPARE["Price Change<br/>Detection"]
COMPARE --> ALERT["Slack Alert:<br/>Price Changed!"]
style SCREEN fill:#10b981,color:#fff
style ALERT fill:#f59e0b,color:#fff

PDF Report Generation

flowchart LR
DASH["Web Dashboard<br/>URL"] --> PDF["Screenshot API<br/>GET /pdf"]
PDF --> EMAIL["Email PDF<br/>to Stakeholders"]
PDF --> DRIVE["Save to<br/>Google Drive"]
PDF --> ARCHIVE["Monthly<br/>Report Archive"]
style PDF fill:#10b981,color:#fff

Pricing

EventPriceCost per 100Cost per 1,000
Screenshot$0.005$0.50$5.00
PDF$0.008$0.80$8.00

Cost Comparison

SolutionPer ScreenshotMonthly (1K/day)
This Actor$0.005$150
ScreenshotAPI.net$0.01$300
Urlbox$0.02$600
Custom Puppeteer server$50/mo + maintenance$50+
Browserless.io$0.008$240

Technical Details

flowchart TB
subgraph "Actor Lifecycle"
INIT["Actor.init()"] --> LAUNCH["Launch Puppeteer<br/>(pre-warmed)"]
LAUNCH --> LISTEN["HTTP Server<br/>on STANDBY_PORT"]
LISTEN --> READY["Ready for<br/>Requests"]
end
subgraph "Per Request"
READY --> PAGE["Create New Page"]
PAGE --> VIEWPORT["Set Viewport"]
VIEWPORT --> NAV["Navigate to URL<br/>(networkidle2, 25s timeout)"]
NAV --> DELAY["Optional Delay"]
DELAY --> CAPTURE["Screenshot or PDF"]
CAPTURE --> CLOSE["Close Page"]
CLOSE --> READY
end
style LAUNCH fill:#10b981,color:#fff
style CAPTURE fill:#3b82f6,color:#fff
  • Browser: Chromium via Puppeteer, pre-launched at startup
  • Concurrency: 3 parallel captures per batch
  • Cache: In-memory LRU, 100 entries, 10-minute TTL
  • Timeout: 25 seconds per page navigation
  • Base Image: apify/actor-node-puppeteer-chrome:22-24.11.1

Integrations

PlatformIntegration Method
ZapierWebhook -> GET /screenshot
Make (Integromat)HTTP module
n8nHTTP Request node
GitHub Actionscurl in CI/CD pipeline
Selenium/PlaywrightScreenshot service replacement
Apify OrchestratorDirect Standby URL call

FAQ

Q: What browser is used? A: Chromium via Puppeteer, pre-warmed at actor startup for instant response.

Q: Can it capture login-protected pages? A: Current version captures public pages only. Authentication support coming soon.

Q: Maximum resolution? A: 3840x2160 (4K Ultra HD). Default: 1280x720 (HD).

Q: How does the cache work? A: Screenshots cached in-memory for 10 minutes. Same URL + same parameters = instant cached response at no additional cost.

Q: Can it handle SPAs / JavaScript-heavy pages? A: Yes! Puppeteer renders JavaScript completely before capture. Uses networkidle2 to wait for all resources.

Q: What's the maximum batch size? A: 20 URLs per batch request. Processed with bounded concurrency (3 at a time).



Built by George Kioko | 6,196+ data extraction jobs | 35+ production APIs | Sub-3s delivery guaranteed