ScreenshotNeo

BlogHow-to

How to Track Product Prices on Tata CLiQ With Scheduled Screenshots

Save dated screenshots of a Tata CLiQ listing to track its displayed price, availability, and offers. Build a simple scheduled capture workflow and keep its limits clear.

By the ScreenshotNeo team4 October 202610 min read

You can track a Tata CLiQ product’s displayed price by saving a screenshot of its public listing on a recurring schedule and recording the capture time, selected variant, visible price, availability, and offer wording. Tata CLiQ’s official sources describe a marketplace, not a built-in scheduled-screenshot or public price-history feature, so this is a record you create yourself. The screenshot shows what the page displayed at that moment; it does not guarantee a checkout total, stock, or offer eligibility.

This guide uses Python and Playwright to capture a page on a schedule, then appends an observation to a CSV log. It also covers how to compare captures, what to do when a page cannot be captured, and an API option if you do not want to manage a browser.

1. What a screenshot-based price record can tell you

A screenshot is a dated visual record of the listing as it appeared to your browser. It can help you review changes to the displayed amount, availability, and visible promotions. It is not a price alert from Tata CLiQ, a reservation, or a guarantee that the same amount will be charged at checkout.

Tata CLiQ is a marketplace, and sellers determine listing prices under the seller agreement. An offer may also change or be withdrawn. Reopen the live listing and verify the applicable terms before buying. A coupon, payment method, shipping charge, or checkout fee may affect the final amount; do not assume a listing screenshot captures every part of that calculation.

For a useful comparison, capture the same exact listing and variant each time. A different size, color, model, seller, or product URL can make two prices incomparable. The official sources reviewed for this guide do not document a native scheduled screenshot feature or public product-price history.

2. Prepare the listing and your capture record

  1. Open the public product listing and copy its exact URL. Prefer the listing URL that identifies the specific product.
  2. Select the size, color, model, or other variant you intend to track. Check whether the page preserves that choice when reloaded.
  3. Decide how often to capture. Daily is a reasonable starting schedule for a personal record; choose a different interval if you need more or fewer observations.
  4. Keep a log with the timestamp, product URL, variant, displayed price, availability, and visible offer or coupon wording. Save each screenshot with a date-based filename.
  5. On each run, confirm the captured page shows the expected item and variant. A successful image file alone does not prove the right content was captured.

Keep the record limited to public listing information. Logged-in or personalized pages may show different content. This research did not verify whether Tata CLiQ permits automated page capture under its current terms. Review the current terms and do not bypass access controls or collect account data.

3. Build a recurring capture with Python and Playwright

The following script opens the listing in Chromium, waits for the page to render, saves a full-page PNG, and appends an observation to a CSV file. Since listing layouts can change, it does not guess a price selector: inspect the screenshot and enter the visible price and context in the log. This avoids recording a price from the wrong page element.

Install the browser automation package

python -m venv .venv
source .venv/bin/activate
python -m pip install playwright
python -m playwright install chromium

On Windows PowerShell, activate the environment with .venv\\Scripts\\Activate.ps1. Install Chromium using the same Python environment that will run the script.

Save the capture script

Save this as capture_price.py. Set PRODUCT_URL to the public listing URL and set VARIANT to the exact variant you selected. The script uses UTC timestamps so observations can be compared consistently across machines.

import csv
import os
from datetime import datetime, timezone
from pathlib import Path
from urllib.parse import urlparse

from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
from playwright.sync_api import sync_playwright

PRODUCT_URL = os.environ.get("PRODUCT_URL", "https://www.tatacliq.com/")
VARIANT = os.environ.get("PRODUCT_VARIANT", "record the selected size, color, or model")
OUT_DIR = Path(os.environ.get("CAPTURE_DIR", "captures"))
LOG_PATH = OUT_DIR / "observations.csv"
NAVIGATION_TIMEOUT_MS = 60000


