Introduction

A REST API for screenshots, scraping, and visual change detection that routes each request through the right rendering pipeline automatically.

What Bytekit is

Bytekit is a REST API for capturing what a webpage looks like and what it says — screenshots, scrolling recordings, raw HTML or clean markdown, and visual change detection. One API key, one base URL, every output you'd otherwise stitch together from a headless-browser farm and a scraping proxy.

The differentiator isn't a feature — it's the routing. Most scraping APIs either fetch HTML over HTTP (fast, but brittle on JS-heavy pages and easily blocked) or render every request in a full browser (slower and more expensive, but works on more sites). Bytekit does both, in that order, automatically. Simple URLs come back in ~500–800ms. JS-heavy URLs, or pages behind bot protection, fall through to full browser rendering. Same request, same response shape — your code doesn't change.

What you can do with it

  • Scrape — Fetch a URL as raw HTML, clean markdown, or structured content.
  • Screenshot — Capture full-page or viewport PNG/JPEG/WebP.
  • Record — Generate a scrolling video of a page.
  • Monitor — Watch a URL on a schedule and webhook you when the rendered output changes.
  • Bulk — Fan out thousands of URLs in parallel and receive a webhook as each finishes.
  • Sitemap — Discover URLs from a domain's sitemap or by light crawling.

How requests flow

Every capture endpoint follows the same routing model:

  1. Fast path. Simple requests are fetched directly over a geo-routed proxy and returned in around 500–800ms (median). The response carries X-Scrape-* headers describing how it was handled.
  2. Slow path. Browser-only options — wait_for_selector, wait_until: networkidle, custom cookies or headers, any non-zero delay_ms — render the page in a full browser. Typically 3–15 seconds.
  3. Automatic retry. When a direct fetch is blocked by bot protection, Bytekit transparently retries the request in a browser that can clear common challenges. You see the success; you don't write the retry.

The country option routes through a geo-located proxy on the fast path — it does not force a browser render on its own. And any capture call accepts "async": true, in which case the API returns 202 with an ID like sc_…, ss_…, or rec_… that you poll or receive via webhook.

See the Scraping guide for the full trigger table and fallback semantics.

Authentication and accounts

Every request carries a Bearer API key. Keys are prefixed sk_live_ for production and sk_test_ for staging. Manage them from the dashboard — up to 50 active keys per account, with per-key billing attribution so you can split usage cleanly across services or environments.

Full details in the Authentication guide.

Where to go next

  • Quickstart — first call in under five minutes, no SDK required.
  • Client Libraries — official TypeScript and Python SDKs.
  • Scraping — fast vs slow path, automatic browser retry, async polling.
  • Rate Limits — quota model, concurrency slots, response headers.
  • Monitors — schedule-based change detection with webhooks.
  • API Reference — every endpoint, request, and response.