ScreenshotNeo

BlogComparisons

How to Choose a Website Screenshot API

Compare capture modes, rendering controls, outputs, costs, and operational needs to choose a screenshot API that fits your pages and workflow.

By the ScreenshotNeo team4 October 202611 min read

Choose a website screenshot API by testing it against the pages, rendering conditions, output formats, traffic, and operational constraints you actually have. Start by deciding whether you need a viewport, full-page, or single-element capture; then compare JavaScript and wait behavior, device settings, delivery and workflow, failure and cache billing, and privacy and reliability terms.

There is no evidence in the sources reviewed here for a universal best provider. For a managed API to evaluate first, ScreenshotNeo offers browser-rendered screenshots and PDFs, controls for common capture conditions, and bills only clean shots. Verify any provider’s current documentation and terms before adopting it.

1. Define the capture you need

Capture scope determines whether a result is useful downstream. A viewport screenshot captures the visible browser area; a full-page screenshot captures the scrollable document; an element screenshot targets a selected page element. These are distinct modes, and browser automation such as Playwright documents viewport, full-page, and element capture.

Need What to verify Typical concern
Viewport Viewport width and height, device scale factor, output dimensions Responsive layout and consistency with a target device
Full page How page height is handled and whether lazy images load during capture Very long pages may take longer or encounter provider-specific limits
One element CSS selector syntax, selector wait behavior, missing-selector response Dynamic or repeated elements can make selection ambiguous
PDF Paper size, margins, orientation, page ranges, and whether the endpoint supports PDF Image-only APIs may not meet document-export needs

Write down a small representative URL set before comparing vendors: include a static page, a JavaScript-heavy page, a page with a cookie banner, a long page with lazy images, and any authenticated or private page you are permitted to use for evaluation. Use the same URLs and capture requirements for each candidate.

2. Check rendering and timing behavior

An endpoint can accept a URL without reproducing the state your application expects. Check that JavaScript runs, identify the navigation wait condition, and see whether you can wait for a selector, add a delay, or wait for network activity to settle. A documented control is not proof that a provider will render every site faithfully; test the target pages.

  • Navigation readiness: compare the available wait strategies and choose the one that matches the page. Waiting for initial navigation alone may be too early for client-rendered content.
  • Selector waits: use these when a specific component indicates readiness. Decide what should happen if it never appears.
  • Extra delay: use a short delay only when the page needs time after navigation; excessive delays add latency and do not fix an incorrect readiness condition.
  • Lazy loading: determine whether full-page capture scrolls or otherwise triggers deferred images and content. Confirm image completeness on long pages.
  • Overlays and motion: establish whether consent banners, newsletter popups, chat widgets, and animations affect the image. Decide whether to accept, hide, or preserve them based on the purpose of the capture.
  • Timeouts: compare configurable timeouts and the response behavior when navigation, a selector, or rendering times out.

For QA and visual regression, capture the same page more than once under the same conditions. Record whether differences come from the product, dynamic page content, rotating banners, timestamps, animation, or fonts loading at different times. If exact pixel comparisons matter, use custom CSS or page-side setup where supported to suppress known sources of variation.

3. Match formats and device settings to the next step

Choose an output based on its consumer. PNG is often useful when exact pixels matter; JPEG can suit photographic content where lossy compression is acceptable; WebP may reduce file size when supported by the downstream system. Check whether the API returns bytes, a URL, or a redirect, and whether the consumer can handle that delivery mode.

If you need documents, confirm PDF support separately from image support. Check available paper sizes, margins, landscape mode, and page ranges. For browser images, compare viewport dimensions, device scale or retina scale, dark mode, transparent backgrounds, image resizing, and element capture. Locale, timezone, and geolocation can matter when the page changes its language, dates, or region-specific content.

Do not assume that one vendor’s feature list applies to another. Record each required option, whether it is documented, and whether a representative capture confirms the expected result.

4. Compare integration and workflow

Look at how the capture fits into your application, job queue, or agent workflow—not just the simplest example request.

  • HTTP interface: check GET and POST support, authentication, URL encoding, custom headers, cookies, user agent, and authorization handling.
  • Batching: if you capture many pages, verify batch limits, response shape, partial failures, and whether requests run synchronously or asynchronously.
  • Long jobs: check for job status and webhook behavior where available, including how to validate signed webhook requests.
  • Errors: look for distinct responses for invalid input, authentication failure, rate limits, render failures, timeouts, and missing selectors.
  • Operational interfaces: useful documentation can include an OpenAPI specification, usage endpoint, examples, and clear parameter references.
  • Secrets: keep API keys on your server or in a secret store. Avoid exposing a private key in browser JavaScript, public repositories, or logs.