def main():
    parsed = urlparse(PRODUCT_URL)
    if parsed.scheme not in {"http", "https"} or not parsed.netloc:
        raise ValueError("PRODUCT_URL must be a full http:// or https:// URL")

    OUT_DIR.mkdir(parents=True, exist_ok=True)
    captured_at = datetime.now(timezone.utc)
    stamp = captured_at.strftime("%Y%m%dT%H%M%SZ")
    screenshot_path = OUT_DIR / f"listing-{stamp}.png"

    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=True)
        page = browser.new_page(viewport={"width": 1440, "height": 1000}, device_scale_factor=1)
        page.set_default_navigation_timeout(NAVIGATION_TIMEOUT_MS)
        try:
            response = page.goto(PRODUCT_URL, wait_until="domcontentloaded")
            # Give client-rendered content a short chance to appear. This is not
            # proof that every image, offer, or page widget has finished loading.
            page.wait_for_timeout(3000)
            page.screenshot(path=str(screenshot_path), full_page=True)
            status = response.status if response else "no response object"
        except PlaywrightTimeoutError:
            # Keep a screenshot of the rendered state when possible, so a timeout
            # is visible during review rather than silently treated as a price.
            try:
                page.screenshot(path=str(screenshot_path), full_page=True, timeout=15000)
            except Exception:
                browser.close()
                raise
            status = "navigation timeout; inspect screenshot"
        finally:
            browser.close()

    fields = [
        "captured_at_utc", "url", "variant", "http_status_or_note",
        "displayed_price", "availability", "offer_text", "screenshot_file"
    ]
    is_new = not LOG_PATH.exists()
    with LOG_PATH.open("a", newline="", encoding="utf-8") as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=fields)
        if is_new:
            writer.writeheader()
        writer.writerow({
            "captured_at_utc": captured_at.isoformat(),
            "url": PRODUCT_URL,
            "variant": VARIANT,
            "http_status_or_note": status,
            "displayed_price": "fill after reviewing screenshot",
            "availability": "fill after reviewing screenshot",
            "offer_text": "fill after reviewing screenshot",
            "screenshot_file": str(screenshot_path),
        })

    print(f"Saved {screenshot_path}")
    print(f"Appended an observation row to {LOG_PATH}")
    print("Review the image and replace the placeholder price, availability, and offer fields.")


if __name__ == "__main__":
    main()

Run it once before scheduling

PRODUCT_URL='PASTE_THE_EXACT_PRODUCT_URL_HERE' \\
PRODUCT_VARIANT='Blue, size M' \\
python capture_price.py

Replace the example variant with the one actually selected. Review the PNG and CSV row. If the page redirects, requires an interaction, or displays a different variant after reload, resolve that first; otherwise the recurring record may be misleading.

Schedule with cron on Linux or macOS

After the one-time run works, edit your crontab with crontab -e and add a daily run. Use absolute paths for the project and Python executable. Replace the URL and variant values with your own.

15 8 * * * cd /absolute/path/to/project && PRODUCT_URL='PASTE_THE_EXACT_PRODUCT_URL_HERE' PRODUCT_VARIANT='Blue, size M' /absolute/path/to/project/.venv/bin/python /absolute/path/to/project/capture_price.py >> /absolute/path/to/project/capture.log 2>&1

This runs at 08:15 according to the machine’s local timezone. Confirm the timezone and that the computer is awake and connected at that time. For Windows, create a Task Scheduler task that runs the virtual environment’s Python executable with capture_price.py as its argument, and set the environment variables or put the URL and variant directly in the script.

4. Compare observations without confusing price and offer changes

For each pair of captures, compare the same product URL and variant, then check the timestamp, visible listing price, availability, and offer text. Record whether a changed amount is the displayed listing price or an amount shown only after applying a coupon or selecting a payment method.

Record Why it matters
Capture time and timezone Establishes when the page was observed and the elapsed time between captures.
Exact URL and variant Helps prevent comparing different listings or product options.
Displayed amount and availability Captures the visible listing state at that time.
Visible offer or coupon wording Preserves context that may be temporary or conditional.
Screenshot filename Lets you inspect the original visual context behind the log row.

If the page changes its layout, your browser receives an access challenge, or the screenshot is blank, mark that run as an unsuccessful observation rather than treating it as a price change. Check the current page and capture setup before drawing a conclusion.

