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 desk8 min

How to Schedule Screenshots of Multiple URLs from a CSV File

Read URLs from a CSV, validate each row, capture pages with Playwright or shot-scraper, and schedule recurring runs with GitHub Actions.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Put one absolute HTTP(S) URL on each row of a CSV, have a script validate and capture each row, then run that script on a recurring schedule. Playwright is a good fit when you need browser control or per-page logic; shot-scraper is a simpler CLI option for declarative batches. GitHub Actions can run either workflow on a cron schedule.

Choose a workflow that fits the pages

Approach Best fit Trade-off
Playwright Pages need authentication, browser actions, custom waits, or per-URL logic. You write and maintain the CSV parser, capture loop, and error handling.
shot-scraper A CLI and configuration file cover the capture needs. CSV rows need to be transformed into its documented multi-shot configuration or processed by a wrapper; arbitrary CSV ingestion is not established as a native feature.

Both methods need a scheduler. The examples below use GitHub Actions, whose scheduled workflow uses POSIX cron syntax, defaults to UTC, can run as often as every five minutes, and executes against the latest commit on the default branch. See GitHub’s schedule event documentation.

As an Amazon Associate I earn from qualifying purchases.

Prepare a reliable CSV

Use a header called url and one absolute URL per non-empty row:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
url
https://example.com/
https://example.org/pricing

Define what counts as a valid row before scheduling. Skip or report blank lines, reject values that are not HTTP(S) URLs, and record failures rather than allowing one bad page to hide the status of the rest of the batch. A useful manifest records the CSV row number, source URL, output filename, capture time, and any error.

#1 Best Overall
ORIA Small Precision Screwdriver Set, Mini Repair Tool Kit for Phone, PC, Computer, Laptop, Xbox, Switch, Glasses, Watch, Electronics, DIY, Pocket Repair Tools with Torx Phillips Flat and More
  • 20PCS Premium CRV Bits: Our mini screwdriver set includes 20 high-hardness, rust-resistant CRV bits, covering 5 common bit types and featuring a variety of sizes. This versatile set is an essential household tool for daily maintenance, DIY projects, and electronics repair
  • Strong Magnetic Design: The handle’s internal magnetic design holds bits firmly in place, while the magnetic bits make it easy to pick up and hold small screws. Say goodbye to the hassle of screws falling into crevices or tight corners—work faster and more efficiently
  • Non-Slip Handle with 360° Rotating Cap: The ergonomic handle provides a secure, sweat-resistant grip to prevent slipping during precision repairs. Combined with the 360° rotating cap, it allows for smooth one-handed operation, great for delicate tasks
  • Practical & Complete Accessories: The magnetic driver bit set also includes a pry bar, triangle pry tool, and SIM card eject pin. This complete set of accessories makes it easy to pry open cases, lift screens, and remove SIM cards
  • Compact & Wide Application: Comes in a travel-friendly case, no more lost bits! This portable repair tool kit is ideal for repairing phones, laptops, PCs, game consoles, and other electronics. Also suitable for eyeglasses, jewelry, and everyday household items

Choose output names that cannot collide. A hostname-only name would overwrite or confuse captures of different paths on the same site. Add a row number, path-derived slug, or run date. Decide whether each run replaces the latest image or preserves an archive.

Capture a CSV with Playwright

Playwright provides browser navigation and screenshot APIs, but CSV parsing and scheduling are your script’s responsibilities. This runnable Python example reads urls.csv, validates each row, saves one PNG per URL, and writes a JSON-lines manifest with success or failure for each entry.

Install the browser runtime

Commit the following as requirements.txt:

playwright

