Automation and scraping · Edition No. 3 · 28 Aug 2026

simonw/shot-scraper

A command-line tool that takes screenshots of web pages, records short demonstration videos, and pulls data out of pages.

← Automation and scrapingRead the whole edition →
02

simonw/shot-scraper

💎 hidden gem
shot-scraper: screenshots on demand. One file lists every shot, one command takes them all again.

2.6k stars · Apache-2.0 · 1.11 (2026-07-12) · Track this in Rising ↗

One YAML file regenerates every screenshot on the site — and since v1.10 it records WebM demo clips too.

Verified27 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive90

Last code pushed 14 Oct 2026, 14 days before this check.

Releases85

Latest release 1.12 on 13 Sep 2026.

Maturity70

Public since March 2022, a little over 4 years.

Adoption68

2,597 stars and 134 forks.

Activity25

4 commits and 4 new issues in the last 90 days.

Community60

23 contributors. 3 pull requests merged in 90 days.

Security40

No security policy file says how to report a problem. No published security advisories.

Licence Apache-2.0: permissive: use it for anything, keep the noticeSetup effort 2 of 5Payoff 4 of 5
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 3.

▶Repo detailsthe review · specs · pros & cons · install

What it does

You give it a web address and it saves a picture of that page, named after the site. You can instead give it a file listing many shots, each with its own address, size, waiting rules and output name, and it takes all of them in one run. It can run your own instructions inside the page before the picture is taken, which is how you dismiss a cookie banner or log in first. The shot-scraper javascript command runs code against a page and prints what it returns, so the same tool reads data as well as photographs it. It can record short videos of a scripted interaction. It is built on a browser automation library, which is why it needs its own browser installed once, and the project ships a template repository so the whole thing can run on a schedule without anything installed on your own machine. What it does not do is state any limits at all in its README, and it is not a visual testing tool: it takes the pictures and compares nothing.

Why it matters

Who it suits. Anyone who keeps pictures of a working program on a website, in documentation, or in a README, and who has watched them quietly become pictures of software that no longer exists. A stale screenshot reads as an abandoned project to a first-time visitor, and this is the cheapest way to make that impossible. It also suits anyone who needs the same page photographed in several languages or screen sizes, since that is a few more lines in the same file. Skip it if you need two pictures a year, because taking those by hand is quicker than learning this.

Verdict. Worth an hour, and the easiest hidden gem in the set at 2,566 stars. The reason to take it seriously is that the description is a file rather than a habit: once the shots are written down, nothing depends on anyone remembering to take them again. Three honest notes. The first run downloads a headless browser of a few hundred megabytes, so plan the disk. That browser is memory-hungry, which makes this a job for a workstation or a scheduled runner rather than a small machine that is also serving visitors. And getting a signed-in page photographed correctly takes a fiddly first hour of scripting. Release 1.12 landed on 13 September 2026 and code on 12 July 2026, from a maintainer who has kept it going since March 2022.

Stars2.6k
LicenceApache-2.0
Latest1.11 (2026-07-12)checked 7 Sep 2026
Written inPython
RunsLocally, on your own machine
Summary (Key Points)from the README
Key features
  • Screenshots: Takes screenshots of web pages from the command line, saving them to a named file such as datasette-io.png.
  • Video demos: Records video of web pages for demos.
  • JavaScript scraping: Runs JavaScript against a page to scrape its content with `shot-scraper javascript`.
  • Playwright foundation: Built on Playwright, as described in the linked background article.
  • GitHub Actions template: The shot-scraper-template repository creates your own repo that takes screenshots without installing anything locally.
  • Documentation and tutorial: Full documentation covers the many screenshot options, and a tutorial shows how the Datasette docs automate screenshots.
  • Real-world use: Examples include a Twitter bot that publishes news homepage screenshots and dashboards for email newsletters at Reuters.
Ways to install
Platform or methodWhat it needsEffort
pip (command-line tool)Python with pip, installed on your machineLow: one install command
shot-scraper-template (GitHub Actions)A GitHub account and a new repository created from the templateLow: no local software needed
Important
  • No system requirements listed: The README does not name supported operating systems, Python versions or browser requirements, so check the full documentation before installing.
  • Options live in the full docs: The README says many more options exist but gives details only in the linked "Taking a screenshot" documentation.
  • Playwright dependency: Because the tool is built on Playwright, its behaviour depends on that underlying library.
  • Example uses are not guarantees: The listed projects show what others have built with the tool; the README makes no promises about performance or reliability.

Written by an AI model from the project’s README; not part of the review, and it can be wrong.

Setup effort
2 / 5
Payoff
4 / 5
Good
  • Apache-2.0 and pure Python, so it drops into an existing environment without a new runtime.
  • One file describes every shot, so the whole set is remade by one command and can run on a schedule.
  • It can act on the page first, which means signed-in screens and dismissed banners are reachable.
Watch for
  • The first install pulls down a headless browser of a few hundred megabytes.
  • That browser wants a lot of memory, so it is a poor fit for a small machine with visitors on it.
  • The README states no limitations and no supported Python versions, so the first hour is partly trial and error.
Install
python3 -m venv venv
source venv/bin/activate
pip install shot-scraper
shot-scraper install                  # downloads the browser, once
shot-scraper https://example.com/     # one picture
shot-scraper multi shots.yml          # every picture described in the file
Screenshots
simonw/shot-scraper: GitHub preview card

On Stack Radar: Data & Research › Web Scraping & Crawling › Browser Automation.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.