Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use a browser automation script to capture the page, a scheduler to run it daily, and storage that keeps each dated result instead of overwriting it. Playwright can save screenshots and PDFs; GitHub Actions can run a daily workflow. For a dependable archive, define the page state and capture scope, check each run, and keep a separate backup.

Choose what each daily record should show

Before automating anything, decide what the archive is meant to preserve. A screenshot records rendered pixels at a point in time; it is not a copy of the site’s source or a guarantee that interactive features can be recreated later.

  • Viewport: the currently visible browser area. Useful when the page’s initial appearance matters.
  • Full page: the complete scrollable page in one image. Useful for long articles and landing pages.
  • Element: a specific region selected by CSS selector, such as a price panel or announcement. Useful when the rest of the page changes frequently.

Playwright supports viewport and full-page screenshots through its page screenshot API; its CLI also supports targeting an element. Keep the viewport dimensions, browser engine, capture scope, and other settings consistent between days if you intend to compare results. See the Playwright screenshot documentation.

For pages with asynchronous content, wait for a meaningful page-specific condition rather than assuming a fixed delay always works. A selector that indicates the content is ready is often more robust than sleeping for a set number of seconds. Set a timeout, and decide what the script should do if the condition is never met.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Canon Canoscan Lide 300 Scanner (PDF, AUTOSCAN, Copy, Send)
  • Scanner type: Document
  • Connectivity technology: USB
  • With Auto Scan Mode, the scanner automatically detects what you're scanning
  • Digitize documents and images

Set up a Playwright capture script

The example below uses Node.js and Chromium, captures a full-page PNG, and exports a PDF for each target URL. It gives each day’s output its own directory. The selectors and URLs are examples: replace them with conditions and pages appropriate to your site.

Install the project dependencies

  1. Create a project directory and initialize it with npm init -y.
  2. Install Playwright with npm install playwright.
  3. Install the browser binaries with npx playwright install chromium.
  4. Save the script below as capture.mjs.
import { chromium } from 'playwright';
import { mkdir } from 'node:fs/promises';

const targets = [
  { name: 'homepage', url: 'https://example.com' },
];
const date = new Date().toISOString().slice(0, 10);
const outputDir = `archive/${date}`;

await mkdir(outputDir, { recursive: true });
const browser = await chromium.launch({ headless: true });

try {
  const page = await browser.newPage({
    viewport: { width: 1440, height: 900 },
    deviceScaleFactor: 1,
  });

  for (const target of targets) {
    const safeName = target.name.replace(/[^a-z0-9_-]/gi, '_');
    const response = await page.goto(target.url, {
      waitUntil: 'domcontentloaded',
      timeout: 45000,
    });

    // Replace this with a page-specific readiness condition where appropriate.
    await page.locator('body').waitFor({ state: 'visible', timeout: 15000 });

    await page.screenshot({
      path: `${outputDir}/${safeName}.png`,
      fullPage: true,
    });

    // page.pdf() uses print CSS by default. Emulate screen media first
    // if the PDF should reflect screen styling instead.
    await page.emulateMedia({ media: 'screen' });
    await page.pdf({
      path: `${outputDir}/${safeName}.pdf`,
      format: 'A4',
      printBackground: true,
    });

    console.log(JSON.stringify({
      name: safeName,
      requestedUrl: target.url,
      finalUrl: page.url(),
      status: response?.status() ?? null,
      capturedAt: new Date().toISOString(),
    }));
  }
} finally {
  await browser.close();
}

Run it locally with node capture.mjs. The screenshot and PDF files will appear under archive/YYYY-MM-DD/. The script logs the final URL and HTTP status so that redirects and unsuccessful responses are easier to spot. A successful navigation does not, on its own, establish that the page showed the content you intended to archive.

Choose a suitable readiness check

The sample waits for the body to become visible, which is only a basic check. For a page that loads its main content later, replace that line with a selector specific to the content, for example await page.locator('[data-testid="main-content"]').waitFor({ state: 'visible', timeout: 15000 });. Confirm the selector exists on the target page and is stable before relying on it.

Rank #2
Sale
Epson Workforce ES-50 Compact & Lightweight Mobile Document Scanner
  • 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