Install the package and Chromium in the runner or development environment:

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.
Rank #2
HIGOLEPC Mini PC Win 11 Pro,Celeron N5095 Mini Computer with Fan,8GB DDR4,256GB ROM,USB-C Mini PC with Screen,Micro PC WiFi 5.0 BT5.2 4K 60Hz Triple Display with Battery,Mini Gaming Computer
  • 【MINI PC With Built-In Fan】The HIGOLE MINI PC equipped with a built-in fan【UPGRADE 1】, ensures optimal temperature control, enhancing both performance and stability. Users can enjoy a seamless experience without experiencing any lag or system crashes caused by overheating. Additionally, the integrated fan effectively reduces noise levels, prolongs the lifespan of the MINI PC, and provides a worry-free and comfortable user experience.
  • 【MINI PC FULL-FEATURED TYPE-C】The HIGOLE MINI PC, featuring a convenient and versatile Full Functionality TYPE-C port【UPGRADE 2】, allows for effortless connectivity and compatibility with a wide range of devices. Users can easily transfer data, connect peripherals, and even charge their devices, including power banks. This versatility enhances convenience and flexibility in usage, resulting in increased productivity and seamless integration within the digital ecosystem.
  • 【MINI PC WITH Touch Screen&2500 mAh battery】The HIGOLE MINI PC can be used for touch screen business office, leisure and entertainment,easy use . HIGOLE MINI PC can also be used to remotely control other micro PCs or smart home systems using remote desktop protocol.This mini computer is equipped with a 2500mAh battery, allowing you to use it anytime and anywhere for extended work and video watching.
  • 【MINI Computer Win 11】Micro PC with latest Win 11 Pro and a valid license, which is support to remote desktop access, supports Win 11 pro upgrade. supports Win 10, Support IOT building,Ideal for developers and programmers running dual custom OS. 【Extra large memory 】8GB DDR4,128GB Upgrade 256GB Emmc【UPGRADE 3】.
  • 【Celeron N5095 CPU】This small mini PC, features the Faster Celeron N5095 processor【UPGRADE 4】,J4125 Upgrade N5095 with CPU/GPU throttling. It's a competent quad-core that does a decent job for lightweight tasks, with a base operating frequency of 2.0 GHz/s to 2.9GHz (4MB cache). Drawing under 10 watts of power.Its metal body helps to expel heat quickly and the device is completely silent, improving efficiency.With the latest wireless connectivity.The tiny PC with WiFi 5.0,dual-band WiFi2.4G/5.0G,it provides speeds up to 450Mbps/2.4GHz and 1000Mbps/5GHz. Gigabit Ethernet supports 10/100/1000Mbps,Bluetooth 4.2 fast data transfer speed up to 2Mbps.
python -m pip install -r requirements.txt
python -m playwright install --with-deps chromium

Save the capture script

Save this as capture_csv.py. It takes viewport screenshots by default; pass --full-page to capture the full scrollable page. Each row gets a distinct output name, even when URLs share a host.

import argparse
import csv
import json
import re
from datetime import datetime, timezone
from pathlib import Path
from urllib.parse import urlparse

from playwright.sync_api import sync_playwright


def valid_url(value):
    try:
        parsed = urlparse(value)
        return parsed.scheme in ("http", "https") and bool(parsed.netloc)
    except ValueError:
        return False


def safe_name(value):
    name = re.sub(r"[^A-Za-z0-9._-]+", "-", value).strip("-._")
    return name[:80] or "page"


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("csv_file", nargs="?", default="urls.csv")
    parser.add_argument("--out", default="screenshots")
    parser.add_argument("--full-page", action="store_true")
    parser.add_argument("--timeout-ms", type=int, default=45000)
    args = parser.parse_args()

    output = Path(args.out)
    output.mkdir(parents=True, exist_ok=True)
    manifest = output / "manifest.jsonl"
    rows = []
    with open(args.csv_file, newline="", encoding="utf-8-sig") as file:
        reader = csv.DictReader(file)
        if not reader.fieldnames or "url" not in reader.fieldnames:
            raise SystemExit("CSV must have a header named 'url'")
        for row_number, row in enumerate(reader, start=2):
            url = (row.get("url") or "").strip()
            if not url:
                rows.append((row_number, url, "", "blank URL"))
            elif not valid_url(url):
                rows.append((row_number, url, "", "invalid HTTP(S) URL"))
            else:
                host = safe_name(urlparse(url).hostname or "page")
                rows.append((row_number, url, f"{row_number:04d}-{host}.png", None))

    with sync_playwright() as playwright, open(manifest, "w", encoding="utf-8") as log:
        browser = playwright.chromium.launch()
        page = browser.new_page(viewport={"width": 1440, "height": 900})
        for row_number, url, filename, error in rows:
            record = {
                "row": row_number,
                "url": url,
                "file": filename or None,
                "captured_at": datetime.now(timezone.utc).isoformat(),
            }
            if error:
                record["error"] = error
            else:
                try:
                    response = page.goto(
                        url, wait_until="networkidle", timeout=args.timeout_ms
                    )
                    if response is not None and response.status >= 400:
                        raise RuntimeError(f"HTTP {response.status}")
                    page.screenshot(
                        path=str(output / filename),
                        full_page=args.full_page,
                    )
                    record["status"] = "captured"
                except Exception as exc:
                    record["status"] = "failed"
                    record["error"] = str(exc)
            log.write(json.dumps(record, ensure_ascii=False) + "n")
            log.flush()
        browser.close()


