ABOUT / SCREENSHOTLY

A screenshot API for teams that would rather not run browsers.

Screenshotly renders a web page in headless Chromium and returns the result over HTTP: an image, a PDF, an HTML snapshot, or a short WebM recording. You send a URL and options; you get back a file and headers that tell you how long it took.

01 / Who builds it

Built and maintained by Asad Ali.

Screenshotly is developed by Asad Ali, who also writes the guides on this site. His background and writing are on his author page.

The official JavaScript/TypeScript and Python clients are published on GitHub, where you can read the code and open issues.

02 / What it does

Capabilities by plan.

Quotas and prices are on the pricing page.

Every plan
PNG, JPEG, and WebP; full-page capture; device presets and custom viewports; ad and cookie-banner blocking
Basic and higher
PDF and HTML output; authenticated capture with cookies and headers; caching; retained delivery; webhooks; async jobs
Growth and higher
AI-assisted overlay removal; scrolling capture; device mockup frames; custom JavaScript; selector hiding; batch jobs
Scale
Regional capture proxy; WebM recordings of 1 to 15 seconds

03 / What it does not do

Limits worth knowing first.

  • Input is always a public URL. Screenshotly does not render raw HTML you upload, and it cannot reach localhost or private networks.
  • PDF output is A4 with fixed 1 cm margins.
  • It captures pages; it does not compare them. Visual diffing, scheduling, and monitoring logic stay in your code.
  • There is no contractual uptime SLA. The status page shows live checks rather than historical uptime figures.

04 / How we run it

Commitments you can check.

Pay for completed captures
Only successful 2xx responses use quota. Validation errors, plan errors, rate limits, and render failures cost nothing, and there are no automatic overage charges.
Publish the contract
The full request schema is available as OpenAPI at /api/openapi.json, the API reference lives on docs.screenshotly.app, and the official JavaScript and Python clients are open source.
Measure instead of promising
Every successful response reports its own X-Screenshot-Duration. The status page shows live dependency and queue checks, not estimated uptime.
Store captures only on request
Synchronous captures are returned, not stored, unless you turn on caching. Retained files expire after the workspace owner's retention setting. Details are on the security page.