ScreenshotNeo

BlogHow-to

How to Capture an Entire Webpage as a JPEG

Capture a complete webpage as a JPEG with Firefox, extensions, developer tools, or ScreenshotNeo. Includes dynamic-page fixes, code, troubleshooting, and format advice.

By the ScreenshotNeo team1 October 20267 min read

Direct answer: Firefox’s built-in full-page screenshot saves a complete webpage as a PNG. To get a JPEG, convert that PNG in an image editor, or use a full-page capture extension that explicitly supports JPEG export. For automated captures, use a screenshot API such as ScreenshotNeo.

Choose the right method

Method JPEG output Best for Main limitation
Firefox Save full page Convert PNG afterward One-off manual captures Firefox documents PNG output
Firefox Developer Tools Convert PNG afterward Repeatable developer workflow Requires enabling the screenshot button or using the console
GoFullPage Yes, according to its Firefox listing JPEG, PNG, or PDF exports Very large pages may be split into several images
FullPage Capture Yes, according to its Chrome listing JPEG with adjustable scroll delay Requires an extension
ScreenshotNeo Yes, through the API Automation, CI, bulk jobs, clean captures Requires an API key

Method 1: Firefox’s built-in full-page screenshot

  1. Open the webpage in Firefox.
  2. Wait for the content, images, charts, and menus you need to appear.
  3. Open the page context menu and choose Take Screenshot.
  4. Select Save full page.
  5. Firefox downloads the complete page as a PNG.
  6. Open the PNG in an image editor and export it as JPEG.

Firefox’s help documents the full-page capture and PNG download. JPEG is therefore a conversion step in this built-in workflow. See the Firefox screenshot documentation.

Convert PNG to JPEG

Use any image editor that supports JPEG export. Choose a quality level appropriate for the use case: higher quality preserves text and fine lines but creates a larger file; lower quality reduces size and can introduce ringing around text. Keep the original PNG if you may need to edit or recapture later.

Method 2: Firefox Developer Tools

Developer Tools provides a repeatable browser-native route, but its documented output is PNG.

  1. Open Firefox Developer Tools.
  2. Open Settings.
  3. Under Available Toolbox Buttons, enable Take a screenshot of the entire page.
  4. Click the screenshot button in the toolbox.
  5. Convert the resulting PNG to JPEG if required.

Firefox’s Web Console also provides a :screenshot helper. The --fullpage option includes content outside the viewport. Use --delay when a menu, animation, or lazy-loaded section needs extra time, and --dpr to control device-pixel-ratio handling:

:screenshot --fullpage --delay 2000 page.png

The documented filename uses a .png extension, so convert the result for JPEG delivery. Details are in Firefox’s screenshot tool documentation.

Method 3: Use a JPEG-capable extension

GoFullPage

The Firefox Add-ons listing says GoFullPage scrolls through visible sections, assembles them, and offers PNG, JPEG, and PDF export. Click its toolbar icon or use Alt+Shift+P, allow the capture to finish, then download JPEG. Its listing also describes handling for some inner scrollable elements and embedded iframes. Extremely large pages may be split into separate images in different tabs. Treat these as the extension’s documented capabilities, not a guarantee for every site. See the GoFullPage Firefox listing.

FullPage Capture

The Chrome Web Store listing for FullPage Capture describes scrolling and stitching page sections and exporting PNG or JPEG. Its help documentation includes a scroll-delay setting for slower pages. Increase the delay when content appears only after scrolling. See the FullPage Capture listing and its linked help material.

Other extensions

Awesome Screenshot documents full-page capture for its Chrome-compatible, Safari, and Firefox extensions. Verify the current export menu before relying on it for JPEG, because the reviewed documentation does not establish JPEG export.

Make the capture complete and accurate

  • Wait for lazy content: scroll through the page once, or use a delay before capture, so images and widgets have time to load.
  • Close transient UI: dismiss cookie notices, newsletter prompts, chat bubbles, and sign-in overlays before capturing.
  • Check fixed-position elements: sticky headers and floating buttons can be repeated or appear over several stitched sections.
  • Watch nested scrolling areas: an extension may capture the document but omit content inside an independently scrolling panel.
  • Inspect the output: look for duplicated sections, blank image boxes, missing fonts, seams, and content that changed while the page was being captured.
  • Consider image dimensions: a very long JPEG can exceed editor, browser, or sharing limits. Split it into sections when the destination cannot display one tall image.

