BlogScreenshots on your device
How to Take a Full-Page Screenshot in Safari on macOS
Safari’s built-in tools save complete pages as archives or PDFs, while a tall PNG requires an extension or a screenshot API.
Short answer: macOS screenshot shortcuts capture only the visible screen, window or selection. Safari’s built-in full-page options are File > Save As > Web Archive, Page Source, and PDF sharing. If you need one tall PNG, use a Safari extension that advertises full-page capture or use a screenshot API such as ScreenshotNeo.
The output matters: a PNG is one image, a PDF is a paginated document, a Web Archive preserves a page for offline viewing, and Page Source is HTML. Choose the method that matches the deliverable before you capture anything.
What Safari and macOS can capture
| Method | Includes below the fold? | Output | Best for |
|---|---|---|---|
| Shift-Command-3 | No | Screen image | Everything currently visible on the display |
| Shift-Command-4 | No | Selected image | A region of the visible page |
| Shift-Command-4, then Space | No | Window image | The Safari window or a menu |
| Safari File > Save As > Web Archive | Yes | Web Archive | Keeping page graphics and links available for later viewing |
| Safari File > Save As > Page Source | Yes | HTML source | Reusing or inspecting the page’s source |
| Safari Share to Mail as PDF | Usually | A searchable, printable document | |
| Safari full-page extension | Usually | PNG or PDF | A single tall image or extension-generated PDF |
| ScreenshotNeo API | Yes | PNG, JPEG, WebP or PDF | Repeatable captures from scripts, CI jobs or AI agents |
1. Capture the visible Safari screen with macOS
Use these Apple-documented shortcuts when the content you need is already visible:
- Press Shift–Command–3 for the entire screen.
- Press Shift–Command–4, then drag over the area to capture.
- Press Shift–Command–4, then press Space to capture a window or menu.
- Press Shift–Command–5 to open the Screenshot app on macOS Mojave 10.14 and later.
These shortcuts capture screen pixels. They do not scroll Safari, so content below the visible viewport is not included. Apple documents the shortcuts, save location and thumbnail behavior in its Mac screenshot guide. On supported Mac models with macOS Tahoe 26 or later, the Screenshot app may offer SDR/PNG and HDR/HEIF choices; those format choices do not add scrolling capture.
2. Save the entire page as a Web Archive
A Web Archive is Safari’s built-in way to keep a complete page record with its graphics.
- Open the page in Safari.
- Choose File > Save As.
- In the format menu, choose Web Archive.
- Choose a location and click Save.
Web Archive files can preserve graphics, and links continue to work while their destination pages remain available. This is useful for receipts and temporary pages, but it is not a PNG screenshot and may not reproduce a live application exactly. Some websites prevent particular items from being saved. See Apple’s Safari page-saving instructions.
3. Save the page’s HTML with Page Source
Choose File > Save As and select Page Source when you need the HTML source rather than a visual capture. Page Source saves the document markup; it does not package the rendered page as one image, and it may depend on external stylesheets, scripts or assets.
4. Share a Safari page as a PDF
Safari can send a webpage to Mail as a PDF in supported cases:
- Open the page in Safari.
- Choose File > Share (or the Share button).
- Choose Mail.
- In Mail, choose the webpage/PDF option when offered, then send or save the draft.
PDF is a document format. It can paginate a long page, alter responsive layout and produce a different appearance from a single tall image. Apple describes this route in its Safari sharing guide.
5. Get one tall PNG or JPEG
Apple’s current screenshot and Web Inspector documentation does not describe a supported Safari command that exports an entire scrolling page as one image. Web Inspector is documented for inspecting and debugging webpages, not for a full-page screenshot workflow. If a tall image is mandatory, the practical choices are:
- Safari extension: The Mac App Store lists FullPage Screenshot for Safari by Alfredo Grassau. The listing advertises full-page PNG/PDF capture and an editor. Check its current macOS compatibility, permissions, site behavior and price before installing; the listing is not an Apple guarantee and cannot establish universal compatibility.
- Screenshot API: Use a hosted browser capture when you need repeatable output, automation, custom viewports or server-side processing.
6. Prepare the page before capturing
Regardless of the method, preparation prevents many incomplete captures:
- Wait for the page’s fonts, images and charts to finish loading.
- Scroll through the page once if it uses lazy-loaded images; some pages load content only after it enters the viewport.
- Close cookie notices, newsletter dialogs and chat widgets if they obscure content.
- Sign in when the page requires an account, and avoid exposing private information in a shared image.
- Set the Safari window width deliberately. Responsive breakpoints can change text wrapping and page height.
- Disable reader mode when you need the site’s actual layout; use reader mode when you want an article-focused document.
- For a PDF, check page breaks and headers before sharing. For a PNG, check the top, bottom and any sticky elements.
7. Automate a full-page capture with ScreenshotNeo
For scheduled jobs, documentation pipelines or many URLs, ScreenshotNeo provides a GET endpoint that returns PNG, JPEG, WebP or PDF. Its full-page mode loads lazy images, and you can set a viewport, device preset, retina scale, wait condition, custom CSS or JavaScript, cookies, headers, timezone and geolocation. See the ScreenshotNeo API documentation for parameter names and response details.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python
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)
Node.js
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 failed: ${res.status}`);
const data = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', data));
Useful capture controls
| Need | ScreenshotNeo capability |
|---|---|
| Entire document | Full-page capture with lazy images loaded |
| One component | Capture an element by CSS selector |
| Consistent appearance | Device presets, custom viewport, dark mode and retina scale |
| Dynamic content | Wait for a selector, delay or network idle; run custom JavaScript |
| Privacy and clutter | Hide selectors; block ads, trackers, requests or resource types |
| Authenticated pages | Custom headers, cookies, user agent and Authorization |
| Location-sensitive pages | Timezone and geolocation controls |
| Documents | PDF paper size, margins, landscape and page ranges |
| Delivery at scale | Caching with a chosen TTL, async jobs with signed webhooks and bulk capture for up to 100 URLs per call |
8. Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
| Only the visible screen was captured | A standard macOS shortcut was used | Use Web Archive/PDF, a full-page extension or an API. |
| Web Archive is missing images | The site blocks saving or loads assets dynamically | Let the page finish loading, try again, or use a rendered capture. |
| PDF has unexpected page breaks | PDF pagination differs from screen layout | Adjust print settings or use a tall image output. |
| Extension capture stops early | Lazy loading, infinite scroll or a site restriction | Scroll first, wait for content, reduce page complexity, and check extension permissions and compatibility. |
| Sticky header appears repeatedly | The header is fixed while the page is stitched | Hide the selector or use custom CSS in an automated capture. |
| ScreenshotNeo returns a bot check or blank page | The target blocks automation or failed to render | Inspect X-Page-Verdict and X-Billed; adjust waits, headers or user agent where appropriate. |
| Authenticated content is absent | No session cookie or Authorization header was supplied | Provide the required cookies or headers and protect the resulting file. |
| Images are missing below the fold | Lazy-loaded resources were not triggered | Use full-page mode, wait for network idle or a known selector, or add a delay. |
9. Performance, reliability and cost
- Local methods: Short pages are fastest with ordinary shortcuts. Archives and PDFs depend on Safari’s current page state and the site’s ability to provide assets.
- Extensions: Output quality depends on the extension, Safari version and target site. Review permissions and test pages with lazy loading, fixed headers and infinite scroll.
- Automation: Set an explicit timeout, wait condition and viewport. Cache stable pages when appropriate, and use asynchronous jobs or bulk capture for large batches.
- ScreenshotNeo billing: Clean shots are billed; bot checks/CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing. Each response identifies the result with
X-Page-VerdictandX-Billedheaders. - Plans: Free includes 1,000 shots per month with no card. Paid plans are 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 available on every plan.
Or skip the browser setup
Use one ScreenshotNeo request when you need a repeatable full-page image:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo removes cookie banners, newsletter popups and chat widgets before the shot. Bot checks, blank pages and failed loads are never billed. Its MCP server lets AI agents such as Claude and Cursor call take_screenshot, get_page_info and capture_pdf. You get 1,000 screenshots a month free with no card, and paid plans start at $5 for 3,000 shots.
Create a free ScreenshotNeo account.
FAQ
Does Safari have a built-in full-page PNG shortcut?
Apple’s documented shortcuts capture the screen, a window or a selected region. They do not document a scrolling full-page PNG command.
Is a Web Archive the same as a screenshot?
No. A Web Archive preserves page resources for later viewing; it is not a single flattened image.
Which format is best for a searchable record?
PDF is generally better for printing and searching. Use Web Archive when preserving links and page resources matters.
Can Web Inspector create a full-page screenshot?
Apple documents Web Inspector for inspection and debugging. The cited documentation does not establish a supported full-page screenshot workflow.
Why does a full-page capture look different from Safari?
Viewport width, responsive breakpoints, fonts, lazy loading, fixed elements and timing can all change the rendered result. Capture after the page settles and set those conditions explicitly when using automation.
Sources: Apple: Take a screenshot on Mac; Apple: Save part or all of a web page in Safari on Mac; Apple: Share or post web pages in Safari on Mac; Apple Developer: Inspecting Safari on macOS; Apple Developer: Web Inspector; Mac App Store: FullPage Screenshot for Safari.


