ScreenshotNeo

BlogComparisons

Best Screenshot APIs for Capturing Full Web Pages

Compare full-page screenshot APIs by lazy-loading behavior, difficult pages, capture controls, and billing. See where ScreenshotNeo, Browserless, ScreenshotOne, and Urlbox fit.

By the ScreenshotNeo team4 October 202611 min read

For full-page captures, choose an API based on how it handles scrolling, lazy-loaded content, very tall pages, and billing—not on an unverified claim that one provider is universally fastest or most accurate. There is no standardized independent benchmark in the available vendor documentation. Start by testing the same representative URLs with the same viewport, wait policy, scroll behavior, and output format.

ScreenshotNeo is the first service to try if you want a single-request screenshot API with cookie banners, newsletter popups, and chat widgets removed before capture, and billing that excludes bot checks, blank pages, failed loads, and cache hits. Browserless is a candidate when you want Puppeteer-style browser controls or related browser tasks. ScreenshotOne offers both full-page and section-by-section capture. Urlbox documents controls for lazy content, infinite scrolling, and page height.

What “full page” means

A full-page screenshot extends beyond the initial viewport. An API may render one tall page, or scroll through the page in sections and combine the resulting captures. These strategies can behave differently when a page has animation, sticky elements, or content that appears only after scrolling.

Lazy-loaded images and other content may not be present until scrolling triggers them. A screenshot API that captures immediately can therefore return a technically full-height image with missing content. Check whether the provider scrolls before capture, and whether it lets you tune delays or scroll behavior.

How the APIs compare

Service Capture and lazy loading Controls and difficult pages Billing details in the available sources Good fit to evaluate
ScreenshotNeo Full-page capture with lazy images loaded; configurable waits are among its capture options. Selector capture, viewport and device presets, custom CSS and JavaScript, click-before-capture, and controls to hide elements. It also removes supported consent banners and common popups and chat widgets before capture; each such step can be turned off. Only clean shots are billed. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing; responses indicate page verdict and billing. Free plan: 1,000 shots/month; paid plans start at $5 for 3,000. Try first if you want an API or MCP server and want page-cleaning behavior and billing outcomes stated per response.
Browserless Its REST screenshot API supports fullPage: true. For lazy content, documentation recommends combining scrollPage: true with full-page capture. Puppeteer-style options include selector crops, viewport, quality, clipping, and device scale factor. Browserless also positions its REST APIs for other browser tasks. No official current plan prices were verified in the research used for this article. Compare the applicable plan and billable usage directly before choosing. Evaluate when Puppeteer-like control or other browser operations matter.
ScreenshotOne Offers a default full-page approach and by_sections, which scrolls and combines sections. Its documentation says section capture can help with complex animation, but fast scrolling or short delays may miss elements. Tuning documented for section capture includes changing scroll increments, increasing delays, reducing motion, and waiting longer. Pricing page accessed 2026-10-03 listed 100 free monthly screenshots; Basic at $17/month for 2,000 and 40 requests/minute; Growth at $79/month for 10,000 and 80 requests/minute; Scale at $259/month for 50,000 and 150 requests/minute. Prices exclude VAT. Successful requests not served from cache count toward quota. Its credits documentation says each output type costs one credit, including full-page and scrolling captures; credits do not roll over and overage is off by default. Evaluate when you need to compare a tall capture with a section-by-section strategy.
Urlbox Normally scrolls to the bottom before capture to load lazy elements and determine page height; it also documents an option to skip that scroll. Documents infinite-scroll safeguards, maximum height, start offset, element screenshots, and full-width capture for horizontally scrolling pages. It recommends PNG for full-page output because of stated JPEG and WebP image dimension limits. Pricing page accessed 2026-10-03 listed Lo-Fi at $19/month for up to 2,000 renders, Hi-Fi at $49/month for up to 5,000, and Ultra at $99/month for up to 15,000. Prices exclude VAT. Tier features vary; the page describes extra render usage for long pages, multimedia-heavy pages, or anti-bot-protected pages. Evaluate when page-height and infinite-scroll controls or full-width output are important.

Vendor capability pages describe features, not a common accuracy or speed benchmark. Prices and plan details can change; the ScreenshotOne and Urlbox figures above are snapshots from 2026-10-03. Check each vendor’s current plan terms before estimating spend.

Choose by workload

Pages with lazy-loaded images

