CurlShot

Screenshot MCP server: take_screenshot renders a URL, HTML or Markdown to PNG, JPEG, WebP, PDF or video; list_devices lists device presets. Free plan: 100 a month.

Documentation

CurlShot documentation

Take a screenshot with one request:

curl "https://curlshot.com/api/v1/screenshot?access_key=YOUR_ACCESS_KEY&url=https://example.com" --output example.png

Start here

  • Getting started: Take your first screenshot in about a minute. Send one request with a page address and get an image back.
  • Authentication and API keys: How to send your access key, what the secret key and signatures are for, and how to rotate, revoke and protect your keys.
  • The screenshot URL: How a screenshot request is built, when to use GET or POST, how to encode the page address, and what the response contains.
  • Options reference: Every option of the screenshot API on one page, with its default, its limits and an example value.

Capture

  • Devices: Capture a page as a phone, tablet, laptop or desktop would show it, using one option and a list of ready-made presets.
  • Full-page screenshots: Capture a page from top to bottom, load lazy images on the way, and keep very tall pages under control.
  • Capturing an element: Capture one element with a CSS selector, or a rectangle you choose, with an optional transparent background.
  • PDF rendering: Turn any page into a PDF, choose the paper size, orientation and margins, or put the whole page on one long sheet.
  • Scrolling videos: Record a video of a page scrolling from top to bottom, as MP4, WebM or GIF, and set its length, smoothness and size.
  • HTML and Markdown input: Send your own HTML or Markdown and get it back as an image or PDF. Good for social cards, invoices and reports.

Control the page

  • Blocking ads, cookie banners, trackers and chats: Remove ads, consent pop-ups, tracking scripts and chat widgets before the capture, and block any other request by type or pattern.
  • Dark mode and emulation: Ask a site for its dark theme, stop animations, switch to print styles, and set the time zone, user agent and mobile mode.
  • Waiting and timing: Decide the moment the capture is taken, with wait_until, delay, wait_for_selector and timeout, and what to do when a page times out.
  • Custom CSS, JavaScript and clicks: Hide elements, add your own CSS, run JavaScript and click a button on the page before the capture is taken.

Deliver the result

  • Caching: Store a screenshot once and reuse it for free. How cache, cache_ttl and cache_key work, and how to force a fresh render.
  • Signed links: Put screenshot links in a web page without handing out a usable key. Signing steps, expiring links, signed status and bulk calls, six languages.
  • Async and webhooks: Start a render in the background, then poll the job or let a webhook tell you when it is done. Includes signature checks in six languages.
  • Bulk screenshots: Start up to 100 screenshots with one call, then follow the whole batch with one status request or receive each result by webhook.

Account and limits

  • Usage and limits: How your monthly quota is counted, how to check what is left, and what the rate limit and concurrency headers on every answer mean.
  • Errors: What a failed request looks like, which errors are safe to retry, and the cause and fix for every error code.
  • The renderer as a bot: Who runs the screenshot renderer, why it visits a site, how it signs its requests (Web Bot Auth), where its key directory is, and how a site owner can block it.

Code examples

  • cURL examples: Copy-and-paste cURL commands and shell scripts for screenshots, HTML input, JSON answers, retries, signed links and background jobs.
  • Node.js examples: Runnable Node.js samples for screenshots, HTML input, JSON answers, retries, signed links and background jobs, with no packages to install.
  • Python examples: Runnable Python samples for screenshots, HTML input, JSON answers, retries, signed links and background jobs, using requests and the standard library.
  • PHP examples: Runnable PHP samples for screenshots, HTML input, JSON answers, retries, signed links and background jobs, using the curl extension and hash_hmac.
  • Go examples: Runnable Go samples for screenshots, HTML input, JSON answers, retries, signed links and background jobs, using only the standard library.
  • Ruby examples: Runnable Ruby samples for screenshots, HTML input, JSON answers, retries, signed links and background jobs, using net/http and openssl.

Integrations

  • n8n screenshot node: Take website screenshots, PDFs and scrolling videos in n8n workflows with the community node, or with the built-in HTTP Request node.

Guides