if __name__ == "__main__":
    main()

Run it locally with:

python capture_csv.py urls.csv --out screenshots --full-page

The script records an individual error and moves on to the next URL. Review screenshots/manifest.jsonl to detect partial batches; a scheduled run should not be treated as complete merely because the workflow itself finished.

Use shot-scraper for a configuration-driven batch

shot-scraper is designed for automated website screenshots and documents multi-shot configuration. Its documentation does not establish arbitrary CSV parsing as built-in, so convert the CSV rows to the documented configuration format or write a wrapper that invokes the tool once per validated row. See the shot-scraper documentation for current CLI and batch configuration details.

Rank #3
5.5" Touchscreen Mini PC Win 11 Pro, N5095 Mini Desktop Computer with Quiet Cooling Fan, 16GB RAM 256GB ROM Micro PC with Full-Featured USB-C, HDMI 4K 60Hz Triple Display Mini Computer WiFi BT5.0
  • 【One Compact PC, Multiple Applications】Pre-installed with Windows 11 Pro and Linux-ready for flexible system deployment. Built-in Wi-Fi 5, Bluetooth 5.0, and a G-Sensor support convenient wireless connectivity and automatic screen rotation. The responsive touchscreen is ideal for remote meetings, smart-home control, self-service kiosks, industrial HMI, and inventory management. Designed for everyday and light-duty applications, it is best suited for essential tasks rather than heavy multitasking, gaming, or video rendering
  • 【Portable Power for Work Anywhere】Stay productive without being tied to a power outlet. The built-in 2500mAh rechargeable battery provides up to 4.5 hours of runtime, while the lightweight 0.32 kg design makes it easy to carry wherever you go. From home and office use to field debugging, equipment inspections, and on-site tasks, enjoy the freedom to work wherever you need
  • 【Touchscreen Mini PC, No Monitor Required】Enjoy a complete computing experience without the need for a separate display. This compact 5.5-inch IPS touchscreen mini PC features a 720×1280 resolution, Intel Celeron processor, 16GB RAM 256GB eMMC storage, and Windows 11 Pro. Ideal for everyday tasks like web browsing, document editing, and media playback, while also fitting seamlessly into digital signage, kiosks, POS systems, and light-duty industrial applications
  • 【Dual-Display Support & Extensive Connectivity】Expand your workspace with dual-display output through HDMI up to 4K@30Hz and Type-C video output. A full selection of ports—including Gigabit Ethernet, four USB 3.0 ports, a TF card slot, and a PD charging port—makes it easy to connect keyboards, external storage, network devices, and other peripherals. Whether you're creating a compact home workstation, setting up a POS system, or integrating it into an industrial control environment, this mini PC provides the connectivity you need
  • 【Intel Celeron N5095 Processor with Quiet Cooling】Powered by a quad-core Intel Celeron N5095 processor with speeds up to 2.9GHz and 4MB cache, this compact mini PC delivers smooth and reliable performance for everyday computing. The built-in quiet cooling fan helps dissipate heat efficiently during extended use while keeping operating noise to a minimum

For file naming, provide explicit outputs when you need predictable names. The documentation notes that if its default output name already exists, shot-scraper chooses a numbered suffix; this can be useful for avoiding overwrite but may not match an archive or latest-only policy.

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

Schedule the script with GitHub Actions

Commit urls.csv, capture_csv.py, and requirements.txt to a repository, then add .github/workflows/screenshots.yml. This example runs daily at 06:00 UTC, installs the dependencies, captures the CSV, and uploads the output directory as an artifact.

