Full page capture

Scrolling Screenshot API Capture Full-Page Websites

Capture entire webpages from top to bottom in a single image. The Nodium full page screenshot API handles lazy-loaded content, infinite scroll, and single-page applications automatically. No cropping, no missing content.

Viewport only
Content cut off
Full page (scrolling)
Complete capture

Why You Need a Scrolling Screenshot API

Modern websites are built to load content dynamically. A viewport-only screenshot misses most of the page.

Lazy-loaded content
Images, videos, and sections that load only when scrolled into view. A standard screenshot misses them entirely. Our scrolling capture triggers every lazy-load observer before capturing.
Single-page applications
SPAs built with React, Vue, or Angular render content dynamically after the initial page load. Nodium waits for JavaScript execution and DOM updates before scrolling and capturing the full page.
Infinite scroll pages
Social feeds, product catalogs, and news sites use infinite scrolling. Set a maximum scroll height to capture exactly the amount of content you need without runaway captures.

How Full-Page Capture Works

Our rendering engine follows a precise sequence to ensure nothing is missed.

1

Initial render

We load the page in a headless Chromium browser and wait for the DOM to settle. JavaScript executes fully, fonts load, and above-the-fold content renders completely.

2

Scroll and trigger lazy content

The browser scrolls down the page in increments, pausing at each step to allow lazy-loaded images, IntersectionObserver callbacks, and dynamically injected content to load. The scroll delay is configurable.

3

Wait for network idle

After scrolling to the bottom, we wait until all pending network requests (images, API calls, fonts) have completed. This ensures every resource has loaded before capture.

4

Capture the full page

The entire page height is captured as a single stitched image. The output includes everything from the top of the page to the very last pixel of content, up to the configured max height.

Scrolling Screenshot Parameters

Fine-tune full page captures with these dedicated parameters.

ParameterTypeDefaultDescription
full_pagebooleanfalseCapture the entire scrollable page instead of just the visible viewport.
full_page_scrollbooleanfalseScroll down the page before capturing to trigger lazy-loaded content and IntersectionObserver callbacks.
full_page_scroll_delayinteger300Milliseconds to wait after each scroll step. Increase for pages with heavy lazy loading.
full_page_max_heightinteger16384Maximum pixel height for the captured image. Prevents runaway captures on infinite scroll pages.

Capture a Full Page in One Request

Add full_page=true to any screenshot request.

Basic full-page screenshot (cURL)
curl "https://api.nodium.io/api/v1/screenshot?\
  url=https://example.com&\
  full_page=true&\
  format=png" \
  -H "X-API-Key: ndm_your_api_key" \
  --output full-page.png
Full page with lazy-load scrolling (JavaScript)
const response = await fetch(
  "https://api.nodium.io/api/v1/screenshot?" +
    new URLSearchParams({
      url: "https://example.com/blog",
      full_page: "true",
      full_page_scroll: "true",
      full_page_scroll_delay: "500",
      full_page_max_height: "20000",
      format: "png",
    }),
  {
    headers: { "X-API-Key": "ndm_your_api_key" },
  }
);

const imageBuffer = await response.arrayBuffer();
Full-page screenshot (Python)
import requests

response = requests.get(
    "https://api.nodium.io/api/v1/screenshot",
    params={
        "url": "https://example.com/blog",
        "full_page": True,
        "full_page_scroll": True,
        "full_page_scroll_delay": 500,
        "format": "png",
    },
    headers={"X-API-Key": "ndm_your_api_key"},
)

with open("full-page.png", "wb") as f:
    f.write(response.content)

Use Cases for Scrolling Screenshots

SEO audits and visual QA

Capture entire landing pages to review layout, content hierarchy, and visual consistency across breakpoints. Compare before-and-after screenshots to catch regressions during redesigns.

Design reviews and approvals

Share full-page screenshots with stakeholders for design reviews. No need to scroll through a live site or record a video. A single image tells the whole story.

Web archiving and compliance

Preserve complete webpage snapshots for legal compliance, regulatory audits, or historical archiving. Capture the full page as it appeared at a specific point in time.

Legal evidence and documentation

Capture full-page screenshots of web content for legal proceedings, DMCA claims, or intellectual property documentation. The complete page capture serves as verifiable evidence.

Best Practices for Full-Page Screenshots

Always enable scrolling for lazy-loaded content

If the target page uses lazy loading (most modern sites do), set full_page_scroll=true. Without it, images and sections below the fold will appear as blank placeholders.

Increase scroll delay for heavy pages

Pages with large images, videos, or complex animations may need more time between scroll steps. Try 500-1000ms for media-heavy sites.

Set a max height to prevent runaway captures

Infinite scroll pages (social feeds, product catalogs) will keep loading forever. Set full_page_max_height to cap the capture at a reasonable pixel count.

Combine with device emulation

Capture full-page screenshots at different viewport widths to test responsive layouts. Use the width parameter alongside full_page for mobile, tablet, and desktop views.

Frequently Asked Questions

What is a scrolling screenshot API?
A scrolling screenshot API captures the entire content of a webpage, not just the visible viewport. It scrolls the page from top to bottom, triggers lazy-loaded content, waits for all resources to load, and then produces a single stitched image that shows the complete page. This is also known as a full-page screenshot or long screenshot.
How does Nodium handle lazy-loaded images in full-page captures?
When full_page_scroll is enabled, our rendering engine scrolls the page in increments, pausing at each step (configurable via full_page_scroll_delay) to allow IntersectionObserver callbacks to fire and lazy images to load. After reaching the bottom, we wait for network idle before capturing. This ensures all lazy-loaded content is visible in the final image.
What is the maximum page height I can capture?
The default maximum height is 16,384 pixels, which you can increase up to 65,536 pixels using the full_page_max_height parameter. For extremely long pages, we recommend setting a reasonable limit to prevent excessive memory usage and slow response times.
How do scrolling screenshots work with infinite scroll pages?
For pages with infinite scrolling (social feeds, product catalogs), use full_page_max_height to set a pixel limit. The browser will scroll until it reaches either the bottom of the content or your specified maximum height, whichever comes first. This prevents runaway captures on pages that load content indefinitely.
Can I capture full-page screenshots of JavaScript-heavy SPAs?
Yes. Nodium uses headless Chromium which fully executes JavaScript, including React, Vue, Angular, and other framework-based SPAs. The browser waits for the DOM to stabilize and JavaScript to finish executing before beginning the scroll and capture process.
What formats are available for scrolling screenshots?
Full-page scrolling screenshots support all image formats: PNG, JPEG, WebP, and AVIF. The format parameter works the same way as standard viewport screenshots. For document output, consider the PDF generation API which also captures full-page content with additional formatting options.

Capture entire webpages with one API call

Full-page scrolling screenshots are included in every Nodium plan. Start free with 150 screenshots per month.