Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run Scan×
FREEDOM251

Freedom251 › Blog › GitHub Actions

How to Schedule Recurring Screenshots of Indian Real Estate Listings

By Freedom251 Team · · 9 min read

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

Use a browser script to capture each listing, then a scheduler to run it at your chosen interval. A practical DIY setup is Playwright with GitHub Actions: keep a stable list of authorized listing URLs, save each image under a UTC timestamp, and retain run logs alongside the files. A screenshot records what one browser session displayed; it does not establish that a listing is accurate or that a property claim is true.

Choose a capture method

Recurring screenshots involve two separate jobs: a browser renders and captures a page, and a scheduler starts that browser script on a repeating cadence. For control over URLs, capture scope, and image handling, use Playwright with GitHub Actions. A managed service may suit you better if you do not want to maintain a browser runtime; compare its current schedule options, retention, alerts, privacy handling, target-page compatibility, quotas, and cost before relying on it.

As an Amazon Associate I earn from qualifying purchases.

Start with a small set of specific listing URLs that you are authorized to view. A single listing page is more useful for tracking a property than a broad search page whose results may reorder. Keep a human-readable label for every URL, and review each portal’s current terms, account rules, and access restrictions before automating. There is no universal permission rule established for all Indian property portals.

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

Set up a repeatable Playwright capture

Install Playwright

The example below uses Python and Chromium. Create a project folder, then install the package and browser:

#1 Best Overall
Sale
Motorola Moto g - 2026 | Unlocked | Made for US 4/128GB | 50MP Camera | Pantone Slipstream, Cellular_Phone
  • Universal unlocked. Compatible with all major U.S. carriers, including Verizon, AT&T, T-Mobile and other prepaid carriers.
  • Super-bright, super-smooth 6.7" display. See your screen clearly even outdoors in sunlight, and enjoy seamless views with a fast-refreshing 120Hz display.*
  • AI-powered camera system. Take stunning photos in any light with the 50MP camera**, look your best with a 32MP selfie cam*****, and capture extreme close-ups.
  • Superfast 5G performance. Unleash your entertainment at 5G speed*** with the MediaTek Dimensity 6300 chipset and up to 12GB of RAM with RAM Boost****.
  • Long-lasting battery + TurboPower charging. Power through day after day with a 5200mAh battery, then get hours of power in just minutes.****
  1. python -m venv .venv
  2. source .venv/bin/activate (Windows PowerShell: .venvScriptsActivate.ps1)
  3. pip install playwright
  4. python -m playwright install chromium

Playwright supports viewport, element, and full-page screenshots. Its screenshot API also supports options such as image type, quality, scale, masking, and style injection; use the official Playwright screenshot documentation for the current API details.

Keep target URLs and labels in configuration

Create listings.json with only the pages you intend to monitor:

[
  {
    "id": "example-flat-01",
    "url": "https://example.com/listing/your-authorized-listing"
  }
]

Replace the example with a real listing URL you are permitted to access. Avoid putting account passwords, session cookies, or other secrets in this file or in a public repository.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sale
Samsung Galaxy A17 5G Smart Phone 128GB US 1 Yr Manufacturer Warranty Black | Large AMOLED, High-Res Camera, Durable Design, Super Fast Charging, Expandable Storage, Circle to Search, 2025
  • YOUR CONTENT, SUPER SMOOTH: The ultra-clear 6.7" FHD+ Super AMOLED display of Galaxy A17 5G helps bring your content to life, whether you're scrolling through recipes or video chatting with loved ones.¹
  • LIVE FAST. CHARGE FASTER: Focus more on the moment and less on your battery percentage with Galaxy A17 5G. Super Fast Charging powers up your battery so you can get back to life sooner.²
  • MEMORIES MADE PICTURE PERFECT: Capture every angle in stunning clarity, from wide family photos to close-ups of friends, with the triple-lens camera on Galaxy A17 5G.
  • NEED MORE STORAGE? WE HAVE YOU COVERED: With an improved 2TB of expandable storage, Galaxy A17 5G makes it easy to keep cherished photos, videos and important files readily accessible whenever you need them.³
  • BUILT TO LAST: With an improved IP54 rating, Galaxy A17 5G is even more durable than before.⁴ It’s built to resist splashes and dust and comes with a stronger yet slimmer Gorilla Glass Victus front and Glass Fiber Reinforced Polymer back.

