October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run ScanOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk5 min

Puppeteer Screenshots on a Schedule with GitHub Actions and Cron

Run Puppeteer on a GitHub Actions schedule: configure cron, capture a page, retain the screenshot, and fix common workflow failures.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To take a website screenshot automatically, put a Puppeteer script in your repository and schedule it with GitHub Actions. Add a workflow under .github/workflows/, use on.schedule with a five-field cron expression, and make sure the workflow is on the repository’s default branch. GitHub runs it against the latest commit on that branch; scheduled runs use UTC by default and may start later than the scheduled minute.

What you need

  • A GitHub repository with the workflow committed to its default branch.
  • A Node.js project with Puppeteer installed and a script that writes the screenshot to a file.
  • A workflow that checks out the repository, sets up a compatible Node.js version, installs dependencies, runs the script, and saves or publishes the resulting image.

The Puppeteer documentation for version 25.12.0 lists Node.js 22.12 or later in its system requirements. Use a runtime compatible with the Puppeteer version actually in your project, and check the release requirements when upgrading. Puppeteer installation and system requirements

As an Amazon Associate I earn from qualifying purchases.

Write the screenshot script

Install Puppeteer in the project and create capture.js:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  try {
    const page = await browser.newPage();
    await page.goto('https://example.com', { waitUntil: 'networkidle2' });
    await page.screenshot({ path: 'screenshot.png', fullPage: true });
  } finally {
    await browser.close();
  }
})();

Replace the example URL with the page to capture. Puppeteer runs headless by default, which suits a non-interactive GitHub runner. The screenshot guide demonstrates navigation followed by page.screenshot(); it also documents capturing an individual element with ElementHandle.screenshot(). Puppeteer screenshot guide

#1 Best Overall
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
  • Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
  • Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit Low Noise Bearing System Fan
  • Mega Heat Sink - Black Anodized

Choose when the page is ready

networkidle2 is an example, not a universal best setting. A mostly static page may be ready sooner; a site that keeps requests open, such as one with live updates, may never reach a network-idle condition. Choose and validate a readiness condition against the target site. You can instead wait for a particular selector when the needed content appears, or use a deliberate delay when the site’s behavior requires it.

Schedule the script with GitHub Actions

Create .github/workflows/screenshot.yml and commit it to the repository’s default branch:

name: Scheduled website screenshot

on:
  schedule:
    - cron: '17 9 * * *'
  workflow_dispatch:

jobs:
  screenshot:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Capture screenshot
        run: node capture.js

      - name: Keep screenshot as a workflow artifact
        uses: actions/upload-artifact@v4
        with:
          name: website-screenshot
          path: screenshot.png
          if-no-files-found: error

The example runs daily at 09:17 UTC. Change the cron fields to set a different cadence. workflow_dispatch adds a manual run option in GitHub Actions, useful for checking the script without waiting for the schedule. The artifact step retains the generated image with that workflow run; if the image needs to appear elsewhere, add an appropriate publishing step instead.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
  • Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM)
  • Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
  • CanaKit Premium High-Gloss Raspberry Pi 4 Case with Integrated Fan Mount, CanaKit Low Noise Bearing System Fan
  • CanaKit 3.5A USB-C Raspberry Pi 4 Power Supply (US Plug) with Noise Filter, Set of Heat Sinks, Display Cable - 6 foot (Supports up to 4K60p)
  • CanaKit USB-C PiSwitch (On/Off Power Switch for Raspberry Pi 4)

Read a cron expression

GitHub Actions uses five-field POSIX cron syntax: minute, hour, day of month, month, and day of week. For example, 17 9 * * * means minute 17 of hour 9 every day. The shortest supported interval for scheduled workflows is once every five minutes. Avoid minute 0 where possible: GitHub warns that high load, especially at the start of an hour, can delay runs or cause some queued jobs to be dropped. GitHub Actions schedule event details

UTC or a local timezone

Schedules use UTC by default. UTC keeps the wall-clock schedule consistent through daylight-saving changes, so the local execution time may shift seasonally. Current workflow syntax also supports an IANA timezone. A named local timezone can keep a schedule aligned with a local business day, but its daylight-saving transitions affect when it runs; check GitHub’s schedule documentation before using it.

Make sure the browser is installed

Puppeteer normally downloads a compatible Chrome for Testing browser during installation. If your package-manager policy blocks install scripts, that download may be skipped and the workflow can fail when it tries to launch the browser. Allow Puppeteer’s install script or install the browser explicitly in the workflow after dependency installation:

- name: Install Chrome for Testing for Puppeteer
  run: npx puppeteer browsers install

