ScreenshotNeo

BlogComparisons

Best Free Screenshot APIs in 2026

Compare free screenshot APIs by real units, limits, formats, and automation features, then choose the right option for your workload.

By the ScreenshotNeo team1 October 20267 min read

Short answer: ScreenshotNeo is the best starting point for most teams because its free plan includes 1,000 screenshots every month, failed and unusable captures are not billed, and it removes common consent banners, popups and chat widgets before capture. If you need a hosted browser for broader automation, Browserless provides 1,000 free units monthly, while ScreenshotOne provides 100 free screenshots monthly. Those allowances measure different things, so they are not interchangeable.

How to choose a free screenshot API

Compare these dimensions before comparing headline numbers:

  • What is counted: screenshots, requests, credits or browser-time units.
  • Whether the allowance renews: a monthly quota is different from a one-time trial.
  • Capture features: full-page rendering, output formats, HTML input, device emulation and PDF support.
  • Automation depth: a simple REST endpoint versus a hosted browser you control with Puppeteer-style options.
  • Failure and cache billing: check whether failed loads, bot checks and cache hits consume quota.
  • Concurrency and time limits: these determine throughput for batch jobs.
  • Extra consumption: proxy bandwidth, CAPTCHA solving and other browser services may draw from the same balance.

Ranking: free screenshot APIs in 2026

1. ScreenshotNeo — best overall free screenshot API

ScreenshotNeo is first for a screenshot-focused workflow: you get 1,000 screenshots per month at no charge, with no card required, and paid plans start at $5 for 3,000 screenshots. It bills only clean shots. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing, and each response identifies the result with X-Page-Verdict and X-Billed headers.

Before capture, ScreenshotNeo can accept cookie and consent banners and remove more than 60 known consent platforms, newsletter popups and chat widgets. You can turn each cleanup step off when you need the original page state.

The API supports PNG, JPEG and WebP screenshots plus PDF. Options include full-page capture with lazy images loaded, CSS-selector element capture, dark mode, 12 device presets or any viewport, retina scale, paper size and margins for PDF, landscape mode and page ranges, raw HTML/CSS rendering, custom CSS and JavaScript, pre-capture clicks, hidden selectors, selector/delay/network-idle waits, ad/tracker/request/resource blocking, custom headers, cookies, user agents and Authorization, timezone and geolocation, transparent backgrounds, image resizing, configurable caching, signed links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API and an OpenAPI specification. Common parameter names used by other screenshot APIs also work, which simplifies migration.

ScreenshotNeo also includes an MCP server with take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients.

Quick request

curl -G "https://api.screenshotneo.com/v1/shot" \
  -d access_key=YOUR_API_KEY \
  --data-urlencode url=https://stripe.com \
  -o shot.webp

See the ScreenshotNeo API documentation for authentication, parameters and response headers.

2. Browserless — best when screenshots are part of browser automation

Browserless lists a free plan with 1,000 units per month, two concurrent browsers and a two-minute maximum session time. A unit means up to 30 seconds of browser time; partial increments round up. Proxy bandwidth and successful CAPTCHA solving also consume units, so 1,000 Browserless units do not equal 1,000 screenshots.

Its screenshot REST API accepts a URL or inline HTML and can return PNG, JPEG or WebP. The documentation exposes full-page capture and Puppeteer-style options. Choose Browserless when you need a hosted browser for interactions beyond a screenshot and can estimate browser time accurately. Confirm current terms on the Browserless pricing page.

3. ScreenshotOne — simple screenshot and PDF rendering

ScreenshotOne lists up to 100 screenshots of any URL per month on its free screenshot API plan, including HTML and PDF rendering. Its pricing page lists PNG, WebP, JPEG, full-page captures and caching. Only successful renders that are not served from cache count toward quota, according to the provider. The Basic plan shown on the pricing page is $17 per month for 2,000 screenshots, with 40 requests per minute and $0.009 per additional screenshot. Verify current limits on the ScreenshotOne pricing page before committing.

Free quota comparison

Provider Free allowance Billing unit Concurrency or rate detail Formats and input Best fit
ScreenshotNeo 1,000 screenshots/month Successful clean screenshots; failed, blocked, blank, timed-out and cache-hit responses are not billed Bulk capture supports up to 100 URLs per call; other limits depend on endpoint and plan PNG, JPEG, WebP, PDF; URL, HTML and extensive browser controls Screenshot-first automation and predictable screenshot billing
Browserless 1,000 units/month Up to 30 seconds of browser time; partial increments round up Two concurrent browsers; two-minute maximum session on free plan PNG, JPEG, WebP; URL or inline HTML; browser automation options Hosted browser workflows
ScreenshotOne 100 screenshots/month Successful, non-cached renders Basic plan lists 40 requests/minute PNG, WebP, JPEG, HTML and PDF rendering; full-page capture Small screenshot or PDF experiments

Provider quotas and prices change. Recheck the linked pricing and documentation pages before publication or production deployment.

Runnable integrations

Python with ScreenshotNeo

import requests

response = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={
        "access_key": "YOUR_API_KEY",
        "url": "https://stripe.com",
    },
    timeout=90,
)
response.raise_for_status()
with open("shot.webp", "wb") as output:
    output.write(response.content)
print(response.headers.get("X-Page-Verdict"))
print(response.headers.get("X-Billed"))

Node.js with ScreenshotNeo

const q = new URLSearchParams({
  access_key: 'YOUR_API_KEY',
  url: 'https://stripe.com'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const buffer = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', buffer));
console.log(res.headers.get('x-page-verdict'));
console.log(res.headers.get('x-billed'));

Inspecting the response in cURL

curl -i -G "https://api.screenshotneo.com/v1/shot" \
  -d access_key=YOUR_API_KEY \
  --data-urlencode url=https://example.com \
  -o shot.webp

Use -i while diagnosing a request so you can inspect X-Page-Verdict, X-Billed and HTTP status headers. Remove it when saving a binary image for normal use.

Matching an API to your workload

Low-volume previews

For a few dozen captures, ScreenshotOne’s 100 monthly screenshots may be sufficient. ScreenshotNeo gives ten times that allowance and provides cleanup controls when pages contain consent dialogs or overlays.

CI visual regression

Count your URLs multiplied by browsers, themes and states. Use stable waits, a fixed viewport and a cache policy that matches your test needs. ScreenshotNeo supports device presets, custom viewports, dark mode, selector waits, network-idle waits, custom CSS and JavaScript, and bulk capture for up to 100 URLs per call.

Interactive browser jobs

Choose Browserless when the workflow needs browser automation beyond rendering. Estimate the seconds each job uses, round each job up to Browserless’s 30-second units and include proxy or CAPTCHA usage in the estimate.

PDF generation

ScreenshotNeo and ScreenshotOne both document PDF rendering. For ScreenshotNeo, set paper size, margins, landscape mode and page ranges when generating print-ready output.

Reliability, performance and cost planning

  • Wait for the page you need: use a selector wait for a known component, a delay for predictable client rendering or network idle when the page loads many resources.
  • Control page weight: block ads, trackers, unnecessary requests or resource types when they do not affect the visual result.
  • Make captures repeatable: set viewport, device scale, timezone, geolocation, cookies and user agent explicitly when pixel comparisons matter.
  • Use caching deliberately: a short TTL reduces repeated work for previews; disable or shorten it when freshness is part of the requirement.
  • Batch safely: bulk capture reduces request overhead, while asynchronous jobs and signed webhooks prevent long-running clients from timing out.
  • Budget by the provider’s unit: Screenshot quotas count renders; Browserless units count browser time and may include proxy and CAPTCHA consumption.
  • Record verdict headers: store X-Page-Verdict and X-Billed with job metadata so usage reports explain what happened.

Common errors and fixes

Symptom Likely cause Fix
401 or 403 response Missing, invalid or restricted API key Check the key, endpoint and account permissions. Keep keys server-side.
Blank screenshot Page failed, blocked scripts or captured before content rendered Inspect the verdict header, add a selector or network-idle wait, and allow required resources.
Cookie banner covers content Consent UI was still present at capture time Use ScreenshotNeo’s consent cleanup, or target and hide the banner with a selector.
Images are missing Lazy loading had not completed or image requests were blocked Use full-page capture with lazy images loaded, wait for an image selector, and review blocked resource rules.
Unexpected mobile layout Viewport or device preset differs from the intended browser Set an explicit device preset or viewport and retina scale.
Request times out Slow page, excessive resources or an overly long wait Block nonessential resources, wait for a specific selector, or use an asynchronous job.
Quota disappears faster than expected on Browserless Jobs use multiple 30-second units; proxy or CAPTCHA work also consumes units Measure browser time, reduce session length and include all consumed services in the budget.
Cached image is stale TTL is longer than the content freshness requirement Lower the cache TTL or bypass caching for that capture.

Or skip the browser setup

With ScreenshotNeo, one GET request returns the image or PDF:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Cookie banners, newsletter popups and chat widgets are removed before the shot. Bot checks, blank pages and failed loads are never billed. An MCP server lets AI agents take screenshots, inspect pages and create PDFs. The free plan includes 1,000 screenshots a month with no card, and paid plans start at $5 for 3,000 screenshots. Create a free ScreenshotNeo account.

FAQ

Is a free screenshot API allowance always monthly?

No. Confirm whether the provider offers a recurring monthly quota or a one-time trial or credit balance.

Are Browserless’s 1,000 units equal to 1,000 screenshots?

No. A unit represents up to 30 seconds of browser time, with partial increments rounded up. Proxy traffic and successful CAPTCHA solving can also consume units.

Which formats should I request?

Use WebP for smaller web assets, PNG for lossless UI or pixel comparisons, JPEG for photographs, and PDF for print or document workflows.

How do I avoid paying for failed captures?

Check each provider’s billing definition. ScreenshotNeo reports verdict and billing headers and does not bill bot checks, blank pages, timeouts, failed loads or cache hits.

Can I migrate from another screenshot API?

ScreenshotNeo accepts parameter names used by other screenshot APIs in addition to its own, which can reduce integration changes. Review the API documentation for the exact request.