A fixed delay can be useful for a known animation or delayed widget, but it can waste time on fast runs and still be too short on slow ones. Network-idle conditions can also be unsuitable for pages with persistent network activity. Choose the condition that reflects the content you actually need.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Make the PDF match your intended appearance

Playwright’s page.pdf() renders with print CSS by default. Print styles may hide elements or rearrange the page, and printed colors can differ from screen colors. If the PDF should use screen styles, call page.emulateMedia({ media: 'screen' }) before page.pdf(), as in the script. Review a sample PDF before scheduling repeated runs; do not assume it will look identical to the screenshot.

For a printable document, leave print media enabled and inspect the result for page breaks, missing backgrounds, and clipped content. If visual evidence matters, retain the screenshot alongside the PDF rather than treating the PDF as a pixel-for-pixel substitute.

Rank #3
Sale
Brother DS-640 Compact Mobile Document Scanner, (Model: DS640)
  • 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)

Schedule the script to run daily with GitHub Actions

GitHub Actions can install the dependencies, run the capture script, and retain generated files as workflow artifacts. Create .github/workflows/daily-capture.yml in your repository’s default branch:

name: Daily website archive

on:
  schedule:
    - cron: '17 7 * * *'
  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
      - run: node capture.mjs
      - uses: actions/upload-artifact@v4
        with:
          name: website-archive-${{ github.run_id }}
          path: archive/
          if-no-files-found: error

The example uses five-field cron syntax: 17 7 * * * means 07:17 each day in the schedule’s applicable timezone. GitHub uses UTC by default and supports an optional IANA timezone. Scheduled workflows run using the latest commit on the default branch. Put the workflow on that branch before expecting it to run. Check GitHub’s schedule-event documentation for current syntax and behavior.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A scheduled run is not an exact-time guarantee. GitHub says schedule events can be delayed during periods of high workload, and sufficiently loaded queues can drop some runs. Choosing a minute other than the start of an hour may reduce exposure to peak load, but does not guarantee punctual execution. GitHub also automatically disables scheduled workflows in public repositories after 60 days without repository activity. Do not make this the only capture mechanism for a record that requires guaranteed timing or complete daily coverage.

Rank #4
Hczrc Portable Scanner, Photo Scanner for A4 Documents, Handheld Scanner for Business, Photo, Picture, Receipts, Books, JPG/PDF Format Selection, UP to 900 DPI, with 16G SD Car
  • Note: No software installation is required. You need 2 AA batteries ( not included) and a memory card ( included) to use it directly. Scan mode: Press and hold "Scan" for 2 seconds to turn on the device, and then press "Scan", the green light is on. The scanner moves to scan the file until the green light turns off automatically (or press the "Scan" key and the green light goes out). The number shown on the display increases by 1 to indicate that the scan is complete.
  • Portable Scanner scans images or pictures quickly: Store JPEG/PDF files within seconds, scan images or pictures quickly, plug and play, no need any software preinstalled. Compatible with Windows XP/7/Vista/Mac OS 10.4 or above version.
  • Lightweight and travel-friendly: Stored in Micro SD card directly, support read data on your computer or phone with USB connected. Powered by 2pcs AA batteries, Compact Design, it is convenient to carry outside.
  • 3 Image Resolution: 3 modes of resolution for your options: 300dpi/600dpi/900dpi, you can save it at the clearest way, picture and document are showed clear as it is. Freely choose your favorite resolution.File Format: JPEG/PDF format is all available, Great storage capacity as it supports 32G Micro SD card(Included 16GB Card),total meet your need for business trip or daily use.
  • Widely Used: It is applicable in bank, insurance business, real estate agency,home, office, library or outdoors. suitable for lawyer, businessmen, students, travelers and amateur archivists. Scan your important files and save them immediately, no struggling in finding a printing shop, keep it confidential.

The workflow above uploads files as an artifact; artifact retention and workflow permissions depend on repository settings and current GitHub behavior. Check the repository’s artifact retention settings and download or copy files before they expire. Another option is committing generated files to the repository; the shot-scraper GitHub Actions guide documents a workflow pattern that writes screenshots back to a repository. Large, frequently updated binaries can make repository history cumbersome, so use that approach only if its reviewability is worth the storage and maintenance trade-off.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Organize, verify, and back up the archive

