Free Browserless Alternative for Screenshots: No Docker, No Chromium Setup

2026-04-20 | Tags: [screenshot-api, browserless, alternative, free-api, headless-chrome, chromium]

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.