ScreenshotNeo supports a GET screenshot endpoint, PDF capture, bulk capture for up to 100 URLs per call, asynchronous jobs with signed webhooks, a usage API, and an OpenAPI spec. Its capture options include custom headers, cookies, user agent, and Authorization. See the ScreenshotNeo documentation for parameters and current request details.

5. Choose managed rendering or operate a browser yourself

A managed API handles the rendering service behind an HTTP interface. Playwright provides browser automation APIs that your team can run in its own environment. With self-hosting, you gain control over browser setup and execution, while taking responsibility for infrastructure, browser updates, concurrency, retries, observability, and scaling. A hosted service shifts those operational tasks to a provider, while requiring you to assess its terms, limits, and integration.

Playwright’s official documentation shows navigation and screenshot capture, full-page screenshots, screenshot bytes in a buffer, and screenshots of an individual element. The following Node.js example is a runnable self-hosted starting point.

import { chromium } from 'playwright';

const url = process.argv[2] ?? 'https://example.com';
const browser = await chromium.launch({ headless: true });
try {
  const page = await browser.newPage({ viewport: { width: 1440, height: 900 } });
  await page.goto(url, { waitUntil: 'networkidle', timeout: 30_000 });
  await page.screenshot({ path: 'shot.png', fullPage: true });
} finally {
  await browser.close();
}

Install the runtime and browser with npm install playwright and npx playwright install chromium, then run node capture.mjs https://example.com. To capture the current viewport, omit fullPage: true. To capture a selected element, replace the screenshot call with await page.locator('main').screenshot({ path: 'main.png' }). Adjust the selector, timeout, and wait condition for the target page. Playwright’s official references are the Page API and its screenshot guide.

Or skip the browser setup

ScreenshotNeo is a managed website screenshot API and MCP server from Yorker Media. One GET request can return a PNG, JPEG, WebP, or PDF. For a simple capture:

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 output and other capture options. ScreenshotNeo accepts cookie and consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits cost nothing, and the response identifies the page verdict and billing status in headers. Its MCP server gives Claude, Cursor, and other MCP clients the tools take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots. These are ScreenshotNeo’s stated product and pricing details.

Sign up for ScreenshotNeo’s free 1,000 screenshots a month, with no card.

6. Compare cost, cache, and failure behavior

Model expected monthly volume and burst traffic with the actual billing rules, not only the headline allowance. Include successful captures, retries, cache hits, failures, and any overage or concurrency limit. A useful cost model is:

estimated monthly cost = plan or base cost
                       + billable successful captures beyond included usage
                       + any documented overage or add-on charges

Confirm what counts as billable, how cache keys and TTLs work, and whether errors consume quota. A cache can lower repeated work, but stale output can be wrong for pages that change often or vary by cookies, headers, or location. Set cache lifetime to suit the content and verify how private inputs are treated.

ScreenshotNeo says only clean shots are billed, including no charge for bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits; response headers report verdict and billing state. Its listed monthly plans are Free: 1,000 shots with no card; Starter: $5 for 3,000; Growth: $15 for 15,000; Pro: $39 for 60,000; Scale: $99 for 250,000; and Business: $249 for 1,000,000. Yearly billing gives two months free, and every feature is on every plan. Recheck current pricing and terms before purchase.

For any provider, look for documented rate limits, retries, timeout behavior, and overage rules. A failed capture can still consume engineering time even if it is not billed. Track failure categories and retry only errors likely to be transient; repeating an invalid request or missing selector will not make it valid.

7. Review privacy, security, and reliability evidence

API-key authentication alone does not establish how a provider handles page data. For private or authenticated pages, verify retention, encryption, geographic processing, access controls, contractual commitments, and whether request or screenshot data can be used or accessed by others. Test your own access controls and avoid sending credentials or URLs containing secrets until you have reviewed the provider’s terms.

Assess reliability separately from feature support. Review service commitments and independent reliability evidence if you need them; the sources summarized here do not establish comparative uptime, privacy guarantees, encryption, or service commitments for the providers discussed. Do not infer those properties from an API endpoint or a successful sample request.

8. Run a fair evaluation

  1. List the required capture modes, outputs, device conditions, and workflow needs.
  2. Select representative pages, including the slow, long, dynamic, and overlay-heavy cases you care about.
  3. Use the same URLs, viewport sizes, waits, formats, and repetition count for every candidate.
  4. Record success or failure, output dimensions, elapsed time, manual configuration, and whether the content is complete.
  5. Review current pricing, cache and failure billing, rate limits, security terms, and support commitments.
  6. Make a small integration in your own job flow and observe how it handles retries, logs, secrets, and downstream delivery.

This is a practical evaluation method, not a published benchmark. Report the date and setup if you share comparative results, since vendor options and pricing can change.