Confirm the API scrolls before capture or supports an explicit scroll option, then test pages where images appear only near the bottom. Browserless documents scrollPage: true and recommends pairing it with fullPage: true. Urlbox normally scrolls to the bottom and provides an option to skip that behavior. ScreenshotOne offers section scrolling, with delay and increment tuning when content is missed. ScreenshotNeo includes full-page capture with lazy images loaded.

Animated, sticky, or fixed elements

Compare the output visually across the same URLs. A single tall render and stitched sections can interact differently with animation and fixed-position elements. ScreenshotOne specifically suggests reducing motion, increasing delays, and adjusting scroll increments when section capture misses content. Check whether a fixed header repeats, disappears, or obscures content in the result.

Very long or infinite-scroll pages

Decide whether to capture the whole page, cap its height, or stop after a bounded number of scroll sections. Unbounded scrolling can make capture duration and output size unpredictable. Urlbox documents a default three-section cap after detecting infinite scrolling, as well as a maximum-height setting. Set and test an explicit policy for feeds and pages that continuously append content.

Horizontal overflow and specific page regions

If important content extends beyond the viewport horizontally, check for full-width capture support and verify output dimensions. For a chart, product card, or page component, selector-based capture may be more useful and smaller than a full-page image. Browserless documents selector crops; Urlbox documents element-specific screenshots; ScreenshotNeo supports capture of an element by CSS selector.

Billing and workload economics

Compare what counts as a render, screenshot, request, or credit. Check cache treatment, failed-request billing, rate limits, overages, and whether long or media-heavy pages consume extra units. For example, ScreenshotOne says successful requests not served from cache count toward quota and documents one credit for a full-page or scrolling screenshot. Urlbox describes extra render usage for some demanding pages. ScreenshotNeo states that cache hits and several unsuccessful or unclean outcomes cost nothing, and identifies verdict and billing in response headers.

A repeatable evaluation

  1. Make a small test set: a short static page, a long article with lazy images, a page with sticky navigation, an animated page, and an infinite-scroll page if that matches your use case.
  2. Use the same viewport, device scale, output format, URL state, and authentication for every service.
  3. Use comparable wait conditions. Record whether the provider scrolls, how far it scrolls, and any configured delay.
  4. Inspect the actual files for missing images, cut-off content, repeated sticky elements, unexpected blank areas, and image dimensions.
  5. Record response time and billed units from your own runs. Repeat captures to account for page and network variability; do not generalize a small test into a universal speed ranking.
  6. Check rate limits, cache behavior, failure billing, overages, and maximum output dimensions against your expected monthly volume.

Do-it-yourself: make a full-page screenshot with a browser

If you need complete control over browser behavior, a browser automation library can capture the page. For example, with Puppeteer, navigate to the target, wait for the page state your application needs, and request a full-page screenshot. The following is a runnable Node.js example for a locally installed Puppeteer package:

import puppeteer from 'puppeteer';

const url = process.argv[2] ?? 'https://example.com';
const browser = await puppeteer.launch({ headless: true });
try {
  const page = await browser.newPage({
    viewport: { width: 1440, height: 900 },
    deviceScaleFactor: 1,
  });
  await page.goto(url, { waitUntil: 'networkidle2', timeout: 60000 });

  // Allow a short settling period for content triggered after navigation.
  await new Promise(resolve => setTimeout(resolve, 1000));
  await page.screenshot({ path: 'full-page.png', fullPage: true });
} finally {
  await browser.close();
}

Save it as screenshot.mjs, install Puppeteer in your project, then run node screenshot.mjs https://example.com. The wait condition is a starting point, not a guarantee that every site has finished rendering. Some sites keep network connections open, while others load content only after scrolling or interaction. Add page-specific waits and scrolling where your test pages require them. Browserless documents equivalent REST options for fullPage and scrollPage in its screenshot API documentation.

Or skip the browser setup

ScreenshotNeo takes a screenshot with one GET request. The example saves the returned image as WebP; see the ScreenshotNeo API documentation for request options and output settings.

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

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
    timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
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(`Screenshot request failed: ${res.status}`);
await Bun.write('shot.webp', res);

Cookie and consent banners, 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 use the take_screenshot, get_page_info, and capture_pdf tools. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month, with no card required.

Options to check before integrating

