Skip to content

A free screenshot API you can build on

CurlShot has a free screenshot API plan: 100 screenshots a month, renewed every month, with no card to sign up and no watermark on the results. It is the same API as the paid plans, with the same endpoint, options and output formats, so an integration built on the free plan keeps working when you outgrow it. Failed renders and repeat requests served from the cache do not use the allowance.

Request
curl "https://curlshot.com/api/v1/screenshot?access_key=YOUR_ACCESS_KEY&url=https://example.com&format=webp&cache=true&cache_ttl=86400" \
  --output example.webp

How to start with the free screenshot API in three steps

  1. 1

    Sign up with an email address. No card is asked for.

  2. 2

    Copy the access key from the dashboard.

  3. 3

    Send your first request, and check X-Quota-Remaining to see what is left.

What the free plan shares with the paid ones

A free plan is only worth building on if the code you write for it keeps working later. Here the free plan is not a separate, cut-down API: it is the same endpoint, and the difference between plans is volume and a few plan limits.

  • The same endpoint and the same 69 options. A request that works on the free plan works unchanged on every other.
  • The same browsers and the same output: PNG, JPEG, WebP or PDF, with no watermark.
  • The same blocking of cookie banners, ads, trackers and chat widgets.
  • Signed links, so a screenshot can be shown straight in a web page without exposing the key.
  • The MCP server for AI agents, the OpenAPI description and the docs with samples in six languages.
  • The same error codes and the same quota headers on every answer.

What uses the free allowance, and what does not

Only work that produced a file is counted. Everything that checks, waits or downloads is free.

Show the table (7 rows)
RequestUses the allowance?
A screenshot or PDF that rendered and came backYes, one
A full-page capture of a very long pageYes, still one
A request that failed: timeout, page not found, invalid optionNo
The same request again, served from the cache (X-Cache: HIT)No
GET /usage, and status calls for jobs and batchesNo
Downloading a stored file from its linkNo
A screenshot taken with the free tool on the websiteNo: the website tool has its own daily limit and does not touch your account

Making a small allowance go further

Most projects that run out of free screenshots are asking for the same page again and again. A few habits stretch the allowance a long way.

  • Add cache=true. A repeat of the same request within cache_ttl (up to 30 days) comes from storage and is not counted.
  • Save the file to your own storage and serve it from there, instead of asking the API again for every visitor.
  • For monitoring, capture less often, and only the part of the page you watch with selector.
  • Ask for format=webp or jpeg for previews: the image is smaller, and the screenshot counts the same.
  • Read X-Quota-Remaining from each answer, or call GET /usage, before a batch job starts.
How much of the free allowance is left
curl "https://curlshot.com/api/v1/usage" \
  -H "X-Access-Key: YOUR_ACCESS_KEY"

Signs you have outgrown the free plan

The API tells you when a limit is in the way. Each answer below has a different fix, and only some of them need a bigger plan.

Show the table (5 rows)
What you seeWhat it meansWhat to do
402 quota_exceeded before the month is overThe monthly allowance is used upCache repeats, or move to a paid plan
429 rate_limitedToo many requests in one minuteWait for Retry-After, spread requests out, or upgrade
429 concurrency_limitMore renders at once than the plan allowsSend them one after another, or upgrade
403 feature_not_availableThe plan does not include that featureThe answer links to the plans that do
A full-page capture cut off sooner than expectedThe plan caps full-page heightA paid plan allows taller captures

The free plan next to the first paid plan

The numbers below come from the plans table, so they are the ones your account gets when you sign up. The Starter plan is shown for scale: it is the smallest step up.

Show the table (5 rows)
LimitFree planStarter plan
Price a monthFree, no card$19
Screenshots a month1003,000
Requests a minute1060
Renders at the same moment15
Price per 1,000 screenshots$0$6.33
  • Plans can also differ in the features they include and in how tall a full-page capture or how long a video can be. The pricing page lists that plan by plan, and GET /usage returns the limits of your own account.

What people use it for

  • Build and test an integration before you pay for anything
  • Side projects and internal tools with a few screenshots a day
  • A proof of concept to show your team or a client
  • Give an AI agent a way to look at web pages, within a fixed budget

For developers: one request

The same thing from your own code. It is a plain HTTP request, so it works from any language. Create a free account to get an access key.

Questions people ask

Is the free screenshot API really free?

Yes. The free plan costs nothing and asks for no card. It gives 100 screenshots a month; when they are used up, requests are refused with a clear error until the next period starts. Nothing is ever charged on a free account.

Do free screenshots have a watermark?

No. A screenshot on the free plan is the same file a paid plan gets, rendered by the same browsers, with nothing drawn on it.

What happens when the free screenshots run out?

The next render answers with status 402 and the error code quota_exceeded, and nothing is charged. Calls to GET /usage and job status calls keep working. The allowance comes back at the start of the next period, or right away if you move to a paid plan.

Can I use the free plan in production?

Nothing stops you, but plan for its limits: 100 screenshots a month, 10 requests a minute and 1 render at the same moment. That suits a low-traffic feature with caching; anything that serves many users at once needs a paid plan.

Is there a way to try CurlShot without an account at all?

Yes. The tool on the home page takes a screenshot of any public page without signing up, within a daily limit per visitor. The API needs a free account, because every request carries an access key.

Take as many screenshots as you need

A free account gives you 100 screenshots every month and keeps them in one place. No card needed.