Capture the viewport or full page

Save this as capture.py. It writes dated PNG files and a JSON run record, and returns a failing exit status if any listing fails so the scheduler can flag the run.

import json
import sys
from datetime import datetime, timezone
from pathlib import Path

from playwright.sync_api import sync_playwright

OUTPUT = Path("captures")
TARGETS = Path("listings.json")
FULL_PAGE = False  # Set True to include the entire scrollable document.


def main():
    OUTPUT.mkdir(parents=True, exist_ok=True)
    listings = json.loads(TARGETS.read_text(encoding="utf-8"))
    run_time = datetime.now(timezone.utc)
    stamp = run_time.strftime("%Y%m%dT%H%M%SZ")
    results = []

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page(viewport={"width": 1365, "height": 900}, device_scale_factor=1)
        for listing in listings:
            label = listing["id"]
            url = listing["url"]
            path = OUTPUT / f"{label}_{stamp}.png"
            try:
                response = page.goto(url, wait_until="domcontentloaded", timeout=60000)
                page.wait_for_timeout(2000)  # Allow ordinary client rendering to settle.
                page.screenshot(path=str(path), full_page=FULL_PAGE)
                results.append({
                    "id": label,
                    "url": url,
                    "captured_at_utc": run_time.isoformat(),
                    "http_status": response.status if response else None,
                    "file": str(path),
                    "ok": True,
                })
            except Exception as exc:
                results.append({
                    "id": label,
                    "url": url,
                    "captured_at_utc": run_time.isoformat(),
                    "file": None,
                    "ok": False,
                    "error": str(exc),
                })
        browser.close()

    (OUTPUT / f"run_{stamp}.json").write_text(
        json.dumps(results, indent=2, ensure_ascii=False), encoding="utf-8"
    )
    failures = [item for item in results if not item["ok"]]
    print(json.dumps({"captured": len(results) - len(failures), "failed": len(failures)}))
    return 1 if failures else 0


if __name__ == "__main__":
    sys.exit(main())

Run it once locally with python capture.py. The default takes a viewport image at 1365 × 900 CSS pixels, device scale factor 1, after DOM content loads and a two-second settling pause. Change these settings only deliberately: the same viewport, scale, format, capture scope, and wait behavior make later images easier to compare.

Choose the screenshot scope

  • Viewport: a shorter, consistent image of what appears without scrolling. Use this if the key information is near the top of the page.
  • Full page: set FULL_PAGE = True to include below-the-fold details. It can produce very tall images and include unrelated recommendations or dynamic page sections.
  • One element: identify a stable CSS selector and use page.locator("YOUR_SELECTOR").screenshot(path=str(path)) instead of page.screenshot(...). This focuses the image on a known region, but selector changes can break the capture.

Dynamic banners, recommendation carousels, clocks, or changing page layout may create pixel differences unrelated to a property’s price or terms. Masking or style injection can suppress known noise, but masking can also conceal a meaningful listing change. Keep the original unmodified image if you create a separately processed comparison image.

Schedule captures with GitHub Actions

GitHub Actions scheduled workflows use POSIX cron. Schedules default to UTC; the schedule documentation also supports an IANA timezone. The shortest documented interval is once every five minutes, but scheduled triggers can be delayed during high load and queued runs can be dropped. Workflow schedule events run only for workflow files on the repository’s default branch. Do not treat a cron expression as a guarantee of minute-exact delivery. See GitHub’s schedule event documentation for current behavior.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Samsung Galaxy A16 5G 128GB Cell Phone, Unlocked Android Smartphone, Large AMOLED Display, Durable Design, Super Fast Charging, Expandable Storage, US Version, 2025, Blue Black (Renewed)
  • Charger NOT Included, 6.7" Super AMOLED FHD+, 90Hz Refresh Rate, 385 ppi, 800 nits (HBM), 1080x2340px, 5000mAh Battery
  • 128GB, 4GB RAM, microSDXC, Exynos 1330 (5nm), Octa-Core, Mali-G68 MP2 or Mali-G57 MC2 GPU
  • Rear Camera: 50MP, f/1.8 (wide) + 5MP, f/2.2 (ultrawide) + 2MP, f/2.4 (macro), LED flash, panorama, HDR; Front Camera: 13MP, f/2.0, Android 14, up to 6 major Android upgrades, One UI 6.1
  • 3G: HSDPA 850/900/1700(AWS)/1900/2100; 4G LTE: 1/2/3/4/5/7/12/13/14/20/25/26/28/29/30/38/39/40/41/48/66/71, 5G: 2/5/25/41/66/71/77/78 SA/NSA/Sub6/mmWave - Nano-SIM + eSIM
  • US Model – Global Connectivity – Compatible with Most GSM Carriers like T-Mobile, AT&T, MetroPCS, etc. Will Also work with CDMA Carriers Such as Verizon, Straight Talk.

