Recommended Free Tools
In Apify, screenshot format and quality are set by the screenshot method your Actor uses—not by one platform-wide setting. With Puppeteer, page.screenshot() returns PNG by default; set type: 'jpeg' for JPEG. If your Actor uses the SDK 2.3 saveSnapshot utility, its documented screenshotQuality option ranges from 0 to 100 and defaults to 50. Match the stored file’s content type and extension to the actual image format.
Choose the screenshot API used by your Actor
Apify does not provide one universal screenshot-format or image-quality switch for every Actor. The available options depend on the screenshot method and the installed library or SDK version. Check the Actor’s code and README first, then follow the documentation for that specific API. Apify also notes that Actor output locations vary; files and other unstructured results commonly go in a key-value store, while structured results commonly go in a dataset. Apify’s input and output guide explains the storage options.
| # | Preview | Product | Price | |
|---|---|---|---|---|
| 1 |
|
The Proxy Playbook: The Complete Guide to Proxy Servers: How to Source, Test, and Scale Residential,... | $29.95 | Buy on Amazon |
| 2 |
|
How to Host your own Web Server | $15.60 | Buy on Amazon |
Set PNG or JPEG with Puppeteer
Apify Academy documents PNG as the default output of Puppeteer’s page.screenshot(). To request JPEG, pass the optional type setting. The page-methods guide describes this option.
const pngBuffer = await page.screenshot();
const jpegBuffer = await page.screenshot({
type: 'jpeg',
});
These calls return image bytes. Use the buffer directly or save it through the Actor’s chosen storage method. Do not label JPEG bytes as PNG, or use a .png filename for a JPEG. Apify’s examples use an image content type that matches the encoded format. The screenshot-saving example shows the corresponding JPEG naming and content-type pattern.
#1 Best Overall
Set quality with the documented SDK 2.3 utility
The Apify SDK 2.3 API reference documents screenshotQuality for utils.puppeteer.saveSnapshot. Its default is 50, and the accepted range is 0–100. The reference says higher quality creates larger images and requires more storage. This setting belongs to that documented utility; it is not a general quality option for every call to page.screenshot(). Check the API reference for your installed SDK before using it. SDK 2.3 utils.puppeteer API reference.
await Apify.utils.puppeteer.saveSnapshot(page, {
key: 'screenshot',
screenshotQuality: 70,
});
Use a quality value only where the method supports it. The cited SDK 2.3 reference establishes the range and storage tradeoff, but does not provide a universal best value or a percentage of space saved at a particular setting. For a different SDK version or screenshot library, consult its matching API documentation rather than assuming this option applies.
Save screenshot bytes in Apify storage
For a Puppeteer screenshot buffer, the Apify SDK 3.6 guide demonstrates saving the bytes with Actor.setValue and a matching content type. The example below uses PNG; use image/jpeg and a JPEG filename or key when saving JPEG bytes instead. The SDK 3.6 screenshot guide contains the storage example.
import { Actor } from 'apify';
await Actor.init();
const screenshot = await page.screenshot({ type: 'png' });
await Actor.setValue('screenshot.png', screenshot, {
contentType: 'image/png',
});
await Actor.exit();
For JPEG, keep all three pieces aligned: request JPEG encoding, use an appropriate .jpg filename or key, and set contentType: 'image/jpeg'. The Actor’s README is the place to confirm where users should expect its output; an Actor may expose or organize stored results differently.
Rank #2
Choose format and quality for the intended use
| Choice | When it fits | What to verify |
|---|---|---|
| PNG | Use when your workflow needs the documented page.screenshot() default or expects PNG output. |
Keep the content type and filename consistent with PNG bytes. |
| JPEG | Use when the receiving workflow accepts JPEG and you want that encoded format. | Set type: 'jpeg' and use JPEG metadata when storing the result. |
saveSnapshot quality |
Use only when the Actor calls the SDK 2.3 utility that documents screenshotQuality. |
The documented value is 0–100, default 50; higher quality means larger images and more storage. |
There is no source-backed, universal size or visual-quality winner for every page and use case. A practical way to select a setting is to capture representative pages at values your chosen API supports, inspect the output at its intended display size, and compare resulting file sizes. Treat that as your own evaluation: page dimensions and downstream requirements affect the result.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshoot format and quality problems
- The file opens incorrectly or is reported as corrupt: confirm that the requested encoding, stored content type, and filename extension agree. A JPEG buffer labeled as PNG can confuse tools that rely on metadata or extensions.
- A quality option is ignored or rejected: verify that the code calls SDK 2.3
utils.puppeteer.saveSnapshot, where the cited reference documentsscreenshotQuality. Do not assume a quality option exists onpage.screenshot()or in another SDK version. - The stored output is not where expected: check the Actor README and its storage configuration. Apify’s output guide explains that the Actor determines how its results are organized.
- The file is larger than expected: higher quality in the documented
saveSnapshotutility requires more storage. Compare actual outputs for your page and workflow; the documentation does not promise a fixed reduction at any particular setting.
Or skip the browser setup
If you need a hosted screenshot rather than configuring capture inside an Apify Actor, ScreenshotNeo is a website screenshot API and MCP server for developers. A single GET request can return PNG, JPEG, WebP, or PDF. See the ScreenshotNeo documentation for request options.
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 and consent banners, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and responses identify the page verdict and billing status in headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for AI agents. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots.
Sign up for ScreenshotNeo’s free plan to try 1,000 screenshots a month with no card.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