name: Scheduled screenshots

on:
  schedule:
    - cron: '0 6 * * *'
  workflow_dispatch:

jobs:
  capture:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - run: python -m pip install -r requirements.txt
      - run: python -m playwright install --with-deps chromium
      - run: python capture_csv.py urls.csv --out screenshots --full-page
      - uses: actions/upload-artifact@v4
        with:
          name: screenshots
          path: screenshots/
          if-no-files-found: error

Change the cron expression to the time and frequency you need. GitHub Actions schedule times are UTC, and scheduled workflows run from the latest commit on the default branch. Its documentation gives the cron format, minimum interval, and schedule behavior at the schedule event reference. A shot-scraper workflow example also shows installing the tool and browser, running configured captures, and optionally committing resulting files: shot-scraper documentation.

Rank #4
RANSANX 3.5 Inch IPS USB Mini Screen No Installation AIDA64 Pc Case
  • Parameters: This is a new type of mini computer chassis screen. There is no need to install AIDA64, and only a USB cable is required to detect whether the running parameters are normal. Display area: 49X74 (mm), overall size: 55X85 (mm), resolution: 320X480, thickness: 7~ 8 (mm), viewing angle: IPS full viewing angle, interface: USB-TYPEC, shell material: metal
  • FAQ: Unable to download URL and unzip, use tutorial, what system is supported? Please don't worry, we will upload video tutorial in the link, which will be reflected in the video. At the same time, we will have product instructions. Finally, our products are compatible and easy to operate
  • Features: Support horizontal and vertical screen switching, 0°and 180°two options, energy saving and environmental protection, automatic screen off after shutdown, eye comfort, stepless brightness adjustment
  • Function: Displays various data of CPU, memory, hard disk and other hardware, so that users can grasp the computer operation status in time. Through special customized chips, it supports dynamic wallpaper and other forms, can add visual effects, and only takes up a small amount of CPU resources. Compared with the traditional HDMI secondary screen, it only needs a USB data cable to connect, avoiding various problems such as cable clutter
  • Packing list: 1 x 3.5-inch screen; 1 x USB data cable; 1 x adjustable bracket; 1 x product manual; 1x Acrylic double-sided tape;1 x packaging box. If you encounter the above problems or other problems about the product, the information we provide cannot solve them for you. Please contact us. We are online 24 hours a day and will serve you as soon as possible.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Choose capture scope and make runs comparable

Viewport or full page

A viewport capture is bounded and generally quicker. A full-page image includes the scrollable document and can be much taller and larger. Some sites load content only after scrolling, waiting, or interaction; test those pages specifically rather than assuming a full-page option triggers every site’s lazy-loading behavior.

Wait for the page you need

The example waits for network idle, which can time out on pages with persistent network activity. For pages with predictable application behavior, a selector-based readiness condition can be more reliable; choose a condition that indicates the content you intend to capture is visible. Avoid treating a timeout as a successful screenshot.

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

Keep the environment stable

Playwright notes that screenshot rendering can differ with the host operating system, browser version, settings, hardware, power conditions, and headless mode. Keep the runner and browser version consistent when comparing captures over time. A visual difference is evidence of a difference in rendered output, not proof by itself that the website changed.

