October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk7 min

How to Upload Recurring Website Screenshots to Amazon S3

Capture a website on a schedule with Playwright and GitHub Actions, authenticate to AWS using OIDC, and store screenshots in S3 with a deliberate key and retention plan.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use a scheduled browser job to render the page, save a screenshot, and upload it to a private S3 bucket. A practical setup is Playwright running in GitHub Actions on a cron schedule, with GitHub OIDC letting the workflow assume a narrowly scoped AWS role instead of storing long-lived AWS credentials. This guide covers the capture choice, AWS permissions, scheduling, retention, and a complete workflow.

Choose what the screenshot should show

Before automating the capture, decide whether each file should show the current browser viewport, the entire scrollable page, or one component. Playwright can save a screenshot to a file or return its image buffer; a locator can capture a specific element.

As an Amazon Associate I earn from qualifying purchases.

Capture Playwright setting Best for Trade-off
Viewport page.screenshot({ path: 'screenshot.png' }) A consistent view of the page at a chosen viewport size. Content outside the visible viewport is not included.
Full page page.screenshot({ path: 'screenshot.png', fullPage: true }) A record of the full scrollable page. The image can be very tall; page layout and lazy-loaded content may affect what appears.
Element locator.screenshot({ path: 'screenshot.png' }) A chart, card, or other specific component. The selected element must exist and be visible when the capture runs.

See Playwright’s screenshot documentation for the available screenshot options. In the example below, change FULL_PAGE or the capture call if your desired artifact differs.

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

Prepare AWS access without storing long-lived keys

Configure GitHub as an OpenID Connect (OIDC) identity provider in AWS, then create an IAM role whose trust policy accepts only the GitHub repository and branch that should run the job. The workflow requests an OIDC token and exchanges it for short-lived AWS credentials by assuming that role. This avoids keeping persistent AWS access keys in repository secrets.