Keep each run distinct. A predictable structure such as archive/YYYY/MM/DD/ with filenames containing a sanitized page name and format makes retrieval easier and prevents a new capture from replacing an older one. If you compare devices or viewport sizes, include those in filenames too.

For each run, retain a small manifest or log with the requested URL, final URL, capture timestamp, browser and version, viewport, and outcome. Review the workflow’s run history for missing dates and failed steps. A file being written successfully does not prove the page rendered correctly or that the archive will remain available.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Sale
MUNBYN Portable Scanner, 900 DPI Handheld Wand Scanner, A4, 16GB SD, Black
  • 【Easy to Carry--Portable Scanner】Length: 9.5 in = 1.5 pens. Weight: 0.66 lbs = An apple. Carry way: Small bag. Power Source: a pair of AA batteries (NEED TO BUY EXTRA). Support scanning up to A4 size.
  • 【Easy to Scan--Handheld Scan】Portable Scanner scans your photos, documents, and book pages in 3-5 seconds on 900 dpi resolution independently. Easy to use once you take a tiny bit of time to get the hang of this portable scanner. Compared to the feeding scanner, the wand scanner will not fold or damage old photos during scanning.
  • 【Easy to use--No Driver】Portable Scanner does not require downloading a driver. Easily connect the portable scanner to a computer through a USB cable to transfer your scanned photos or documents anywhere and anytime.
  • 【Easy to Digitalize--Clear Image】The highest 900dpi scan resolution can convert pictures, documents, book pages, or other targets into digital files in high clarity.
  • 【Easy to Store--16G SD Card】Wand scanner with 16G SD card will store thousands of scan files. With OCR software (you can find some software from Google Play Store), easy to transfer PDF scan files into Word/Excel format and edit them.
  • For a small archive, workflow artifacts or a repository may be convenient; confirm retention before relying on either.
  • For important records, keep a second copy separately from the machine or account that runs the capture, and periodically test that stored files open.
  • An external SSD can be an optional offline copy, but it does not replace a separately stored backup.

If the goal is broader local web preservation rather than a daily visual record, ArchiveBox documents offline copies in formats including HTML, PDF, PNG, and WARC. These formats preserve different aspects of a page and do not guarantee that every interactive feature can later be reproduced. Its cited manual is for release 0.4.17; consult the project’s current documentation rather than assuming older installation instructions still apply: ArchiveBox 0.4.17 documentation.

Troubleshoot common failures

  • The workflow does not run: confirm the workflow is on the default branch, the cron expression has five fields, and the repository has not had its public-repository schedule disabled after 60 days without activity. Check the Actions run history and the current GitHub schedule documentation.
  • The run starts late or is missing: scheduled runs may be delayed or dropped under load. Inspect the run history; a daily schedule is not a punctuality guarantee.
  • Playwright cannot launch Chromium: ensure the browser installation step completed for the same environment running the script. In Actions, npx playwright install --with-deps chromium installs Chromium and system dependencies.
  • The capture is blank or incomplete: the page may not have finished rendering its main content. Wait for a meaningful page-specific selector, inspect the final URL and response status, and adjust the timeout for that page.
  • The PDF differs from the screenshot: check whether print CSS is active. Use screen media before PDF export if screen styling is intended, and inspect page breaks and colors either way.
  • The files disappear: check artifact retention and repository storage behavior. Copy needed files elsewhere before expiration, and verify that a separate backup can be read.

Or skip the browser setup

ScreenshotNeo can capture a URL with one GET request and return an image or PDF. For an archive, call it once per URL and date from your own scheduler, then store each response under a dated filename. The request below saves a PDF; see the ScreenshotNeo API documentation for output options and request parameters.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -d format=pdf -o archive.pdf

ScreenshotNeo removes cookie and consent banners, newsletter popups, and chat widgets before capture; each cleanup step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP server gives AI agents tools to take screenshots, retrieve page information, and capture PDFs. The free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.

Sign up for ScreenshotNeo’s free plan to start capturing without a card.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Frequently Asked Questions

Can I save only the visible browser area instead of the full page?

Yes. Remove fullPage: true from the Playwright screenshot call to capture the viewport.

Can a PDF archive prove what a website contained?

It records a rendered view, not the site’s complete source, behavior, or every underlying resource. Keep the capture conditions and run metadata with the file, and use broader preservation formats if your goal goes beyond visual evidence.

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.