Website screenshots

Website screenshots for thumbnails, previews and social cards

Turn a URL into a preview image sized exactly for the surface it will appear in.

Capture settings
Enter the source, choose your options, then run the capture.
Result
Your capture will appear here and stay in view.
waiting

No result yet

Complete the settings and run the tool. Images, PDFs, text, and video all preview in this panel.

Send this exact request
cURL, TypeScript and Python are generated from the same configuration as the demo.
curl --fail-with-body "https://api.pagecapture.dev/v1/take" \
  -H "X-Access-Key: $PAGECAPTURE_KEY" \
  -H "Content-Type: application/json" \
  --data '{"url":"https://example.com","viewport_device":"desktop_1280","format":"webp","block_cookie_banners":true}' \
  -o capture.webp

Social card preset

A 1200×630 device preset at 2× — the size every platform expects.

Banners removed

Consent overlays and chat widgets stripped before the shot, so the thumbnail shows the page.

Cache what repeats

A thumbnail regenerated on every page view is billed once per TTL, not once per view.

WebP and AVIF

Smaller files for the same preview, without a second processing step in your app.

Use this when
  • You need consistent device-sized screenshots inside a product.
  • The artifact format and viewport must be part of the request contract.
Do not use this when
  • You only need a browser extension for manual captures.
  • You need a preview cache keyed by many page views rather than capture requests.
Workflow

From input to verified artifact

  1. 01

    Choose a device

    A versioned preset sets viewport, scale, touch and user agent together.

  2. 02

    Capture

    The page renders after optional banner blocking and readiness waits.

  3. 03

    Publish

    Use the returned bytes or store the artifact in your own bucket.

Edge cases and common errors

Automation is blocked

host_returned_error

The API does not solve CAPTCHAs or bypass a publisher that rejects automated browsers; the challenge page answers with an HTTP error.

Layout differs by device

Use a device preset rather than changing width alone when user agent or touch changes the page.

DIY in hours and operational risk

Keep the browser when that is the simpler system.

DIY stays reasonable when one service owns both the page and the browser process.

DIY is a good fit when

  • One controlled site and one fixed viewport cover the workload.
  • Your deployment already ships a pinned compatible Chromium.

No default is supplied: we do not invent engineering-hour savings.

Responsibility and risk transferred
Device catalog
Viewport and user-agent drift can make screenshots internally inconsistent.
Concurrency
Parallel browser contexts can exceed memory before request rate limits react.
Workload pricing

5,000 website captures

This is an editable scenario, not a savings claim. Only successful captures that miss cache are billable.

Billable successes
3,920
Smallest included plan
Growth
Published monthly price
$47.00
Tested and reviewed

Written by PageCapture Engineering. Reviewed by PageCapture API maintainers. Last tested 2026-08-11.

cURL, TypeScript and Python executed against controlled fixtures; request contract and artifact format verified.

Questions this raises

How do I keep thumbnails from going stale?

Set cache_ttl to how long a preview may lag reality — a day is common. Hits inside the window are free; the first request after it re-renders.

Can I write straight to my CDN bucket?

Yes. Set store=true with a saved storage configuration and response_type=empty, and the object lands in your bucket without passing through your app.

What about pages that block automation?

We apply the evasions consistent with ordinary navigation and do not solve CAPTCHAs. A page determined to block automated browsers will still block ours.