#1 Best Overall
Sandisk 2TB Extreme Portable SSD, Up to 1050MB/s, USB-C, USB 3.2 Gen 2, IP65 Water and Dust Resistance, Updated Firmware, External Solid State Drive, SDSSDE61-2T00-G25
  • Get NVMe solid state performance with up to 1050MB/s read and 1000MB/s write speeds in a portable, high-capacity drive(1) (Based on internal testing; performance may be lower depending on host device & other factors. 1MB=1,000,000 bytes.)
  • Up to 3-meter drop protection and IP65 water and dust resistance mean this tough drive can take a beating(3) (Previously rated for 2-meter drop protection and IP55 rating. Now qualified for the higher, stated specs.)
  • Use the handy carabiner loop to secure it to your belt loop or backpack for extra peace of mind.
  • Help keep private content private with the included password protection featuring 256‐bit AES hardware encryption.(3)
  • Easily manage files and automatically free up space with the SanDisk Memory Zone app.(5). Non-Operating Temperature -20°C to 85°C
  1. In AWS IAM, configure the GitHub OIDC provider and create a role trusted by the intended repository and branch context. Follow GitHub’s AWS OIDC setup guidance; verify the current trust-policy details for your repository before deployment.
  2. Give the role only s3:PutObject access to the destination object prefix, such as arn:aws:s3:::YOUR-BUCKET/screenshots/*. The precise resource ARN depends on your bucket and key layout. Additional permissions may be necessary if you deliberately use features such as object ACLs, tags, Object Lock, or customer-managed KMS encryption.
  3. In the GitHub workflow, grant id-token: write and use aws-actions/configure-aws-credentials to assume the role. Pin third-party actions to reviewed versions or commit SHAs according to your supply-chain policy. GitHub identifies its example AWS credentials action as third-party, not GitHub-certified.

S3 objects are private by default and newly uploaded objects are encrypted by default. Keep screenshots private unless publication is intentional: captures can contain account or customer information, and default encryption does not replace access control. See the AWS documentation on S3 access and public access controls and default encryption.

Create the scheduled Playwright workflow

The following example captures a public page once each day at 03:17 UTC, then uploads the PNG to S3. Replace the repository, role, bucket, target URL, and key prefix. The workflow uses a timestamped key so each successful run creates a separate historical object.

Save this file as .github/workflows/website-screenshot.yml and ensure that the workflow file is on the repository’s default branch; GitHub schedule events run from that branch. The third-party action references below use version tags for readability—review and pin them to commit SHAs if that is your policy.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sandisk 1TB Portable SSD, Up to 800MB/s Read Speeds, Black (Old Model)
  • Solid state performance with up to 800MB/s read speeds in a portable drive. (Based on internal testing; performance may be lower depending on host device, interface, usage conditions and other factors. 1MB=1,000,000 bytes.)
  • Back up your content and memories on a storage solution that fits seamlessly into your mobile lifestyle.
  • Take it with you on your adventures—up to two-meter drop protection means this durable drive can take a beating. (Based on internal testing.)
  • Secure it to your belt loop or backpack for extra peace of mind thanks to the tough rubber hook.
  • From Sandisk, a brand professional photographers trust to take on assignments.
name: Recurring website screenshot

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

permissions:
  contents: read
  id-token: write

jobs:
  capture:
    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'

      - name: Install Playwright and browser
        run: |
          npm install --no-save playwright
          npx playwright install --with-deps chromium

      - name: Capture page
        env:
          TARGET_URL: https://example.com
          FULL_PAGE: 'true'
        run: |
          node --input-type=module <<'NODE'
          import { chromium } from 'playwright';
          const browser = await chromium.launch({ headless: true });
          try {
            const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } });
            await page.goto(process.env.TARGET_URL, { waitUntil: 'networkidle', timeout: 60000 });
            await page.screenshot({ path: 'screenshot.png', fullPage: process.env.FULL_PAGE === 'true' });
          } finally {
            await browser.close();
          }
          NODE

      - name: Configure AWS credentials through OIDC
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/github-screenshot-uploader
          aws-region: us-east-1

      - name: Upload screenshot
        env:
          AWS_REGION: us-east-1
        run: |
          stamp="$(date -u +'%Y/%m/%d/%H%M%S')"
          aws s3 cp ./screenshot.png "s3://YOUR-BUCKET/screenshots/${stamp}.png" 
            --region "$AWS_REGION"

GitHub schedule expressions use UTC unless a timezone is specified. The example’s 03:17 UTC timing avoids the top of the hour, when scheduled workflows are more likely to be delayed. GitHub notes that high load can delay scheduled runs and that queued runs can be dropped, so this is suitable for recurring snapshots, not a precision clock or guaranteed monitoring interval. See GitHub’s schedule event documentation.

Use local wall-clock time only when you need it

GitHub also supports an IANA timezone for scheduled workflows. Local schedules can shift in UTC when daylight-saving time changes. Confirm the timezone support and syntax in the live GitHub documentation, and decide whether a local wall-clock time or a fixed UTC time is the better operational choice.

Wait for the right page state

networkidle is a useful starting point for pages that settle after network requests finish, but it is not a universal signal that the content you need is ready. If a page renders the relevant content later, wait for a specific locator or use a deliberate delay before taking the screenshot. If the page requires authentication, its login/session flow is site-specific; do not assume that a public-page example handles it.

Rank #3
SSK Portable SSD 500GB External Solid State Hard Drive USB C Up to 1050MB/s
  • Capacity Display Variance: 500GB external ssd often appears as around 465GB on Windows. MacOS can show full 500 GB capacity. This is binary calculation difference and doesn’t affect SSD hard drive actual physical storage
  • 1050 MB/s Speed: Instantly access to your files with blazing-fast 10Gbps external SSD read up to 1050MB/s and write up to 1000MB/s. LED Light indicates USB SSD instant activity
  • Data Security: Solid state drives S.M.A.R.T. health diagnostics​ and adaptive TRIM optimizing data block management ensures consistent write speeds and extends the longevity of the portable SSD
  • USB-C & USB-A Cable: Both cables featuring rapid USB 3.2 Gen2, this USB SSD effortlessly bridges devices, enabling seamless cross-platform file transfers and backup between computers, smartphones, tablets and iPhone
  • Always Fast: No slowdowns for large file transfers. With SLC caching (25% of current available capacity allocated as high-speed cache), this external SSD delivers steady 10Gbps for transfers within the cache capacity

Choose an S3 key and retention policy

A unique key preserves a history; a stable key such as screenshots/latest.png replaces the prior current image. Pick the naming scheme based on whether you need an audit trail, a latest-state artifact, or both. The example uses UTC path components to make retained captures easy to browse.

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

If old screenshots should move to a lower-cost storage class or be deleted, configure an S3 Lifecycle rule for the relevant prefix. Lifecycle transitions and expiration apply to existing as well as newly matching objects, but deletion is not an exact real-time timer. Check bucket versioning too: expiration behavior differs when noncurrent versions are retained. Consult AWS S3 Lifecycle documentation before setting a retention rule.

Or skip the browser setup

ScreenshotNeo can return a screenshot from one GET request, without provisioning a browser runner. It accepts a URL and can return PNG, JPEG, WebP, or PDF; you can save the response and upload it to S3 using the same AWS identity and destination policy described above. The parameter names used by other screenshot APIs also work, which can simplify a switch.

Rank #4
Sale
Sandisk 1TB Extreme Portable SSD, Up to 2000MB/s Transfer Speeds-New Model
  • NEARLY 2X FASTER THAN OUR PREVIOUS GENERATION(8) – move 1,000 high-res photos in under 60 seconds(6) with up to 2000MB/s transfer speeds(2).
  • IP65 RATING AND UP TO 3M DROP PROTECTION(3) – protects against spills and drops.
  • POCKET-SIZED – fits easily in pockets and small bags.
  • SPACE TO OWN YOUR AI CONTENT – speed and capacity to download your high-res clips and photo edits.
  • 256-BIT AES ENCRYPTION(4) – helps keep private files secure with password protection.
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 request options. Cookie banners are accepted and removed before capture, as are known newsletter popups and chat widgets; 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. An MCP server exposes take_screenshot, get_page_info, and capture_pdf to AI agents and MCP clients. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for ScreenshotNeo’s free plan.

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

Troubleshoot common failures

  • The workflow never starts: Confirm the workflow file is committed to the default branch and that the cron expression is valid. A scheduled event is not guaranteed to start exactly on time; GitHub may delay or drop runs under load.
  • AWS reports that it cannot assume the role: Check that the workflow grants id-token: write, the OIDC provider is configured, and the role trust policy matches the repository and branch context actually running the workflow.
  • The upload returns AccessDenied: Verify the role’s s3:PutObject permission covers the exact bucket and object prefix. If using a feature such as a customer-managed KMS key, check for its associated permissions as well.
  • The screenshot is blank or incomplete: Check the target URL and browser navigation result, then replace a generic network-idle wait with a selector or delay that matches the page’s rendering behavior. Confirm that the desired viewport, full-page, or element capture mode is selected.
  • The job times out on navigation: The page may load slowly or keep network connections open. Review the navigation timeout and choose a meaningful readiness condition for that page rather than treating any one wait state as universal.
  • The object is unexpectedly public or unavailable: Check bucket and object access policies, public-access settings, and the credentials or role used to read it. Encryption at rest alone does not grant or restrict a reader’s access.
  • Old files are not removed when expected: Review the lifecycle rule’s prefix filters, versioning configuration, and lifecycle timing; expiration is not a precise scheduled deletion.

Reliability, security, and cost considerations

Scheduled captures create browser compute and S3 storage and request usage. A useful estimate depends on your AWS region, capture frequency, image size, retention duration, request volume, and storage class; use the current AWS pricing information for those inputs rather than assuming a universal per-screenshot cost. No benchmark or fixed cost follows from the workflow alone.

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

Keep the AWS role restricted to the intended repository and branch, scope S3 writes to the required object prefix, and do not place credentials in filenames, command-line arguments, or public object URLs. Review the target site’s authentication restrictions, anti-automation terms, consent requirements, and rules for retaining its content before scheduling captures.

GitHub Actions scheduling is best-effort rather than a precise monitoring clock. If you need dependable alerting or exact capture intervals, choose a scheduler or monitoring service whose documented guarantees meet that requirement.

Best Value
Sale
Seagate 2TB Portable Hard Drive | USB 3.0 (STGX2000400) | Everyday HDD storage. Plug-and-play backup. Windows & macOS. Adobe CC trial included. 1-Year Warranty
  • Easily store and access 2TB to content on the go with the Seagate Portable Drive, a USB external hard drive
  • Designed to work with Windows or Mac computers, this external hard drive makes backup a snap just drag and drop
  • To get set up, connect the portable hard drive to a computer for automatic recognition no software required
  • This USB drive provides plug and play simplicity with the included 18 inch USB 3.0 cable
  • The available storage capacity may vary.

Frequently Asked Questions

Can I trigger a capture manually as well as on a schedule?

Yes. The example includes workflow_dispatch, which exposes a manual run option in GitHub Actions.

Can the same workflow keep only the most recent screenshot?

Yes. Change the upload destination to a stable key such as s3://YOUR-BUCKET/screenshots/latest.png; each successful upload replaces that object’s contents.

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

Quick Recap

Bestseller No. 2
Sandisk 1TB Portable SSD, Up to 800MB/s Read Speeds, Black (Old Model)
Sandisk 1TB Portable SSD, Up to 800MB/s Read Speeds, Black (Old Model)
From Sandisk, a brand professional photographers trust to take on assignments.
$188.90
SaleBestseller No. 4
Sandisk 1TB Extreme Portable SSD, Up to 2000MB/s Transfer Speeds-New Model
Sandisk 1TB Extreme Portable SSD, Up to 2000MB/s Transfer Speeds-New Model
IP65 RATING AND UP TO 3M DROP PROTECTION(3) – protects against spills and drops.; POCKET-SIZED – fits easily in pockets and small bags.
$249.17
SaleBestseller No. 5
Seagate 2TB Portable Hard Drive | USB 3.0 (STGX2000400) | Everyday HDD storage. Plug-and-play backup. Windows & macOS. Adobe CC trial included. 1-Year Warranty
Seagate 2TB Portable Hard Drive | USB 3.0 (STGX2000400) | Everyday HDD storage. Plug-and-play backup. Windows & macOS. Adobe CC trial included. 1-Year Warranty
This USB drive provides plug and play simplicity with the included 18 inch USB 3.0 cable; The available storage capacity may vary.
$129.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 *

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.