Example: every day at 9:00 a.m. India time

Create .github/workflows/capture.yml. GitHub’s schedule syntax supports the timezone field shown below; confirm support and current syntax in the documentation when configuring your workflow.

name: Capture listing pages

on:
  schedule:
    - cron: "0 9 * * *"
      timezone: "Asia/Kolkata"
  workflow_dispatch:

permissions:
  contents: read

jobs:
  capture:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install playwright
      - run: python -m playwright install --with-deps chromium
      - run: python capture.py
      - name: Save captures
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: listing-captures-${{ github.run_id }}
          path: captures/
          if-no-files-found: warn

The example uploads run files as workflow artifacts, not as a permanent archive. Check your repository’s current artifact retention settings and download or copy files to storage you control if you need longer retention. For a UTC-only schedule, convert the intended India local time to UTC and document the conversion so future maintainers do not mistake the trigger time.

Preserve a useful and trustworthy archive

  • Use unambiguous names: include a stable listing ID and UTC timestamp, as in example-flat-01_20261003T090000Z.png. Keep the original files; do not silently overwrite the previous capture.
  • Record outcomes: keep the run JSON, scheduler status, and images together. A scheduled trigger by itself does not prove that the page loaded or that an image was saved.
  • Plan retention: workflow storage may be temporary or governed by configured retention. Copy important records to durable storage and test that older captures remain retrievable.
  • Use a measured cadence: choose a frequency appropriate to the legitimate purpose. Avoid high-volume collection or repeated requests that burden a portal. If access is blocked or challenged, stop rather than trying to evade the restriction.
  • Protect personal information: listing pages can show phone numbers, names, account details, or other personal data. Restrict archive access and do not publish or share exposed information unnecessarily.

Compare changes without over-interpreting them

Review successive images side by side or use a visual-diff tool to highlight changed pixels. First check whether the capture settings stayed the same. A changed banner, recommendation, timestamp, or layout can alter the image even when the property terms did not change. Confirm material changes against the current listing and appropriate authoritative records rather than treating a visual difference alone as proof.

A screenshot shows that a particular browser session produced an image at a recorded time, assuming the capture log and clock are trustworthy. It does not prove when a listing was first published, whether its claims were complete or accurate, whether a price change was genuine, or whether an offer is legally binding.

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.
Rank #4
Sale
Samsung Galaxy A17 5G Smart Phone 128GB, US 1 Yr Manufacturer Warranty Blue | Large AMOLED, High-Res Camera, Durable Design, Super Fast Charging, Expandable Storage, Circle to Search, 2025
  • YOUR CONTENT, SUPER SMOOTH: The ultra-clear 6.7" FHD+ Super AMOLED display of Galaxy A17 5G helps bring your content to life, whether you're scrolling through recipes or video chatting with loved ones.¹
  • LIVE FAST. CHARGE FASTER: Focus more on the moment and less on your battery percentage with Galaxy A17 5G. Super Fast Charging powers up your battery so you can get back to life sooner.²
  • MEMORIES MADE PICTURE PERFECT: Capture every angle in stunning clarity, from wide family photos to close-ups of friends, with the triple-lens camera on Galaxy A17 5G.
  • NEED MORE STORAGE? WE HAVE YOU COVERED: With an improved 2TB of expandable storage, Galaxy A17 5G makes it easy to keep cherished photos, videos and important files readily accessible whenever you need them.³
  • BUILT TO LAST: With an improved IP54 rating, Galaxy A17 5G is even more durable than before.⁴ It’s built to resist splashes and dust and comes with a stronger yet slimmer Gorilla Glass Victus front and Glass Fiber Reinforced Polymer back.

