Website Screenshot & PDF API — Fast Captures
Pricing
Pay per usage
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
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 hours ago
Last modified
Categories
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 TBsubgraph Client["Your Application"]REQ["HTTP Request"]endsubgraph 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"]endsubgraph Output["Response"]BIN["Binary Image/PDF"]B64["Base64 JSON"]endREQ --> ROUTERROUTER -->|"/screenshot"| VALIDATEROUTER -->|"/pdf"| VALIDATEROUTER -->|"/batch"| VALIDATEVALIDATE --> CACHECACHE -->|"Hit"| FORMATCACHE -->|"Miss"| BROWSERBROWSER --> RENDER --> FORMATFORMAT --> CHARGECHARGE --> BIN & B64style Client fill:#1a1a2e,color:#fffstyle API fill:#16213e,color:#fffstyle Output fill:#533483,color:#fff
Performance Comparison
gantttitle Screenshot Latency Comparison (lower is better)dateFormat XaxisFormat %s secondssection This APIScreenshot (2.1s) :done, 0, 2100PDF (1.2s) :done, 0, 1200section Competitor AScreenshot (8.4s) :crit, 0, 8400section Competitor BScreenshot (14.2s) :crit, 0, 14200section Competitor CScreenshot (21s) :crit, 0, 21000
| Metric | This API | Competitor Avg |
|---|---|---|
| Screenshot latency | 2.1 seconds | 14.5 seconds |
| PDF latency | 1.2 seconds | 8.3 seconds |
| Uptime | 100% | 74-94% |
| Formats | PNG, JPEG, WebP, PDF | PNG only |
| Batch support | 20 URLs per call | None |
| Full-page capture | Yes | Limited |
Request Flow
sequenceDiagramparticipant App as Your Appparticipant API as Screenshot APIparticipant Cache as LRU Cacheparticipant Chrome as Puppeteer ChromeApp->>API: GET /screenshot?url=github.com&width=1280API->>Cache: Lookup (url + params hash)alt Cache Hit (within 10 min)Cache-->>API: Cached screenshotAPI-->>App: Image binary (instant)else Cache MissAPI->>Chrome: Create new pageChrome->>Chrome: Set viewport (1280x720)Chrome->>Chrome: Navigate to URLChrome->>Chrome: Wait for networkidle2Chrome-->>API: Screenshot bufferAPI->>Cache: Store screenshotAPI->>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
| Parameter | Type | Default | Range | Description |
|---|---|---|---|---|
url | string | required | — | URL to capture |
width | number | 1280 | 320-3840 | Viewport width in pixels |
height | number | 720 | 200-2160 | Viewport height in pixels |
format | string | png | png, jpeg, webp | Image format |
fullPage | boolean | false | — | Capture full scrollable page |
quality | number | 80 | 1-100 | Compression (jpeg/webp only) |
delay | number | 0 | 0-10000 | Wait ms before capture |
GET /pdf — Generate PDF
GET /pdf?url=https://github.com&format=A4&landscape=false
| Parameter | Type | Default | Options | Description |
|---|---|---|---|---|
url | string | required | — | URL to convert |
format | string | A4 | A4, Letter, Legal | Paper size |
landscape | boolean | false | — | Landscape orientation |
printBackground | boolean | true | — | Include 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: 15856X-Latency-Ms: 2172X-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 LRDEPLOY["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:#fffstyle OK fill:#3b82f6,color:#fffstyle ALERT fill:#ef4444,color:#fff
Social Media Preview Generator
flowchart LRBLOG["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 LRSCHEDULE["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:#fffstyle ALERT fill:#f59e0b,color:#fff
PDF Report Generation
flowchart LRDASH["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
| Event | Price | Cost per 100 | Cost per 1,000 |
|---|---|---|---|
| Screenshot | $0.005 | $0.50 | $5.00 |
| $0.008 | $0.80 | $8.00 |
Cost Comparison
| Solution | Per Screenshot | Monthly (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 TBsubgraph "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"]endsubgraph "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 --> READYendstyle LAUNCH fill:#10b981,color:#fffstyle 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
| Platform | Integration Method |
|---|---|
| Zapier | Webhook -> GET /screenshot |
| Make (Integromat) | HTTP module |
| n8n | HTTP Request node |
| GitHub Actions | curl in CI/CD pipeline |
| Selenium/Playwright | Screenshot service replacement |
| Apify Orchestrator | Direct 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).
Related Actors
- Web Content Extractor API — Extract structured JSON from any URL
- WebSight API — Website intelligence (SEO, tech stack, AI score)
- Website Contact Scraper — Extract emails, phones, social links
Built by George Kioko | 6,196+ data extraction jobs | 35+ production APIs | Sub-3s delivery guaranteed