Marketplace Price Tracker: Every Running Listing on 5 Marketplaces, Checked Twice a Day
An eyewear and accessories brand with three labels and 1,800+ running listings had no view of its live marketplace prices. We built a tracker that prices every listing on Amazon, Flipkart, Myntra, Nykaa and Nykaa Fashion twice a day and flags the ones selling below the brand's base price.

The Challenge
The brand sells under three labels on five marketplaces, with its base prices kept in per-marketplace spreadsheets. Live prices drift with marketplace discounts, coupons and sale events, and nobody could say which listings were selling below base, which 'Running' SKUs had quietly gone offline, or how the same SKU was priced across marketplaces. Checking by hand meant thousands of product pages.
What We Built
A scheduled Python job reads the brand's own base-pricing sheets every day (panel IDs, base price and running status per SKU), searches each marketplace for all three brand names, then fetches every running listing the search missed directly by its panel ID. Prices come from each page's structured data rather than page text, a canary check tells genuinely dead listings apart from blocking, and results land in a Google Sheet whose dashboard is built entirely from live formulas. Every run emails a summary with coverage, the biggest price changes and the below-base count.
How It Works
Version one searched each marketplace for the brand name. It returned about a thousand listings and looked complete — until we compared it with the brand's own sheets and found it covered only about a third of the SKUs marked 'Running'. Two sub-brands never appeared when searching the main brand, and broad searches dropped entire categories. The rebuild treats the brand's sheets as the source of truth and uses search only as a first pass.
Each marketplace needed its own approach. Some expose product data through the same requests their apps use; others only serve full pages to a real browser, which we run headlessly on the server. On product pages we never trust the first rupee figure, because ad carousels sit above the product's own price; prices are taken from structured data or the specific price element and sanity-checked against MRP and discount.
Dead listings arrive in clusters, which made a simple 'stop after several misses' rule abandon hundreds of good listings. The fix was a canary: after a run of misses, re-fetch a listing that priced earlier in the run. If it still works, the misses are recorded as 'not live' and the run continues; if not, it's treated as a block, the browser is restarted and the run backs off. This recovered more than 150 listings in the next run and produced a clean 'Running in your sheet but not live' list for the brand.
The deliverable is a Google Sheet the team owns: a raw price dump appended each run, a price history, a 'Below Base Price' tab sorted by gap, and a dashboard of formulas — summary per marketplace, the same SKU across marketplaces sorted by price variance, and changes since the last run. Because it's formulas, the team can rearrange it without touching code.
The first full runs flagged more than 700 listings below base price, some 40–65% under — which immediately raised the right question for the brand: is 'base price' what the customer pays, or the seller price before marketplace-funded discounts? The tracker now runs alongside the brand's order-processing automation on the same small server, scheduled around the busy order slots.