9. Provider examples and documented boundaries

These examples illustrate how to inspect documentation; they do not establish a universal ranking or independently tested quality comparison.

  • ScreenshotNeo: managed screenshot API and MCP server. Its stated features include full-page capture with lazy images loaded, element capture, image and PDF output, dark mode, device presets and custom viewports, custom CSS and JavaScript, click-before-capture, selector waits, delay and network-idle waits, request blocking, custom headers and cookies, timezone and geolocation, transparent backgrounds, resizing, TTL caching, signed image links, async jobs, bulk capture, a usage API, and an OpenAPI spec. It says parameter names used by other screenshot APIs also work to make switching easier. See the docs for current details.
  • Screenshot API: its documentation describes REST GET and POST endpoints, a batch endpoint, API-key authentication, PNG/JPEG/WebP/PDF output, viewport and full-page capture, scale factor, wait strategies, quality, element selection, selector waits, delay, banner and ad controls, timezone/locale/geolocation emulation, cache settings, timeouts, and categories including authentication failure, invalid requests, rate limits, render failures, and missing selectors. These are documented options, not an independent assessment of output quality or service levels. Read its REST documentation.
  • URLpipe: its product page says full-page PNG is the default, describes scrolling to expose lazy-loaded images, lists viewport and device-scale controls, image formats, element selection, and cookie-banner removal options. The page states a 16,384-pixel maximum full-page height, publishes usage allowances and overage terms, and says this screenshot endpoint does not return PDFs. Treat these as URLpipe’s claims, not general limits or a neutral market statistic; verify current terms. Read URLpipe’s product page.
  • Playwright: a self-hosted browser automation option for teams that want to operate rendering themselves. Its screenshot documentation describes page and element capture APIs; it does not provide a comparative cost study. Read the Page API.

10. Troubleshooting captures

Symptom Likely cause What to try
Authentication error Missing, malformed, revoked, or exposed key Check the key and authentication format; keep the key server-side and out of logs.
Invalid request Unsupported option, invalid dimensions, malformed URL, or incorrectly encoded parameters Compare the request with current docs; URL-encode values and remove options the endpoint does not support.
Rate limited Request volume or concurrency exceeded a provider limit Use bounded concurrency and a retry delay that respects the provider’s response guidance; inspect the documented limits.
Blank or incomplete page Capture began before client rendering or deferred content completed; target returned a bot check Use an appropriate wait condition or selector, check the page verdict if available, and verify the URL in a normal browser.
Missing selector Selector is wrong, the element is conditional, or the wait ended before it appeared Inspect the page markup, use a stable selector, and set a suitable wait or explicit fallback.
Full page is cut off Provider limit, unusually long document, or capture behavior does not trigger all content Check documented height limits, lazy-load behavior, and whether smaller sections or viewport captures meet the need.
Cookie banner or popup obscures content Overlay is part of the rendered page state Decide whether to preserve it, accept consent, or use a documented removal/hide option. Check legal and site requirements for your use.
Output looks soft or is unexpectedly large Device scale, format, or quality setting does not suit the consumer Adjust scale and dimensions; compare PNG, JPEG, and WebP with the actual downstream system.
PDF pagination is wrong Paper size, margins, orientation, or print layout differs from expectations Set the PDF options explicitly and validate page breaks against a representative document.
Repeated capture is stale Cache TTL is longer than the page’s useful freshness window Reduce the TTL or bypass caching where supported; account for cookies and headers that vary the page.
Local browser hangs or exhausts resources Browser processes remain open, concurrency is too high, or pages never settle Close browsers in a finally block, limit concurrency, set timeouts, and collect errors per job.

Frequently asked questions

Should I choose an API or run Playwright?

Choose based on ownership and control. A managed API can reduce browser infrastructure work; self-hosted Playwright gives your team direct control but makes it responsible for operating the browser environment. Compare both against your workload and requirements.

Does a screenshot API guarantee the page will look exactly like a user’s browser?

No. A provider’s documented controls do not establish fidelity for every site. Evaluate the pages, fonts, timing, viewport, and overlays that matter to your use case.

Can I use screenshots for private pages?

Only after reviewing the provider’s current privacy and security terms and checking that your access controls permit the workflow. Treat cookies, authorization headers, and URLs as sensitive.

How many URLs should I include in an evaluation?

Include enough to cover distinct risks in your own workload: dynamic rendering, long pages, overlays, authentication where permitted, and representative ordinary pages. A small relevant set is more useful than a large set of unrelated URLs.

Does a batch endpoint make captures faster?

Batching changes how requests are submitted; it does not by itself establish throughput or completion time. Check batch semantics, limits, partial failures, concurrency, and measured behavior for your workload.