Or skip the browser setup

ScreenshotNeo is a website screenshot API with PNG, JPEG, WebP, and PDF output. The one-call request can capture a full page and load lazy images before the shot. Its clean capture steps accept consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.

See the ScreenshotNeo API documentation for all options. This JPEG request uses the same endpoint as other image formats; set the output option required by your account or integration.

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(`HTTP ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));

For JPEG, request JPEG output using the documented format parameter. Relevant controls include full-page capture, CSS-element capture, dark mode, device presets or custom viewports, retina scale, custom CSS and JavaScript, clicks, selector waits, delays, network-idle waits, ad/tracker/request blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, caching with a chosen TTL, signed image links, asynchronous jobs with signed webhooks, bulk capture for up to 100 URLs per call, usage reporting, and the OpenAPI specification. Parameter names used by other screenshot APIs also work, which can simplify migration.

Plans include 1,000 free shots per month with no card; paid plans start at $5 for 3,000 shots. Every feature is available on every plan, and yearly billing gives two months free. Create a free ScreenshotNeo account.

Automation and reliability checklist

  1. Use a stable URL and wait for a selector, a delay, or network idle before capture.
  2. Set a viewport and device scale that match the output you need.
  3. Block ads, trackers, or unnecessary resource types when they make rendering slow or nondeterministic.
  4. Use custom headers, cookies, or authorization for pages that require a session.
  5. Read X-Page-Verdict and X-Billed rather than assuming every HTTP response is a valid page image.
  6. Cache unchanged pages with a TTL to reduce repeated work.
  7. For many URLs, use bulk capture; for long-running workflows, use asynchronous jobs and signed webhooks.

Troubleshooting

Problem Likely cause Fix
Only the visible viewport is saved Viewport capture was selected Choose Save full page, enable the DevTools full-page button, or use an extension/API full-page option.
Firefox output is PNG Built-in and DevTools documentation specifies PNG Export the PNG as JPEG in an editor, or use a JPEG-capable extension or ScreenshotNeo.
Images are missing Lazy loading had not completed Scroll first, add a delay, wait for a selector, or wait for network idle.
Sections are duplicated Sticky elements or scroll-and-stitch behavior Hide the fixed element, adjust extension delay/settings, and inspect the final image.
A long page is split The image exceeds a tool or format limit Download the separate images, reduce scale, or capture logical sections.
Content is covered by a popup Consent, newsletter, or chat UI remained open Dismiss it manually, hide its selector, or use ScreenshotNeo’s cleanup steps.
ScreenshotNeo returns an unexpected result Bot check, blank page, timeout, failed load, or cache hit Inspect X-Page-Verdict and X-Billed; adjust waits, headers, cookies, blocking, or authentication.
API request fails Invalid key, URL, or request parameters Check the API key, URL encoding, response status, and the parameter names in the documentation.

Performance, quality, and cost notes

  • JPEG quality: JPEG is smaller than PNG but introduces lossy compression. Use PNG when pixel-perfect text or transparent backgrounds matter; use JPEG for compact sharing and previews.
  • Capture time: full-page scrolling, lazy assets, fonts, ads, and third-party scripts all add work. Waiting for a known selector is usually more predictable than an arbitrary long delay.
  • Repeatability: dynamic timestamps, rotating ads, animations, and personalized sessions can change between captures. Freeze or hide them where possible.
  • Cost: browser extensions use your local machine. ScreenshotNeo bills only clean shots; bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing. Its free tier includes 1,000 shots monthly with no card.

FAQ

Can I make a full-page JPEG directly in Firefox?

Firefox’s documented built-in and Developer Tools workflows save PNG. Use a JPEG-capable extension or convert the PNG.

Why is my screenshot taller than expected?

The capture includes the entire document, including whitespace or expanded sections. Check for hidden content, accordions, and large margins before capture.

Will a full-page capture include content inside an iframe?

Support depends on the tool and page structure. GoFullPage’s listing describes support for some embedded iframes; inspect the result for your specific page.

What should I use for scheduled captures?

Use an API with explicit waits, authentication controls, caching, and job callbacks. ScreenshotNeo provides those controls and an MCP server for AI-agent workflows.