Pay-per-use · No subscriptions

Puppeteer as a Service – No Server Required

Replace your self-hosted Puppeteer with a clean REST API.

Running Puppeteer in production is painful: memory leaks, zombie Chrome processes, Docker configuration, ARM compatibility issues. HTML2DocHub runs Puppeteer (Playwright/Chromium) in production-hardened infrastructure and exposes it as a simple REST API. Pay per render, not per server hour.

Why developers choose HTML2DocHub

No server setup — no Docker, no Chrome binary management
No memory leaks or zombie browser processes
ARM64 compatible (M1/M2 Macs, AWS Graviton)
Scales automatically — no concurrency limits to configure
Same Chromium engine as local Puppeteer
CSS, JavaScript, custom fonts all rendered correctly
Network idle wait — perfect for dynamic React/Vue pages
Pay only per render — not per server hour

Code Examples

Before: Self-hosted Puppeteer (complex)node
// BEFORE — Self-hosted Puppeteer (all this complexity)
const puppeteer = require("puppeteer");

const browser = await puppeteer.launch({
  executablePath: "/usr/bin/chromium",
  args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage"],
  headless: "new",
});
const page = await browser.newPage();
await page.setContent(html, { waitUntil: "networkidle0" });
const pdf = await page.pdf({ format: "A4", printBackground: true });
await browser.close();
// Then upload to S3, generate signed URL, handle errors...
After: HTML2DocHub API (simple)node
// AFTER — One fetch call
const { download_url } = await fetch(
  "https://api.html2dochub.com/v1/render",
  {
    method: "POST",
    headers: {
      "X-API-Key": "sk_live_YOUR_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      type: "pdf",
      html,
      options: { format: "A4", print_background: true },
    }),
  }
).then((r) => r.json());

// download_url is a signed S3 URL — done.
Python – Puppeteer replacementpython
# Before: pyppeteer / puppeteer-python
# (broken on many systems, memory issues, no M1 support)

# After: HTML2DocHub API — works everywhere
import requests

resp = requests.post(
    "https://api.html2dochub.com/v1/render",
    headers={"X-API-Key": "sk_live_YOUR_KEY"},
    json={
        "type": "pdf",
        "url": "https://yourapp.com/report/42",
        "options": {"format": "A4"},
    },
    timeout=30,
)
pdf_url = resp.json()["download_url"]

Simple, transparent pricing

Pay only for pages rendered. No subscriptions. No minimum monthly fee.

1 page PDF:~₹0.10
10 page PDF:~₹0.80
100 pages/day:~₹8/day
See full pricing details

Frequently Asked Questions

Does it render JavaScript-heavy pages (React, Vue, Angular)?+
Yes. We wait for `networkidle` before capturing — the same behavior as Puppeteer's `waitUntil: 'networkidle0'`.
Can I render a URL instead of raw HTML?+
Yes. Pass the `url` field. SSRF protection is built in — private/internal IPs are automatically blocked.
What about authentication on the page?+
Pass custom headers or cookies in the options object. We'll forward them to the page request.
How is this cheaper than running my own Puppeteer?+
A t3.medium EC2 instance ($30/month) running Puppeteer can render ~10,000 pages/month before memory issues appear. At HTML2DocHub rates, 10,000 pages costs about ₹800. Plus you eliminate DevOps overhead.

Start rendering PDFs today

Free account. No credit card required. API ready in minutes.

Get your free API key