DEV Community

Custodia-Admin
Custodia-Admin

Posted on • Originally published at pagebolt.dev

Screenshot Any Website With One curl Command (No Puppeteer)

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
Enter fullscreen mode Exit fullscreen mode

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));
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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();
Enter fullscreen mode Exit fullscreen mode

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

  1. Sign up: pagebolt.dev/pricing
  2. Get API key (60 seconds)
  3. Run one curl command above
  4. Integrate into your app
  5. 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)