Best Value
HIGOLEPC Mini PC 12th Gen N95 16GB RAM 256GB ROM, 4G Data Mini PC with Screen Dual 2.5GbE LAN Full-Functional USB-C Mini Computer with Battery, WiFi 5 BT 5.0 4K Display HDMI Desktop Computer
  • 【12th Gen Alder Lake-N95 & Fan design】The HIGOLEPC Mini PC equipped with the powerful 12th Gen Alder Lake-N95 processor. Featuring 4 cores and 4 threads, with speeds of up to 3.4GHz, this micro PC delivers a 30% performance boost compared to its predecessors, the celeron N5095 and N5105. The design of the cooling fan helps this computer dissipate heat and maintain a stable state..With a low TDP of just 8W, it achieves robust performance at an exceptionally low power consumption.
  • 【High-Speed Performance & Expandable Storage&4G data transmission】Enjoy faster computing with 16GB of DDR4 RAM and 256GB of storage,Ideal for home working, business offices, IOT, school education, and billboards. Expand storage effortlessly with a Micro SD card slot (up to 512GB).Supporting the use of 4G for data transfer. Please note, this 4G data transmission functionality does not support calling features.
  • 【Triple Video Display & Full-featured TYPE-C】Maximize your visual experience with Triple Video display supported by the ultra HD graphics card (4K@60Hz). One HDMI ports and a full-function USB-C allow simultaneous dual display, enhancing your work efficiency. The USB-C PD 3.1 port supports 4K display, data transfer, and power input, reducing cord clutter and optimizing your workspace.
  • 【Wi-Fi 5 & Bluetooth 5.0 & Dual 2.5G Ethernet network】 HIGOLEPC mini PC incorporates advanced Wi-Fi 5 and Bluetooth 5.0 technologies, ensuring reliable dual-band connectivity (2.4GHz and 5GHz). With dual 2.5G ethernet network,You can manually install firmware for this mini PC to use it as a NAS,software router,home server or network firewall with very powerful features.Enjoy the convenience of a portable desktop PC anytime, anywhere, with swift connectivity and adaptable charging options.
  • 【Pre-installed OS System & Large capacity battery 】 This mini PC comes with the latest Win11 Pro system and also supports other types of systems such as Debian, Ubuntu, and Linux. All these systems have undergone stable testing to make your mini PC more convenient to use. This computer is equipped with a high-capacity battery of 5000mAh, which can help address the issue of low power. Its battery life exceeds 3 hours, so you can use it to watch videos, listen to music, or work.

Troubleshoot incomplete or unexpected captures

Symptom Likely cause What to do
Script exits before processing URLs Missing url CSV header, unreadable file, or malformed CSV. Check that the first row contains url, save as UTF-8, and verify the file path passed to the script.
Some rows have no image Blank or invalid URL, blocked automation, authentication, HTTP error, or navigation timeout. Inspect that row’s manifest record; correct the URL, provide the required authentication flow, or adjust the timeout/readiness strategy.
Screenshot is blank or misses content Page not ready, delayed content, or content appears only after scrolling or interaction. Wait for a meaningful selector or perform the required action before capture; test long and dynamic pages separately.
Page navigation hangs at network idle Persistent network requests prevent the selected readiness state. Use a page-specific selector or another appropriate wait condition instead of relying on network idle for that target.
Images overwrite or get confusing suffixes Output names collide, or default naming behavior differs from the archive policy. Include row number, path slug, or run date in explicit names and decide whether runs replace or retain prior captures.
Scheduled workflow does not run when expected Cron time was interpreted as local time, workflow changes are not on the default branch, or scheduled execution is delayed. Use UTC when setting the cron expression, verify the workflow is on the default branch, and inspect the Actions run history.

Protect outputs and control operational cost

A failed URL should be visible as a per-row failure, not silently omitted from a seemingly successful batch. Keep the manifest with the images so you can identify which targets failed and when. If pages require authentication, store credentials in the scheduler’s secret mechanism rather than in the CSV or source code.

Check whether screenshots contain private or authenticated material before retaining or publishing them. Avoid committing sensitive captures to a public repository; restrict artifact access and retention as appropriate. Full-page images can consume more storage than viewport captures, so set an archive and retention policy that matches your comparison needs.

Or skip the browser setup

ScreenshotNeo provides a screenshot API and MCP server. One GET request takes a URL and returns an image or PDF. Its consent cleanup accepts cookie banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each cleanup step can be turned off. Bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and responses identify the page verdict and billing status with X-Page-Verdict and X-Billed headers. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf to AI agents including Claude, Cursor, and other MCP clients.

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

For a CSV batch, keep the same validation and scheduling loop, but make one API request per valid URL. This cURL example captures a single URL; put it inside your row-processing loop and substitute each validated URL. Find the available request options in the ScreenshotNeo API documentation.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

ScreenshotNeo plans include 1,000 shots per month free with no card; paid plans start at $5 for 3,000 shots. See ScreenshotNeo for the service and sign up free for 1,000 screenshots a month with no card.

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 *

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
PC Slower Than It Used to Be?Free scan - under a minute
Outdated Drivers Are Slowing You DownFree scan - exact matches

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.