Screenshot API for Developers

Capture any web page programmatically. Social cards, documentation, visual testing, PDF reports, and automation — one API call.

Try it now — enter any URL

Preset:

Generated Screenshot (1200×630)

Preview will appear here

Preview on Twitter

yourapp.com

Page Title Goes Here

Description of the page content...

Preview as:

Built for developers and teams of all sizes

How it works

1

Add the meta tag

Drop one line into your HTML <head>. That's it.

<meta property="og:image" content="https://api..." />
2

We render on demand

First request: we screenshot your page. Then it's cached on our CDN.

~200ms
3

Links look great

Twitter, LinkedIn, Slack show rich previews automatically.

yourapp.com

Page Title

One line of code. Seriously.

html
<!-- Add to your page's <head> -->

<meta property="og:image"
      content="https://api.renderscreenshot.com/v1/screenshot
               ?url=https://yourapp.com/post/123
               &preset=og_card
               &api_key=rs_live_xxxxx" />
javascript
import { Client, TakeOptions } from 'renderscreenshot';

const client = new Client('rs_live_xxxxx');

const image = await client.take(
  TakeOptions.url('https://yourapp.com/post/123')
    .preset('og_card')
);
python
from renderscreenshot import Client, TakeOptions

client = Client("rs_live_xxxxx")

image = client.take(
    TakeOptions.url("https://yourapp.com/post/123")
    .preset("og_card")
)

with open("screenshot.png", "wb") as f:
    f.write(image)
ruby
require "renderscreenshot"

client = RenderScreenshot::Client.new("rs_live_xxxxx")

image = client.take(
  RenderScreenshot::TakeOptions
    .url("https://yourapp.com/post/123")
    .preset("og_card")
)

File.binwrite("screenshot.png", image)
php
use RenderScreenshot\Client;
use RenderScreenshot\TakeOptions;

$client = new Client('rs_live_xxxxx');

$image = $client->take(
    TakeOptions::url('https://yourapp.com/post/123')
        ->preset('og_card')
);

file_put_contents('screenshot.png', $image);
java
import com.renderscreenshot.Client;
import com.renderscreenshot.TakeOptions;

Client client = new Client("rs_live_xxxxx");

byte[] image = client.take(
    TakeOptions.url("https://yourapp.com/post/123")
        .preset("og_card")
);

Files.write(Path.of("screenshot.png"), image);
bash
curl "https://api.renderscreenshot.com/v1/screenshot\
  ?url=https://yourapp.com/post/123\
  &preset=og_card" \
  -H "Authorization: Bearer rs_live_xxxxx" \
  -o screenshot.png

Built for your use case

Social Cards

Dynamic og:image for Twitter, LinkedIn, Slack.

Documentation

Automated UI screenshots. Always up to date.

Visual Testing

Catch UI regressions in your CI/CD pipeline.

PDF Reports

Generate PDFs from any web page or dashboard.

Link Previews

Rich previews for Slack, Discord, iMessage.

Automation

Integrate into CI/CD, cron jobs, webhooks.

Why RenderScreenshot

Fast

Screenshots in under 2 seconds. Globally cached on our CDN.

Secure

Signed URLs with expiration. Keys never exposed in public HTML.

Cached

Automatic CDN caching. Pay once, serve millions of requests.

Presets

og_card, twitter_card, full_page in one parameter.

Clean Output

Block ads, popups, cookie banners automatically.

Full Control

Custom viewport, wait conditions, element selectors.

Simple, transparent pricing

Start free. Scale as you grow. No surprises.

Free

$0 one-time
  • 50 credits one-time
  • 10 requests/minute
  • Batch up to 5 URLs
  • 2 concurrent requests
Get Started

Starter

$10 /month
  • 2,500 credits/month
  • 60 requests/minute
  • Batch up to 20 URLs
  • 5 concurrent requests
Get Started
POPULAR

Growth

$40 /month
  • 12,000 credits/month
  • 120 requests/minute
  • Batch up to 50 URLs
  • 10 concurrent requests
Get Started

Scale

$100 /month
  • 60,000 credits/month
  • 200 requests/minute
  • Batch up to 100 URLs
  • 20 concurrent requests
Get Started

Need more? Contact us for Enterprise plans with custom limits.

All plans include:

Test mode (free, unlimited) CDN delivery Signed URLs All presets Block ads/popups

Frequently asked questions

Each unique URL + options combination is cached. The first request renders the screenshot; subsequent requests serve from CDN. You only pay for renders, not cache hits. Default TTL is 24 hours.

Yes! Use signed URLs with expiration. Your secret key generates the signature server-side, so it's never exposed. The signed URL can safely be used in public HTML. We also provide an X-Cache-URL header with each response — a direct CDN link that requires no authentication.

You can pass cookies or HTTP Basic/Bearer auth credentials in your API request. We'll use them when loading your page. This is useful for authenticated dashboards, admin panels, or staging environments.

Use the capture.selector parameter with a CSS selector. For example, "capture": {"selector": "#main-content"} will screenshot only that element.

Yes! Use "browser": {"dark_mode": true} to force dark color scheme. We'll set prefers-color-scheme: dark in the browser.

Your first screenshot is one API call away

Get your free API key and start in minutes.

No credit card required · 50 free credits