Skip to content
Back to skills

Curlshot

ASecurity

Capture web page screenshots, PDFs and scrolling videos, or render HTML/Markdown to images, with the hosted CurlShot API.

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
ai-agentsgobashgitapi

Works with

  • cursor
  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned November 11, 2026

npx -y skills add ibrdot/swe-re-expert --skill curlshot --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Curlshot?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Curlshot
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ibrdot-curlshot/badge)](https://www.skillsdirectory.com/skills/ibrdot-curlshot)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: curlshot
description: "Capture web page screenshots, PDFs and scrolling videos, or render HTML/Markdown to images, with the hosted CurlShot API."
category: api-integration
risk: safe
source: "https://github.com/SergiuPogor/curlshot-mcp/tree/main/skills/curlshot"
source_type: official
date_added: "2026-10-16"
tags: [screenshot, pdf, html-to-image, headless-browser, api, mcp]
tools: [claude-code, codex, cursor, gemini]
license: "MIT"
---

# CurlShot screenshots

CurlShot (https://curlshot.com) is a hosted screenshot API. It renders a web
page in a real browser and returns an image (PNG, JPEG, WebP), a PDF, or a
video of the page scrolling (MP4, WebM, GIF). One HTTP request does it.

## When to Use

- Use when the user wants a screenshot, full-page capture, or mobile/tablet view of a public URL.
- Use when the user wants a PDF or a scrolling video (MP4, WebM, GIF) of a web page.
- Use when the user wants their own HTML or Markdown rendered to an image or PDF (social cards, reports, previews).
- Requires a CurlShot access key in the `CURLSHOT_API_KEY` environment variable.

## Before you start

- The access key is read from `CURLSHOT_API_KEY`. If it is not set, ask the user to set it. A free key (100 screenshots a month, no card) comes from https://curlshot.com/register.
- Never print the key, write it into a file in the repository, or put it in a link you show the user.
- Only public pages work out of the box. Local and private network addresses (localhost, 192.168.x.x, ...) are refused: for a local page, send its HTML instead (see below).
- Sending HTML or Markdown uploads that content to CurlShot. Confirm with the user before sending anything private or confidential.

## Take a screenshot

```bash
curl -sS -G "https://curlshot.com/api/v1/screenshot" \
  -H "X-Access-Key: $CURLSHOT_API_KEY" \
  --data-urlencode "url=https://example.com" \
  -d format=png \
  --output screenshot.png
```

`-G` with `--data-urlencode` keeps the page address correctly encoded. Check
the HTTP status: on an error the body is JSON with `error_code` and
`error_message` instead of an image.

## Common options

Add each option as one more `-d name=value` (GET) or as a field in a POST JSON body.

| Want | Option |
| --- | --- |
| Whole page, top to bottom | `full_page=true` |
| Phone or tablet view | `viewport_device=<preset>` (list: https://curlshot.com/docs/devices.md) |
| Window size | `viewport_width=1440`, `viewport_height=900` |
| Retina sharpness | `device_scale_factor=2` |
| Dark theme | `dark_mode=true` |
| One element only | `selector=<css selector>` |
| Output format | `format=png` / `jpeg` / `webp` / `pdf` / `mp4` / `webm` / `gif` |
| Hide cookie banners and ads | `block_cookie_banners=true`, `block_ads=true` |
| Wait for content | `wait_until=networkidle`, `delay=2`, `wait_for_selector=<css selector>` |
| Reuse a stored copy for free | `cache=true` |

A misspelled option is rejected with `invalid_options` and a hint, never
ignored. Every option: https://curlshot.com/docs/options.md

## Render your own HTML or Markdown

POST JSON when the input is long:

```bash
curl -sS -X POST "https://curlshot.com/api/v1/screenshot" \
  -H "X-Access-Key: $CURLSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"html": "<h1>Hello</h1>", "format": "png", "viewport_width": 1200, "viewport_height": 630}' \
  --output card.png
```

Use `"markdown": "..."` instead of `html` to render Markdown as a styled page,
and `"format": "pdf"` for a PDF.

## Examples

### Example 1: Full-page mobile screenshot without cookie banners

```bash
curl -sS -G "https://curlshot.com/api/v1/screenshot" \
  -H "X-Access-Key: $CURLSHOT_API_KEY" \
  --data-urlencode "url=https://example.com/pricing" \
  -d viewport_device=iphone_15_pro \
  -d full_page=true \
  -d block_cookie_banners=true \
  -d format=webp \
  --output pricing-mobile.webp
```

Check https://curlshot.com/docs/devices.md for the exact preset names.

### Example 2: Save a page as PDF

```bash
curl -sS -G "https://curlshot.com/api/v1/screenshot" \
  -H "X-Access-Key: $CURLSHOT_API_KEY" \
  --data-urlencode "url=https://example.com/docs" \
  -d format=pdf \
  --output docs.pdf
```

## Usage and billing

One successful render counts as one screenshot, whatever its size. Failed
renders and cache hits are free. Responses carry rate-limit and concurrency
headers. Paid plans start at $19/month; the free plan is 100 screenshots a
month. Ask before running large batches that could use up the user's quota.

## MCP alternative

Agents with MCP support can use the hosted server instead of HTTP calls:
`https://curlshot.com/api/mcp` (streamable HTTP, `Authorization: Bearer <key>`),
tools `take_screenshot` and `list_devices`. Setup per client is in the
[curlshot-mcp README](https://github.com/SergiuPogor/curlshot-mcp).

## Limitations

- Needs network access to `curlshot.com` and a CurlShot account key; it does not run a browser locally.
- Pages behind a login, on localhost, or on private networks cannot be captured by URL; render their HTML instead.
- Each successful render uses one screenshot from the account's monthly quota.
- HTML and Markdown inputs are sent to a third-party service; do not send secrets or confidential content without the user's consent.
- Sites with aggressive bot protection may return an error page or a challenge screen instead of the real content.

## Docs

- Getting started: https://curlshot.com/docs/getting-started.md
- Errors: https://curlshot.com/docs/errors.md
- Everything in one file: https://curlshot.com/llms-full.txt

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.