NewIntroducing semantic snapshotsPair every capture with structured DOM data →

Comparison

domscout vs running Puppeteer yourself

Puppeteer is a free, well-maintained library for driving Chrome, and for plenty of jobs it is the right tool. What it does not give you is the service around it: the browser to host, the queue, the retries, and the step from HTML to something a model can read. This page sets out that work, what domscout replaces, and when to keep Puppeteer.

The same job, both ways

Render a page at 1280 by 800, save a screenshot, and print the page as Markdown. On the left, the library and a converter on a machine you run. On the right, one request.

Puppeteer + Turndown
import puppeteer from "puppeteer";
import TurndownService from "turndown";

const browser = await puppeteer.launch();
try {
  const page = await browser.newPage();
  await page.setViewport({ width: 1280, height: 800 });
  await page.goto("https://example.com", { waitUntil: "networkidle2" });
  await page.screenshot({ path: "page.png" });
  console.log(new TurndownService().turndown(await page.content()));
} finally {
  await browser.close();
}
domscout
import { writeFile } from "node:fs/promises";

const response = await fetch("https://api.domscout.io/screenshot", {
  method: "POST",
  headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY" },
  body: JSON.stringify({ url: "https://example.com", width: 1280, height: 800, deviceScaleFactor: 1, extractMarkdown: true }),
});
const result = await response.json();
await writeFile("page.png", Buffer.from(result.screenshotBase64, "base64"));
console.log(result.markdown);

What you run when you run it yourself

The script above is the easy part. These are the parts that turn it into something other code can depend on.

ConcernPuppeteer yourselfdomscout
The browserA browser you deploy with your app and keep updatedManaged for you
HostingA server or a function big enough to run ChromiumAn HTTPS API
ConcurrencyYou queue work and cap how many browsers run at onceA per-plan rate limit, and durable batch and crawl jobs on Business and above
Page to MarkdownA second library, plus your own cleanup rulesextractMarkdown returns Markdown and a token estimate
FailuresTimeouts, retries and crash recovery are yours to writeFailed requests are refunded; on Pro and above, long captures can run as async jobs
URLs from your usersStopping a user from pointing your browser at an internal address is yours to get rightURLs on private, reserved and metadata addresses are refused
CostThe compute your browsers use, plus the time to run them$9 a month for 5,000 credits on Pro. The capture above costs 1; credits past quota cost $0.002 each, up to 2x quota

When to keep Puppeteer

If one of these describes your work, running Puppeteer yourself is the better choice.

  • You test your own app in CI against localhost or a private network. domscout only reaches public addresses.
  • Your targets block scrapers. Every domscout capture leaves from one network address, with no proxy rotation and no captcha solving.
  • You run enough volume on machines you already pay for that per-capture pricing costs more than your own compute.
  • Your script runs a long interactive session: many steps, state carried between them, your own JavaScript evaluated in the page. domscout accepts up to 25 actions per capture, and running your own JavaScript needs Business and an account entitlement.

Comparing hosted services instead? domscout vs Firecrawl, ScreenshotOne and Browserless · domscout vs Playwright

Give your product a browser.

Get clean web content and visual proof into your workflow in minutes.