Skip to main content

Free tool

Screenshot any URL

Paste a URL, pick a viewport, get a PNG. JavaScript-rendered single-page apps work out of the box. Capture full pages, clip to a CSS selector, render five device breakpoints, or grab every viewport in one click. No sign up required.

JavaScript-rendered pages just work

Real headless Chromium, network-idle wait, optional extra hydration delay. SPAs render exactly as your users see them.

CSS selector clipping

Point at a single element (.pricing-table, #hero) for a tightly-cropped capture - perfect for pricing diffs and component QA.

From screenshot to monitor

Liked what you captured? One click turns this URL into a live change monitor with email, Slack, Discord, or webhook alerts.

Quick-start presets

One-click deep links that pre-fill the form with a popular target and viewport. Replace example.com with the URL you actually want to capture.

Frequently asked

01Is the OnChange screenshot tool really free?

Yes. The public tool captures PNGs of any reachable URL with no account required. Anonymous use is rate-limited to five captures per minute, which is enough for normal exploratory work; signed-in users get sixty per minute and the screenshot still costs nothing.

02Does it work on JavaScript-rendered single-page apps?

Yes. We run a real headless Chromium browser and wait for the network to settle before the capture, so React, Vue, Svelte, Next.js, and other client-rendered apps render exactly as a real visitor would see them. For apps that hydrate after networkidle, the wait-after-load slider in advanced options lets you add up to ten seconds of extra settle time.

03Can I capture a full-page screenshot below the fold?

Yes. Full-page capture is on by default; we also auto-scroll the page top-to-bottom before the capture so lazy-loaded images, IntersectionObserver-triggered content, and infinite-scroll feeds populate before the shutter snaps. You can disable either option for a fast above-the-fold-only capture.

04How do I screenshot a specific element on the page?

Use the CSS selector field in advanced options. Pass a selector like .pricing-table or #hero and the screenshot is clipped to that element's bounding box. This is the right way to capture just a pricing card, a chart, or a hero section without surrounding chrome.

05Can I take screenshots at custom viewport sizes?

Yes. Pick a preset (desktop, laptop, tablet, mobile-landscape, or mobile) for the common breakpoints, or enter your own width and height in advanced options to render the page at any size between 320 and 3840 pixels wide.

06Can I capture desktop, tablet, and mobile in one click?

Yes. The Capture all viewports button takes three sequential screenshots - desktop, tablet, and mobile - and renders them in a side-by-side comparison grid so you can scan responsive issues at a glance. Each capture counts as one against the per-minute rate limit.

07How long are the screenshot URLs valid?

Image URLs are presigned for twenty-four hours from the moment of capture. After that they expire and a fresh capture is needed. Use the Download PNG button on each result to save a permanent copy.

08Is this a screenshot API I can use programmatically?

The tool's underlying endpoint at POST /api/tools/screenshot is the same one the browser form calls. Authenticated requests get a higher rate limit. See the API documentation for the parameter list, or open a free account to get an API key.

Related reading