Refer to Puppeteer’s installation guide for the supported installation process and requirements. Puppeteer installation guide

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

Common failures and fixes

The scheduled workflow never appears or does not start

  • Confirm the workflow file exists on the repository’s default branch. A schedule does not trigger from a workflow file that exists only on another branch.
  • Check the Actions run history and confirm the workflow is enabled.
  • Verify the five cron fields and timezone. Remember that UTC is the default unless an IANA timezone is configured.
  • If the run is late, allow for Actions load. Move the cron minute away from 0 to reduce exposure to the busy start of the hour; exact-time execution is not guaranteed.

A public repository stopped running its scheduled workflow

GitHub automatically disables scheduled workflows in public repositories after 60 days without repository activity. Check whether the workflow was disabled and review the repository’s activity and Actions settings. GitHub schedule behavior

The job cannot launch Chrome

Check the install log for a skipped Puppeteer install script or browser download. Permit the install script or run npx puppeteer browsers install explicitly, then rerun the job.

Rank #4
Raspberry SC15184 Pi 4 Model B 2019 Quad Core 64 Bit WiFi Bluetooth (2GB)
  • Broadcom BCM2711, quad-core Cortex-A72 (ARM v8) 64-bit SoC @ 1. 5GHz
  • 2. 4 GHz and 5. 0 GHz IEEE 802. 11b/g/n/ac wireless LAN, Bluetooth 5. 0, BLE
  • 2 × USB 3. 0 ports, 2 x USB 2. 0 Ports
  • 2 × micro HDMI ports supproting up to 4Kp60 video resolution
  • Micro SD card slot for loading operating system and data storage

The screenshot is blank, incomplete, or missing

  • Check whether navigation returned successfully and whether the page’s content had loaded before the screenshot call.
  • Change the readiness condition to match the site. A page that continually makes network requests may not suit a network-idle wait; wait for the required selector or another site-appropriate condition.
  • Confirm the script writes to the same path named in the artifact step. With if-no-files-found: error, a missing screenshot fails visibly rather than silently uploading nothing.

The workflow syntax or job is failing

Inspect the run logs for the first failing step, then check the workflow file’s syntax, dependency installation, runtime compatibility, and script path. GitHub’s troubleshooting guide covers diagnosing workflow runs and configuration problems. Troubleshooting GitHub Actions workflows

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

Or skip the browser setup

ScreenshotNeo provides a website screenshot API and MCP server. Its API can return a screenshot or PDF from a GET request, without installing Puppeteer and Chrome in the workflow. For example, save a WebP capture of a target URL with cURL:

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.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp

Replace YOUR_API_KEY with your key. See the ScreenshotNeo API documentation for request options and response details.

Best Value
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
  • Includes Raspberry Pi 5 16GB with 2.4Ghz 64-bit quad-core CPU (16GB RAM)
  • Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit Low Noise Bearing System Fan
  • Mega Heat Sink - Black Anodized
  • Cookie banners and consent notices are accepted before capture, and 60+ known consent platforms, newsletter popups, and chat widgets are removed; each step can be turned off.
  • Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed. Responses identify the page verdict and billing status in headers.
  • An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for AI agents and MCP clients such as Claude and Cursor.
  • The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.

Learn about ScreenshotNeo or sign up for 1,000 free screenshots a month, no card required.

FAQ

Can I take a screenshot more than once a day?

Yes. Set the cron expression to the desired interval, subject to GitHub’s documented five-minute minimum for scheduled workflows.

Can Puppeteer capture just one element instead of the whole page?

Yes. Select the element in the page and use its ElementHandle.screenshot() method rather than capturing the page with page.screenshot(). See the Puppeteer screenshot guide.

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

Quick Recap

Bestseller No. 1
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$259.95
Bestseller No. 2
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM); Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
$159.99
Bestseller No. 4
Raspberry SC15184 Pi 4 Model B 2019 Quad Core 64 Bit WiFi Bluetooth (2GB)
Raspberry SC15184 Pi 4 Model B 2019 Quad Core 64 Bit WiFi Bluetooth (2GB)
Broadcom BCM2711, quad-core Cortex-A72 (ARM v8) 64-bit SoC @ 1. 5GHz; 2. 4 GHz and 5. 0 GHz IEEE 802. 11b/g/n/ac wireless LAN, Bluetooth 5. 0, BLE
$87.88
Bestseller No. 5
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
Includes Raspberry Pi 5 16GB with 2.4Ghz 64-bit quad-core CPU (16GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$419.99

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Free tools Windows power users keep installed

One-click scans. No signup required.

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

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.