Free Browserless Alternative for Screenshots: No Docker, No Chromium Setup
Free Browserless Alternative for Screenshots: No Docker, No Chromium Setup
Browserless is a hosted headless Chrome service. It's popular with developers who need browser automation in the cloud without managing Chromium themselves. But if your use case is specifically screenshots and PDFs — not arbitrary browser automation — there's a direct HTTP API that skips the infrastructure entirely.
Try It Instantly
# Screenshot
curl "https://hermesforge.dev/api/screenshot?url=https://example.com&format=png" -o screenshot.png
# Full-page WebP
curl "https://hermesforge.dev/api/screenshot?url=https://example.com&full_page=true&format=webp" -o fullpage.webp
# PDF
curl "https://hermesforge.dev/api/screenshot?url=https://example.com&format=pdf&full_page=true" -o page.pdf
No Docker. No Chromium. No Puppeteer script. One HTTP call.
What Browserless Does (and What This Covers)
Browserless provides hosted Chromium accessible via the Chrome DevTools Protocol (CDP) and Puppeteer/Playwright-compatible WebSocket endpoints. Use cases include: screenshots, PDFs, web scraping, form automation, SPAs, login flows, and arbitrary JavaScript execution.
If you're using Browserless for screenshots or PDFs, this API handles those directly — without writing Puppeteer code or paying for browser compute. If you need full CDP access (arbitrary browser automation, form filling, multi-step flows), Browserless is the right tool.
Feature Comparison
| Feature | Browserless | This API |
|---|---|---|
| Signup required | Yes | No |
| Free tier | Limited (trial units) | Unlimited (rate-limited, no key) |
| PNG screenshots | Yes (via Puppeteer/API) | Yes |
| WebP screenshots | Yes (via Puppeteer) | Yes |
| JPEG screenshots | Yes (via Puppeteer) | Yes |
| PDF export | Yes (via /pdf endpoint) | Yes (free) |
| Full page capture | Yes | Yes |
| Custom viewport | Yes | Yes (width, height, scale up to 3x) |
| Dark mode | Manual (prefers-color-scheme CSS) | Yes (parameter) |
| Ad blocking | No (requires custom setup) | Yes (25+ domains) |
| Custom delay | Yes (via Puppeteer) | Yes |
| wait_for selector | Yes (full Puppeteer API) | Yes (CSS selectors, up to 15s) |
| Custom JavaScript | Yes (full Puppeteer script) | Yes (2KB inline) |
| Element screenshot | Yes (Puppeteer .screenshot()) | Yes (CSS selector) |
| Retina (2x/3x) | Yes (deviceScaleFactor) | Yes (up to 3x) |
| HTTP Basic Auth | Yes | Yes (with API key) |
| CDP access | Yes | No |
| WebSocket Puppeteer | Yes | No |
| Proxy injection | Yes | No |
| Self-hosted option | Yes (Docker) | No |
Common Browserless Screenshot Patterns — Without Puppeteer
Screenshot via Browserless /screenshot endpoint
# Browserless direct screenshot endpoint
curl -X POST \
"https://chrome.browserless.io/screenshot?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "options": {"type": "png"}}' \
-o screenshot.png
Same result (direct HTTP — no token needed for basic use)
curl "https://hermesforge.dev/api/screenshot?url=https://example.com&format=png" -o screenshot.png
PDF via Browserless /pdf endpoint
# Browserless
curl -X POST \
"https://chrome.browserless.io/pdf?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "options": {"printBackground": true}}' \
-o page.pdf
Same result (direct)
curl "https://hermesforge.dev/api/screenshot?url=https://example.com&format=pdf&full_page=true" -o page.pdf
Full Page + Retina
# 2x retina, full page, WebP
curl "https://hermesforge.dev/api/screenshot?url=https://example.com&full_page=true&scale=2&format=webp" -o retina.webp
Element Screenshot (by CSS selector)
# Capture only the nav element
curl "https://hermesforge.dev/api/screenshot?url=https://example.com&selector=nav&format=png" -o nav.png
Custom Viewport + Dark Mode
curl "https://hermesforge.dev/api/screenshot?url=https://example.com&width=1440&height=900&dark_mode=true&format=webp" -o dark-desktop.webp
Replacing Browserless in a Node.js App
If you have code that currently calls Browserless for screenshots, replacing it is a few lines:
Before (Browserless + Puppeteer):
const puppeteer = require('puppeteer-core');
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://chrome.browserless.io?token=${process.env.BROWSERLESS_TOKEN}`
});
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 800 });
await page.goto('https://example.com', { waitUntil: 'networkidle0' });
const screenshot = await page.screenshot({ type: 'png', fullPage: true });
await browser.close();
After (direct API call):
const response = await fetch(
'https://hermesforge.dev/api/screenshot?' +
new URLSearchParams({
url: 'https://example.com',
width: '1280',
height: '800',
format: 'png',
full_page: 'true'
})
);
const screenshot = await response.arrayBuffer();
No WebSocket. No browser connection. No cleanup.
Python Replacement
Before (Browserless + Pyppeteer):
import asyncio
from pyppeteer import connect
async def screenshot(url):
browser = await connect(
browserWSEndpoint=f"wss://chrome.browserless.io?token={TOKEN}"
)
page = await browser.newPage()
await page.setViewport({'width': 1280, 'height': 800})
await page.goto(url, {'waitUntil': 'networkidle0'})
await page.screenshot({'path': 'screenshot.png', 'fullPage': True})
await browser.close()
After:
import requests
resp = requests.get('https://hermesforge.dev/api/screenshot', params={
'url': 'https://example.com',
'width': '1280',
'height': '800',
'format': 'png',
'full_page': 'true'
})
with open('screenshot.png', 'wb') as f:
f.write(resp.content)
Self-Hosted Browserless vs. This API
Some developers run Browserless in Docker to avoid cloud costs. That still requires: - A server with enough RAM for Chromium (~512MB–1GB per instance) - Docker maintenance and updates - Concurrency management - Dealing with Chromium crashes and restarts
For screenshot use cases, outsourcing that to an API is almost always cheaper per-call than self-hosting, once you factor in server time.
When to Use Which
Browserless is better if you need: - Full Chrome DevTools Protocol (CDP) access - Arbitrary Puppeteer/Playwright scripts (form filling, login, SPAs) - Proxy injection per-request - Self-hosted Chromium with full control - Multi-step browser flows beyond screenshot/PDF
This free alternative is better if you need: - Screenshots or PDFs via a simple HTTP call - No Puppeteer/Playwright dependency in your codebase - Testing capture parameters without provisioning infrastructure - Ad blocking built in (no custom Puppeteer ad-block setup) - Dark mode screenshots without writing CSS injection code - Side projects where Browserless monthly costs aren't justified
Pricing Comparison
| Tier | Browserless | This API |
|---|---|---|
| Free | Limited trial units | Unlimited (2/min, no key) |
| Free with account | Varies (trial) | 50 requests/day (free key) |
| Entry paid | $49/month | $4 / 30 days |
| Professional | $149–$299/month | $9 / 30 days |
| Self-hosted | Server costs + maintenance | Not applicable |
Browserless pricing is subscription-based. This API uses one-time purchasing — buy 30 days of access when you need it, no recurring charges.
Getting Started
No setup:
https://hermesforge.dev/api/screenshot?url=https://example.com&format=png
Try parameters visually in the interactive screenshot tool.
For higher volume, get a free API key — 50 requests/day, no payment required.