Permissions and listing accuracy in India

Review the specific portal’s current terms and access rules before automating. Magicbricks’ terms and conditions describe its listing and search services and say listing and RERA information may not be verified by the platform, advising users to verify independently. That is a statement about that platform’s terms, not a universal rule for every Indian property website. Independently check important property, ownership, and regulatory claims through appropriate authoritative sources and due diligence.

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 is a website screenshot API and MCP server for developers. A single request can capture a URL as an image or PDF; for recurring monitoring, connect the call to a scheduler and retain the resulting files and run records. Its options include full-page capture, CSS element capture, viewport and device presets, and custom waits. See the ScreenshotNeo documentation for API details.

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

Cookie banners and consent notices are accepted and removed before capture, as are supported newsletter popups and chat widgets. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed; response headers identify the page verdict and billing status. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for AI agents. The free plan includes 1,000 shots a month with no card; paid plans start at $5 for 3,000 shots. A screenshot still cannot verify the truth of listing details, and you remain responsible for choosing an authorized access route. Sign up for 1,000 free screenshots a month with no card.

Common problems and fixes

The page times out or remains blank

Check that the URL opens in an ordinary browser and that the workflow runner can reach it. A fixed two-second pause may not suit a slow page; adjust the wait strategy, such as waiting for a known selector, while keeping it consistent between captures. If the site presents a bot check or access challenge, stop and use an authorized route instead of attempting to bypass it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Tracfone Motorola Moto G 2025, 64GB, Saphire Blue (Locked to | Prepaid Smartphone- 6.6" 120Hz Display, 5G , 50MP Quad Pixel Camera, Long-Lasting Battery
  • Carrier: This phone is locked to Tracfone, which means this device can only be used on the Tracfone wireless network. Tracfone plan required, activating is easy, just 3 steps.
  • DISPLAY: Immersive viewing on a 6.7-inch super-bright 120Hz display with powerful stereo speakers and Bass Boost for cinematic entertainment.
  • CAMERA SYSTEM: Advanced 50MP Quad Pixel camera captures sharp, detailed photos and videos in any lighting condition
  • PERFORMANCE: Lightning-fast 5G connectivity paired with a powerful processor and RAM Boost for smooth multitasking.
  • BATTERY LIFE: Long-lasting 5000mAh battery with TurboPower charging technology delivers hours of power in minutes.

Images differ even though the listing appears unchanged

Compare viewport, device scale, capture scope, browser settings, and wait timing first. Dynamic recommendations, rotating banners, or timestamps may account for pixel changes. You can mask a known region for a separate diff workflow, but preserve the unmasked original because masking can hide relevant edits.

The workflow did not run at the expected minute

Confirm the workflow file is on the default branch and that the cron expression and timezone represent the intended local time. GitHub documents possible delay and dropped queued runs during high load, so inspect run history and do not depend on exact-minute delivery for time-critical evidence.

The workflow succeeds but no older images are available

Check artifact retention and whether the files were copied to durable storage. The example creates an artifact per run, but artifact availability is not the same as a long-term archive; test retrieval before relying on it.

One listing failure stops the run

The script writes a JSON result for each listing and exits with status 1 if any failed, so the run is visible as unsuccessful without losing the other captures. Inspect the run JSON and workflow logs to identify the URL and error, correct the URL or wait configuration if appropriate, then rerun manually with workflow_dispatch.

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

Frequently Asked Questions

Can I capture just one part of a listing page?

Yes. Playwright can screenshot a locator selected by CSS, provided the selector remains stable.

Can I run captures more often than once a day?

GitHub Actions documents scheduled workflows as supporting intervals as short as five minutes, but runs are not guaranteed to start exactly on time.

Does a timestamped screenshot prove the advertised price or RERA details are correct?

No. It records a rendered page; verify material claims independently.

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.

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

GitHub ActionsIndiaPlaywrightreal estateweb screenshots

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.

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.