5. cURL, Python, and Node.js alternatives for a one-off capture

For an occasional capture, you can use the ScreenshotNeo screenshot API instead of installing and maintaining a browser. These examples request a screenshot of the product URL; save each result with a timestamp if you are building a history. API options, formats, and parameters are documented in the ScreenshotNeo API documentation.

cURL

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

Replace the target with the exact public product URL. Keep the API key private and avoid putting it in a shared script or public repository.

Python

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://www.tatacliq.com/"},
    timeout=90,
)
r.raise_for_status()
with open("shot.webp", "wb") as f:
    f.write(r.content)

Node.js

const q = new URLSearchParams({
  access_key: 'YOUR_API_KEY',
  url: 'https://www.tatacliq.com/'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const bytes = new Uint8Array(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', bytes));

Use the product listing URL in place of the example target. A screenshot API captures the page; it does not establish that a displayed offer will remain valid or that the same variant is selected in later captures. Review the result and retain the capture time and listing context in your own log.

6. Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server. One GET request can return a screenshot or PDF. For this workflow, a single request looks like this:

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

ScreenshotNeo accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots.

Create a free ScreenshotNeo account to get 1,000 screenshots a month with no card.

7. Troubleshooting scheduled captures

Symptom Likely cause What to check
No screenshot or CSV row The scheduled process may be using the wrong working directory or Python environment, or it may not have permission to write the output folder. Run the exact command from the schedule manually; use absolute paths and inspect the redirected log.
Navigation timeout The page did not reach the requested navigation state before the timeout, or the connection was slow. Check connectivity and the log. Inspect any saved image; do not count it as a valid price observation unless the listing content is visible.
Blank or incomplete screenshot Client-rendered content may not have appeared yet, or the listing may depend on an interaction. Open the image, compare with the live listing, and adjust the wait only after identifying what must load. A longer wait cannot fix a blocked or inaccessible page.
Wrong product or variant The URL may be a general page, or the selected option may not persist after reload. Use the exact product listing URL and verify the chosen variant in every capture.
Price seems to jump unexpectedly The variant, seller, availability, offer, or displayed price context may have changed. Compare the screenshots and log fields. Recheck the live listing and checkout conditions before acting.
Crontab run works manually but not on schedule Cron has a smaller environment and may not know the virtual environment, variables, timezone, or project directory. Set absolute paths, define variables in the cron line, redirect output to a log, and check the host timezone and power state.
Browser installation error Playwright’s Chromium binary may not be installed for the active environment. Activate the same virtual environment used by the scheduled command, then run python -m playwright install chromium.

8. Reliability, performance, and cost

A scheduled browser depends on the machine being available, network access, browser installation, and the listing rendering in a capture-friendly way. A laptop that is asleep will not run its scheduled task. Keep logs, use stable absolute paths, and periodically inspect captures to catch layout or variant changes.

Each run uses local compute and network traffic; frequency and full-page length affect how much work your browser performs. For a personal record, choose an interval that answers your question rather than capturing continuously. Keep screenshots only as long as useful and avoid recording private account content.

The Playwright workflow has no per-screenshot API charge, but it requires setup and maintenance. ScreenshotNeo has a free tier of 1,000 screenshots per month with no card, then plans of $5 for 3,000, $15 for 15,000, $39 for 60,000, $99 for 250,000, and $249 for 1,000,000; yearly billing gives two months free. Every feature is available on every plan. Check the documentation for configuration and API behavior before automating a recurring workflow.

9. Frequently asked questions

Does Tata CLiQ provide a public price-history chart?

The official sources reviewed for this guide do not document a public product-price history. The screenshot log described here is a user-created record.

Does an old screenshot prove the current checkout price?

No. It records the listing as displayed at capture time. Reopen the listing and verify the current checkout conditions, stock, and offer eligibility.

Can I track a logged-in price?

A logged-in or personalized page may differ from a public listing. This workflow is intended for public listing information; do not collect account data or bypass access controls.

Should I capture every few minutes?

Choose an interval that suits your purpose and the site’s current terms. More frequent captures create more files and network requests without making a screenshot a price guarantee.