Recommended Free Tools
Use a browser script to capture agreed client pages, a scheduler to start it on a recurring cadence, and a separate storage and review destination to preserve the evidence. A practical DIY setup is Playwright plus GitHub Actions: it can save timestamped screenshots, but scheduled runs may be delayed and workflow artifacts expire. Treat the schedule as a target interval—not an exact-time guarantee—and choose archive storage and client access deliberately.
Plan what the archive needs to prove
Before automating captures, agree with the client on the evidence each image should show. A screenshot archive is only useful for approval when the pages, framing, timing, and review process are clear.
As an Amazon Associate I earn from qualifying purchases.
- Pages: list exact URLs, including relevant variants such as campaign or checkout pages.
- Framing: choose a viewport screenshot, a full-page capture, or a specific page element. Record viewport width and height.
- Cadence: decide how often captures should run and what events warrant an extra capture, such as a deployment or requested recapture.
- Review: specify who can view the images, how the client approves, and where comments or change requests belong.
- Context: associate each capture with its page, timestamp and timezone, browser environment, and deployment or build identifier when available.
These details are practical archive conventions rather than requirements imposed by Playwright or GitHub. Keep client-sensitive images in a destination with appropriate access controls.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Build the capture script with Playwright
Playwright can open pages and save screenshots. The example below captures a list of URLs in a consistent Chromium viewport and writes timestamped PNGs to a run-specific folder. Install Playwright and its Chromium browser in the project before running it:
#1 Best Overall
- PORTABLE SCANNER FOR USE ON-THE-GO — The fastest and lightest mobile single-sheet-fed compact document scanner in its class¹
- QUICK DOCUMENT SCANNING ― This Epson ultra-fast scanner scans a single page as quickly as 5.5 seconds²; Windows and Mac compatible
- VERSATILE PAPER HANDLING ― Portable scanner scans documents up to 8.5 x 72 in; Also easily digitizes receipts and ID cards to make accounting, bookkeeping, and organizing simpler
- INTUITIVE, HIGH-SPEED SOFTWARE — Epson ScanSmart Software³ is a smart tool allowing you to easily scan, review, and save; Stay organized easily with the help of this Epson scanner
- EASY SETUP — USB-powered connect to your computer for quick and simple scanning; No batteries or external power supply required to operate portable document scanner; Standard Connectivity: USB 2.0
npm install --save-dev playwright
npx playwright install chromium
Save this as capture.mjs. Set CAPTURE_URLS to a comma-separated list of the pages you have agreed to archive.
import { chromium } from 'playwright';
import { mkdir } from 'node:fs/promises';
const urls = (process.env.CAPTURE_URLS ?? '')
.split(',')
.map((url) => url.trim())
.filter(Boolean);
if (urls.length === 0) {
throw new Error('Set CAPTURE_URLS to one or more comma-separated URLs.');
}
const width = Number(process.env.VIEWPORT_WIDTH ?? 1440);
const height = Number(process.env.VIEWPORT_HEIGHT ?? 1000);
const runId = new Date().toISOString().replaceAll(':', '-');
const outputDir = `screenshots/${runId}`;
await mkdir(outputDir, { recursive: true });
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({ viewport: { width, height } });
try {
for (const [index, url] of urls.entries()) {
const response = await page.goto(url, {
waitUntil: 'domcontentloaded',
timeout: 60000,
});
if (!response || !response.ok()) {
throw new Error(`Page load failed for ${url}: HTTP ${response?.status() ?? 'no response'}`);
}
// Replace this with a page-specific readiness condition when needed.
await page.waitForTimeout(1000);
const host = new URL(url).hostname.replace(/[^a-zA-Z0-9.-]/g, '_');
const filename = `${String(index + 1).padStart(2, '0')}-${host}-${runId}.png`;
await page.screenshot({ path: `${outputDir}/${filename}`, fullPage: true });
console.log(`Saved ${url} to ${outputDir}/${filename}`);
}
} finally {
await browser.close();
}
Run it locally to verify the URLs, viewport, and framing before adding a schedule:
Rank #2
- FAST SPEEDS - Scans color and black and white documents a blazing speed up to 16ppm (1). Color scanning won’t slow you down as the color scan speed is the same as the black and white scan speed.
- ULTRA COMPACT – At less than 1 foot in length and only about 1. 5lbs in weight you can fit this device virtually anywhere (a bag, a purse, even a pocket).
- READY WHENEVER YOU ARE – The DS-640 mobile scanner is powered via an included micro USB 3. 0 cable allowing you to use it even where there is no outlet available. Plug it into you PC or laptop and you are ready to scan.
- WORKS YOUR WAY – Use the Brother free iPrint&Scan desktop app for scanning to multiple “Scan-to” destinations like PC, Network, cloud services, Email and OCR. (2) Supports Windows, Mac and Linux and TWAIN/WIA for PC/ICA for Mac/SANE drivers. (3)
- OPTIMIZE IMAGES AND TEXT – Automatic color detection/adjustment, image rotation (PC only), bleed through prevention/background removal, text enhancement, color drop to enhance scans. Software suite includes document management and OCR software. (4)
CAPTURE_URLS="https://example.com,https://example.com/pricing" node capture.mjs
The sample uses a short delay only as a basic example; it is not a universal page-readiness rule. Replace it with a page-specific condition, such as waiting for a known selector, when content loads asynchronously. Cookie overlays, animations, changing ad slots, fonts, and personalized content can all affect what appears in a capture. Use fullPage: false for only the viewport, or target a specific locator and capture that element when the approval concerns one component.
Playwright notes that screenshot output can vary with the host operating system, browser version, settings, hardware, power source, and headless mode. For more repeatable records, keep the browser and runner environment consistent; avoid comparing images captured across different environments as if they were guaranteed pixel-identical. See Playwright’s screenshot comparison documentation.
Rank #3
- FAST DOCUMENT SCANNING — Document scanner with feeder allows you to speed through stacks with a 50-sheet Auto Document Feeder (ADF); Efficient office scanner to help you scan more productively
- INTUITIVE, HIGH-SPEED SOFTWARE — Quickly scan with this desktop document scanner; Epson ScanSmart Software lets you easily preview scans, email files, upload to the cloud, and more; Plus, automatic file naming saves even more time
- SEAMLESS INTEGRATION — Easily incorporate your data into most document management software with the included TWAIN driver; Office document scanner integrates seamlessly with business workflows
- EASY SHARING — Duplex scanner allows you to scan straight to email or popular cloud storage2 services like Dropbox, Evernote, Google Drive, and OneDrive for simple storage and sharing
- SIMPLE FILE MANAGEMENT — Scanner allows the creation of searchable PDFs with Optical Character Recognition (OCR) and convert scans to editable Word or Excel files effortlessly; Designed for home and office document scanning
Schedule recurring captures with GitHub Actions
A scheduled GitHub Actions workflow can run the script on a cron cadence. Add a workflow file such as .github/workflows/client-screenshots.yml to the repository’s default branch:
name: Client website screenshots
on:
schedule:
- cron: '17 9 * * 1-5'
workflow_dispatch:
jobs:
capture:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npx playwright install --with-deps chromium
- name: Capture approved pages
run: node capture.mjs
env:
CAPTURE_URLS: ${{ secrets.CAPTURE_URLS }}
VIEWPORT_WIDTH: '1440'
VIEWPORT_HEIGHT: '1000'
- name: Upload screenshot archive for this run
uses: actions/upload-artifact@v4
with:
name: client-screenshots-${{ github.run_id }}
path: screenshots/
retention-days: 30
The example runs at 09:17 UTC on weekdays, avoiding the top of the hour. Change the cron expression to suit the agreed cadence; GitHub Actions cron schedules use UTC. The workflow also supports a manual run through the Actions interface because it includes workflow_dispatch. Store URLs that should not be exposed in repository history as an Actions secret; for public pages, a committed configuration file may be simpler.
Rank #4
- Scanner type: Document
- Connectivity technology: USB
- With Auto Scan Mode, the scanner automatically detects what you're scanning
- Digitize documents and images
GitHub says scheduled workflows run against the latest commit on the default branch. The schedule event can be delayed during periods of high Actions load, especially around the start of an hour, so it should not be treated as a precise-time clock. The minimum permitted schedule interval is five minutes. Scheduled workflows in public repositories are automatically disabled after 60 days of repository inactivity. See GitHub’s schedule event documentation.
Preserve files beyond a workflow run
GitHub Actions artifacts are useful for collecting files from a run, but retention is limited and configurable. GitHub documents a 90-day default for build logs and artifacts, subject to repository, organization, or enterprise settings. The workflow above explicitly sets a 30-day retention period; it is an example choice, not GitHub’s default. Playwright’s CI example also configures 30 days. See GitHub’s artifact retention documentation and Playwright’s CI example.
Best Value
- OUR MOST ADVANCED SCANSNAP. Large touchscreen, fast 45ppm double-sided scanning, 100-sheet document feeder, Wi-Fi and USB connectivity, automatic optimizations, and support for cloud services. Upgraded replacement for the discontinued iX1600
- CUSTOMIZABLE. SHARABLE. Select personalized profiles from the touchscreen. Send to PC, Mac, mobile devices, and clouds. QUICK MENU lets you quickly scan-drag-drop to your favorite computer apps
- STABLE WIRELESS OR USB CONNECTION. Built-in Wi-Fi 6 for the fastest and most secure scanning. Connect to smart devices or cloud services without a computer. USB-C connection also available
- PHOTO AND DOCUMENT ORGANIZATION MADE EFFORTLESS. Easily manage, edit, and use scanned data from documents, receipts, photos, and business cards. Automatically optimize, name, and sort files
- AVOIDS PAPER JAMS AND DAMAGE. Features a brake roller system to feed paper smoothly, a multi-feed sensor that detects pages stuck together, and skew detection to prevent paper damage and data loss
If the client needs a long-lived or permanent archive, do not rely on Actions artifacts alone. Copy approved outputs to a storage location with a retention policy and access controls that match the engagement. Keep a small manifest alongside each run, for example a CSV or JSON file containing the URL, capture time and timezone, viewport, browser/version, and deployment identifier. These fields help explain differences between images; they do not make the rendering identical.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Make client approval a separate, explicit step
A capture workflow creates evidence; it does not itself establish that the client has approved the work. Provide a stable location the client can access and define how review is recorded. For a simple archive, that might mean a dated folder and a written approval in the project tracker. For teams that need automated change review, Playwright supports screenshot assertions, and Percy documents a Playwright integration. Those comparison tools address visual changes, which is related to—but distinct from—preserving a dated screenshot record. See Playwright’s screenshot assertions and Percy’s Playwright integration.
Use access-controlled storage for client-sensitive screenshots. Playwright’s CI guidance advises using trusted artifact stores or encrypting uploaded reports and traces; apply the same care to screenshot archives.
Free tools Windows power users keep installed
One-click scans. No signup required.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request can return an image or PDF; its clean-shot flow accepts consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture. Each of those cleanup steps can be turned off. The API identifies page outcomes and billing in response headers: bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing. For a scheduled archive, you still need a scheduler and a place to store and share the returned files.
Example cURL request, saving a WebP screenshot of a page (replace the URL and use your API key):
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
See the ScreenshotNeo API documentation for the request options, including full-page capture, viewport and device settings, PDF output, caching, and async jobs. It also has an MCP server with take_screenshot, get_page_info, and capture_pdf tools for AI agents using Claude, Cursor, or another MCP client. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. See ScreenshotNeo for plan details. Sign up free for 1,000 screenshots a month with no card.
Quick Recap
Troubleshoot inconsistent or missing captures
- The page is blank or incomplete: a navigation event may finish before client-side content is ready. Wait for a page-specific selector or known state instead of increasing a generic delay indefinitely.
- A cookie notice or popup obscures the page: decide whether approval should record the visitor-facing state or the unobstructed page. If using a browser script, handle the site’s consent state intentionally and lawfully; do not silently dismiss a state the client needs to review.
- Images or fonts differ across runs: keep the runner OS and browser version consistent and avoid comparing captures made under different rendering conditions as exact matches.
- A workflow did not run at the expected minute: scheduled Actions may be delayed during high load. Check the Actions run history, confirm the workflow is on the default branch, and avoid relying on top-of-hour timing.
- Artifacts are gone: check the configured retention and repository or organization policy. Export files to longer-term storage before expiration if they are part of the client record.
- Only some URLs were captured: inspect the failed URL and HTTP status in the workflow log. A failing page currently aborts the sample script; for larger batches, modify the loop to log per-page errors and continue, then fail the job at the end if any pages failed.
- Client cannot open the archive: verify the storage permissions and link access with a reviewer account, not only the workflow owner’s account.
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.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.