Full-page capture is only one part of the request. Match the API’s options to your production pages and keep the selected behavior explicit:

  • Page readiness: wait for a selector, a delay, network idle, or a combination. Avoid assuming that network idle means client-side content is complete.
  • Scrolling: choose whether to scroll to trigger lazy content, capture by sections, or skip scrolling. Bound captures of feeds and unending pages.
  • Viewport and resolution: set width, height, device preset, and device scale factor. Retina scale increases output dimensions and file size.
  • Output: choose PNG, JPEG, WebP, or PDF according to downstream use. Check provider-specific dimension and format limits, especially for tall pages.
  • Target region: use a selector crop when only one component matters; account for selectors that change between deployments.
  • Page state: set custom headers, cookies, user agent, timezone, or geolocation when the page depends on them. Treat credentials as secrets.
  • Visual adjustments: consider dark mode, transparent backgrounds, custom CSS or JavaScript, click-before-capture, and selectors to hide.
  • Network and privacy: block ads, trackers, requests, or resource types only when doing so will not remove content needed in the screenshot.
  • Delivery: check caching, chosen TTL, signed image links, asynchronous jobs, webhook signing, bulk requests, and usage reporting if they fit the workload.

ScreenshotNeo lists these options across its API, including image resizing, HTML/CSS-to-image, PDF settings, and bulk capture of up to 100 URLs per call. The appropriate combination depends on the target site and your output requirements; verify behavior with representative URLs.

Troubleshooting full-page captures

Symptom Likely cause What to try
Images or cards are missing lower on the page They load only after scrolling, or the screenshot ran before rendering finished. Enable scroll-before-capture or section capture, increase the delay, and verify the content appears in the browser before capture.
Some animated elements are absent or inconsistent Capture timing or fast section scrolling misses animation frames. Increase per-section delay, adjust scroll increments, reduce motion where supported, and repeat with a stable page state.
Sticky headers repeat or cover content Fixed-position elements behave differently during a tall render and a scroll-and-stitch capture. Compare capture strategies; hide the sticky selector with a supported option or use a selector crop if appropriate.
The screenshot stops before the bottom A height limit, maximum image dimension, or infinite-scroll safeguard has been reached. Inspect output dimensions and provider limits. Set an intentional height or section bound; Urlbox documents an infinite-scroll safeguard and maximum-height control.
The capture takes too long or never reaches a ready state The page keeps network activity open, waits on a resource, or continuously appends content. Use a bounded timeout and a page-specific selector or delay instead of relying only on network idle. Bound scrolling for feeds.
The returned image is unexpectedly large or rejected A very tall page, high device scale, or unsupported output dimension exceeded a limit. Lower device scale or viewport width, use a supported format, or split the job into sections. Urlbox recommends PNG for full-page output given its stated JPEG and WebP dimension limits.
The result differs between repeated requests Dynamic content, animation, personalization, cookies, or changing page data. Use consistent headers, cookies, viewport, timezone, and wait policy; disable motion if possible and compare multiple captures.
Usage does not match request count Providers count different units, and cache hits, failures, long pages, or output types may be treated differently. Inspect the provider’s usage response and current plan terms. For ScreenshotNeo, check X-Page-Verdict and X-Billed; for other services, confirm their documented quota and overage rules.

Performance, reliability, and cost

Capture time depends on the target page, its resources, readiness condition, scrolling policy, and output size. A full-page request may do substantially more work than a viewport capture. Avoid quoting a provider-wide speed figure without a controlled comparison on your own pages.

For reliability, set request timeouts, handle non-success responses, and make retries bounded. A retry can capture a changed page or consume another billable unit depending on provider policy, so check usage after retrying. For async jobs, validate webhook signatures where offered and make handlers safe to receive duplicate notifications. Keep API keys on the server rather than exposing them in public page code, except when using a documented signed-link flow.

Estimate monthly cost using the provider’s actual billable unit and your expected mix of full-page, section, PDF, failed, and cached requests. Include rate limits, overage behavior, and plan-specific features. ScreenshotOne’s documented credit model counts full-page and scrolling screenshots as one credit per output type; Urlbox describes extra render usage for certain demanding pages. ScreenshotNeo’s listed plans are Free at 1,000 per month, 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.

Frequently asked questions

Can one API capture a full page and a specific element?

Several APIs document both page-level and selector-based capture. Use full-page output for a document-like record and selector capture for a component or smaller asset; verify selector stability against the live page.

Does full-page always mean every item in an infinite feed?

No. Infinite feeds may have no natural end, so choose a maximum height or bounded scroll policy. A provider safeguard may also stop scrolling automatically.

Which service is objectively the fastest or most accurate?

The research sources do not provide a standardized independent benchmark. Run a controlled test on your own URLs and compare completeness, dimensions, time, and billed usage.

Can I use a screenshot API from an AI agent?

ScreenshotNeo provides an MCP server with screenshot, page-info, and PDF tools for Claude, Cursor, and MCP clients. Other integrations depend on each provider’s available interfaces.