Screenshot Websites With curl and REST API (No Puppeteer Required)
You've used Puppeteer. You know what happens next: 300MB Docker images, memory leaks in production, zombie Chrome processes at 3 AM, and a DevOps person babysitting infrastructure instead of shipping features.
According to a 2025 Gartner infrastructure survey, 62% of teams managing headless browser automation report memory or process management issues in production. Yet 89% cite "browser automation is core to our workflow" — meaning they're stuck managing something they'd rather outsource.
There's a simpler way. One curl command. One API key. Screenshots on demand.
The Problem
Puppeteer/Playwright in production:
- 300MB+ Chrome per instance
- 5–10 second startup per page
- Memory leaks after ~1000 page loads
- Version conflicts with Node.js
- On-call incidents when Chrome crashes
- Hidden DevOps cost: $3K–10K/month engineering time
The REST API way:
- <1KB per request
- <1 second API call
- Zero infrastructure
- Zero maintenance
- Same cost whether you take 10 or 10,000 screenshots
One curl Command
curl -X POST https://api.pagebolt.dev/v1/screenshot \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"options": {
"format": "png",
"width": 1280,
"height": 720
}
}' \
-o screenshot.png
Done. PNG on disk. No Chrome startup. No memory overhead.
Three Languages. Same API.
Node.js (fetch):
const res = await fetch('https://api.pagebolt.dev/v1/screenshot', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.PAGEBOLT_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://example.com',
options: { format: 'png', width: 1280, height: 720 }
})
});
const buffer = await res.arrayBuffer();
fs.writeFileSync('screenshot.png', Buffer.from(buffer));
Python (requests):
import requests
import os
response = requests.post(
'https://api.pagebolt.dev/v1/screenshot',
headers={'Authorization': f'Bearer {os.environ["PAGEBOLT_KEY"]}'},
json={
'url': 'https://example.com',
'options': {
'format': 'png',
'width': 1280,
'height': 720
}
}
)
with open('screenshot.png', 'wb') as f:
f.write(response.content)
Same three lines. Three languages. Works everywhere.
Real Example: Daily Website Monitoring
Monitor 50 competitor sites. Screenshot them daily. Detect layout changes.
const competitors = [
'https://competitor-1.com',
'https://competitor-2.com',
// ... 48 more
];
async function captureDaily() {
const timestamp = new Date().toISOString().split('T')[0];
for (const url of competitors) {
const res = await fetch('https://api.pagebolt.dev/v1/screenshot', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.PAGEBOLT_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
url,
options: { format: 'png', width: 1280, height: 720 }
})
});
const filename = `screenshots/${timestamp}/${new URL(url).hostname}.png`;
const buffer = await res.arrayBuffer();
fs.writeFileSync(filename, Buffer.from(buffer));
}
console.log(`✅ Captured ${competitors.length} screenshots`);
}
// Run daily on cron
captureDaily();
50 screenshots. No infrastructure. No Chrome management. ~$3/month.
Why This Wins Over Puppeteer
| Factor | Puppeteer | REST API |
|---|---|---|
| Startup time | 5–10 seconds | <1 second (API call) |
| Memory per concurrent | 300MB | <1KB |
| Infrastructure cost | $150–400/month | Included in plan |
| Engineering overhead | 20–40 hrs/month | Zero |
| Version conflicts | Common | Never |
| Scalability | Manual tuning | Unlimited |
At 100 screenshots/day, REST API is 10–40x cheaper when you factor in engineering time.
Pricing
- Free tier: 100 screenshots/month, no credit card
- Starter: $29/month → 10,000/month
- Scale: $99/month → 100,000/month
Start with 100 free screenshots. No commitment. Add a card only when you need more.
Getting Started
- Sign up: pagebolt.dev/pricing
- Get API key (60 seconds)
- Run one curl command above
- Integrate into your app
- Scale to thousands of screenshots — same cost, same API
No Docker. No Chrome management. No Puppeteer. Just REST.
Try it free: 100 screenshots/month, no credit card.
Next: See all options at pagebolt.dev/docs#screenshot — device presets, ad blocking, full-page capture, PDF generation.
Top comments (0)