Capture the complete scrollable content of any web page — not just the viewport. SnapAPI scrolls through the entire page, triggers lazy-loaded images, and stitches everything into a single high-resolution image.
Start Free — 200 captures/monthA standard screenshot captures only the visible viewport — the top 800 or 900 pixels of a page. Any content below the fold is excluded. Full page capture extends the screenshot vertically to include every element on the page, from the header to the footer, regardless of page length.
SnapAPI achieves this by setting the browser viewport height to match the total document height and rendering the entire page in a single pass. For pages with lazy-loaded content that appears only when scrolled into view, the browser scrolls through the page first to trigger all intersection observer callbacks, then captures the complete result.
curl -X POST https://api.snapapi.pics/v1/screenshot -H "X-Api-Key: YOUR_API_KEY" -H "Content-Type: application/json" -d '{"url": "https://example.com", "full_page": true, "format": "png", "width": 1440}'
Set full_page: true in the request body. The resulting image width matches the specified viewport width; the height extends to fit the complete page content. Output format supports PNG for lossless quality, JPEG for smaller file sizes, and WebP for the best compression-to-quality ratio.
Modern web pages defer loading images, videos, and content sections until they enter the viewport. This improves initial page load performance but creates a challenge for full-page screenshots — the deferred content never loads because the browser never scrolls.
SnapAPI automatically scrolls through the page before capturing to trigger lazy-loading. Intersection observers fire as each section enters the simulated viewport, loading images and content that would otherwise appear as blank placeholders. The delay parameter adds additional wait time after scrolling to allow slow-loading resources to complete.
For pages with infinite scroll that continuously load new content, use the max_height parameter to cap the capture at a specific pixel height. Without a limit, an infinite scroll page would generate an infinitely tall image — the max height prevents this by stopping capture once the threshold is reached.
Combine full_page: true with the device parameter to capture the complete mobile version of a page. Select from over 30 device presets — iPhone 15, Samsung Galaxy S23, iPad Pro — each configured with correct viewport dimensions, pixel density, and user agent string.
Mobile full-page captures are essential for responsive design testing. They reveal layout issues that only appear on narrow viewports: text overflow, images that break the container, navigation elements that collapse incorrectly, and content that shifts position unexpectedly.
For QA automation, capture full-page screenshots at multiple device presets in parallel and compare them against baseline images. Visual regression testing catches layout bugs that unit tests and integration tests miss entirely — a misaligned button or an overflowing div that is invisible to programmatic assertions.
Sticky navigation bars and floating elements present unique challenges in full-page screenshots. A sticky header that stays fixed at the top of the viewport appears at every scroll position, creating repetitive overlapping content in the final stitched image. SnapAPI handles this by detecting fixed-position elements and rendering them once at their natural position.
For particularly stubborn sticky elements, the custom_css parameter lets you override positioning before capture. Injecting position: relative !important on the sticky header forces it to scroll with the page, eliminating overlap in full-page captures.
Cookie consent banners and GDPR overlays are automatically dismissed when hide_cookie_banners: true is set. This removes the visual obstruction from full-page captures without requiring custom CSS or JavaScript for each consent framework. The feature recognizes consent dialogs from OneTrust, CookieBot, Didomi, and dozens of other consent management platforms.
Ad blocking with block_ads: true removes advertising elements before the full-page capture. This produces cleaner screenshots for visual regression testing, archiving, and thumbnail generation where ad content adds visual noise and inconsistency between captures.
Custom JavaScript injection via the custom_js parameter runs before capture, enabling you to close popups, dismiss interstitials, expand collapsed sections, or modify page state in any way needed for a clean full-page screenshot.
Browser extensions like GoFullPage and Awesome Screenshot capture full-page screenshots manually. They work for one-off captures but cannot be automated, scheduled, or integrated into production workflows. An API-based approach lets you programmatically capture hundreds of full-page screenshots per hour, compare them against baselines, and store the results in your infrastructure.
For CI/CD visual regression testing, trigger full-page captures on every pull request. Compare the new screenshot against the baseline from the main branch using pixel-diff algorithms. Flag the PR when the visual difference exceeds a threshold. This automated pipeline catches layout regressions that no manual review or unit test can detect.
Batch full-page captures for site auditing use concurrent API calls to process an entire sitemap. Python's asyncio, Node.js Promise.all, and Go goroutines all provide efficient concurrency patterns. Monitor the X-RateLimit-Remaining header to throttle requests as you approach the burst limit.
SnapAPI provides SDKs for 8 languages and an MCP server for AI coding tools. The JavaScript SDK (snapapi-js on npm) and Python SDK are the most popular for full-page screenshot automation. Install, set your API key, and your first full-page capture takes one line of code.
Pricing: Free tier at 200 captures/month with no credit card. Starter $19/month (5,000), Pro $79/month (50,000), Business $299/month (500,000). All plans include full-page capture, stealth mode, ad blocking, and device emulation. Sign up at snapapi.pics.
High-DPI displays require screenshots at 2x or 3x pixel density. Set device_scale_factor: 2 to produce retina-quality full-page screenshots where text remains crisp when zoomed in. This is essential for visual regression testing where pixel-level comparison detects subtle rendering changes that appear only at high resolution.
The clip parameter extracts a specific region from the full-page capture rather than returning the entire page. Specify x, y, width, and height coordinates to capture only a product card, a chart, a hero section, or any other rectangular region. This eliminates post-processing cropping and reduces file transfer size.
Playwright's page.screenshot({ fullPage: true }) produces identical full-page captures. The difference is infrastructure: running Playwright yourself requires managing Chromium processes, memory allocation (each full-page capture of a long page can consume 500 MB or more), crash recovery, and browser version updates. SnapAPI provides the same Chromium rendering as a managed HTTP endpoint.
For teams already running Playwright in their test suite, SnapAPI complements rather than replaces it. Use Playwright for local development testing and SnapAPI for production workflows where infrastructure management is not desirable — scheduled monitoring, user-facing screenshot features, and CI/CD pipelines that run on hosted runners without browser binaries.
SnapAPI also provides scraping, content extraction, PDF generation, video recording, and AI analysis through the same API key — capabilities that would require separate tools alongside a self-hosted Playwright installation.
What is the maximum page height? SnapAPI captures pages up to 16,384 pixels tall by default. For extremely long pages, set the max_height parameter to control the cutoff point. Pages beyond this limit are truncated at the specified height.
Do sticky headers appear multiple times? SnapAPI handles fixed-position elements intelligently during full-page capture. Sticky headers render once at their natural position rather than repeating at every scroll offset. For elements that still cause overlap, use custom_css to override their positioning.
Does lazy loading work? Yes. The browser scrolls through the page before capture, triggering intersection observer callbacks and loading deferred content. Add a delay parameter for slow-loading resources that need extra time after scrolling completes.
Which image formats are supported? PNG for lossless quality and visual regression testing. JPEG with configurable quality for smaller file sizes. WebP for the best compression-to-quality ratio in modern browsers.
Can I capture full-page screenshots of authenticated pages? Yes. Pass session cookies or authentication headers with the API request. The browser uses these credentials to access the page before performing the full-page capture.