Skip to main content
Thirdwatchthirdwatch
E-commerce & products

Monitor eBay India Product Prices for Competitive Intel

Track eBay India product prices, discounts, and shipping costs for competitive intelligence. Automated monitoring with Python recipes and Thirdwatch scraper.

May 26, 2026 · 6 min read · 1,351 words
See the scraper →

Thirdwatch's eBay India Scraper delivers structured price data from eBay India search results — current prices, original prices, discount percentages, shipping costs, and multi-currency values per listing. Built for growth teams, category managers, and pricing analysts who need to track cross-border marketplace pricing without building and maintaining their own scraping infrastructure. Schedule daily or weekly runs on Apify, compare snapshots to detect price drops and new competitor listings, and feed alerts into Slack or email.

Why monitor eBay India prices for competitive intelligence

eBay India is the only major Indian marketplace where cross-border and domestic sellers compete on the same search page with visible pricing in multiple currencies. This makes it a unique competitive intelligence source for businesses selling imported goods in India. According to RedSeer's India e-commerce analysis, cross-border purchases now represent 12-15% of total Indian e-commerce spend, with electronics, watches, and fashion accessories leading the category mix.

For growth teams at Indian e-commerce companies, eBay India pricing reveals the import price floor — the lowest price at which a product can enter the Indian market through the grey market. If a cross-border eBay seller offers a Bose headphone at INR 18,000 including shipping, your Amazon India listing at INR 24,000 faces a 25% price disadvantage for price-sensitive buyers who know to check eBay.

The competitive signal goes beyond individual products. Discount depth patterns across a category reveal when sellers are liquidating inventory. Shipping cost changes indicate logistics partnerships or subsidy experiments. Currency shifts in listing prices suggest new seller geographies entering the Indian market. None of these signals are visible from a single manual check — they emerge from structured, repeated snapshots over time.

How does this compare to the alternatives?

Three approaches to eBay India price monitoring:

Approach Reliability Setup time Maintenance
DIY Python price tracker Low; blocked by bot detection within hours 3-5 days High; DOM and anti-bot changes monthly
Enterprise pricing tool (Prisync, Competera) High for supported sites; eBay India coverage is spotty Days to weeks onboarding Vendor-managed but expensive
Thirdwatch eBay India Scraper Production-grade; anti-bot handled 5 minutes Thirdwatch maintains parser

Enterprise pricing tools charge subscription fees starting at several hundred dollars per month and often lack eBay India as a supported source, since their focus is Amazon and Flipkart. DIY scrapers break quickly against eBay's bot detection. The eBay India Scraper gives you raw price data at pay-per-result pricing, which you pipe into whatever analytics stack your team already uses.

How to monitor eBay India prices in 5 steps

Step 1: How do I set up the monitoring pipeline?

Create an Apify account at apify.com and install the Python client. You will run the scraper on a schedule and store snapshots for time-series analysis.

pip install apify-client pandas
export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"

Step 2: How do I define my competitive product set?

Map each product category you want to monitor to specific eBay India search queries. Be specific — "sony wh-1000xm5" produces cleaner competitive data than "headphones."

from apify_client import ApifyClient
import datetime
import json

client = ApifyClient("apify_api_xxxxxxxxxxxxxxxx")

WATCHLIST = {
    "noise_cancelling_headphones": [
        "sony wh-1000xm5",
        "bose quietcomfort ultra",
        "apple airpods max",
    ],
    "smartwatches": [
        "apple watch series 9",
        "samsung galaxy watch 6",
        "garmin venu 3",
    ],
}

today = datetime.date.today().isoformat()
snapshot = []

for category, queries in WATCHLIST.items():
    run = client.actor("thirdwatch/ebay-india-scraper").call(
        run_input={
            "queries": queries,
            "maxResults": 30,
        }
    )
    items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
    for item in items:
        item["monitor_category"] = category
        item["snapshot_date"] = today
    snapshot.extend(items)
    print(f"{category}: {len(items)} listings captured")

Step 3: How do I detect price changes between snapshots?

Compare the current snapshot against the previous one using sku as the join key. Price drops and new listings are the primary competitive signals.

import pandas as pd

# Load current and previous snapshots
current = pd.DataFrame(snapshot)
previous = pd.read_json("snapshots/previous.json")  # From last run

# Merge on SKU
merged = current.merge(
    previous[["sku", "price", "snapshot_date"]],
    on="sku",
    how="left",
    suffixes=("_now", "_prev")
)

# Detect price drops
merged["price_change"] = merged["price_now"] - merged["price_prev"]
merged["price_change_pct"] = (
    merged["price_change"] / merged["price_prev"] * 100
).round(2)

price_drops = merged[merged["price_change"] < 0].sort_values("price_change_pct")
print(f"\nPrice drops detected: {len(price_drops)}")
for _, row in price_drops.head(10).iterrows():
    print(f"  {row['product_name'][:50]}: {row['price_change_pct']:.1f}%"
          f" ({row['currency']} {row['price_prev']:.0f} -> {row['price_now']:.0f})")

# New listings (in current but not in previous)
new_skus = set(current["sku"]) - set(previous["sku"])
new_listings = current[current["sku"].isin(new_skus)]
print(f"\nNew listings: {len(new_listings)}")

Step 4: How do I track discount depth trends over time?

Aggregate discount_percent across snapshots to identify when sellers increase markdown pressure — a signal of inventory liquidation or seasonal pricing.

# Discount depth analysis by category
discount_summary = current.groupby("monitor_category").agg(
    avg_discount=("discount_percent", "mean"),
    max_discount=("discount_percent", "max"),
    pct_discounted=("discount_percent", lambda x: (x > 0).mean() * 100),
    listing_count=("sku", "count"),
).round(2)

print("\nDiscount depth by category:")
print(discount_summary.to_string())

Step 5: How do I set up automated alerts for significant price changes?

Combine scheduled runs with threshold-based alerting. A price drop exceeding 15% or a new seller entering your category warrants immediate attention.

ALERT_THRESHOLD_PCT = -15.0

alerts = price_drops[price_drops["price_change_pct"] <= ALERT_THRESHOLD_PCT]

if not alerts.empty:
    alert_msg = f"eBay India Price Alert ({today})\n"
    alert_msg += f"{len(alerts)} products dropped >{abs(ALERT_THRESHOLD_PCT):.0f}%:\n\n"
    for _, row in alerts.iterrows():
        alert_msg += (
            f"- {row['product_name'][:60]}\n"
            f"  {row['currency']} {row['price_prev']:.0f} -> {row['price_now']:.0f}"
            f" ({row['price_change_pct']:.1f}%)\n"
            f"  Seller: {row['seller']}\n"
            f"  {row['url']}\n\n"
        )
    print(alert_msg)
    # Send via Slack webhook, email, or your alerting system

# Save current snapshot for next comparison
current.to_json(f"snapshots/{today}.json", orient="records")
current.to_json("snapshots/previous.json", orient="records")

Sample output

Each listing includes the pricing fields needed for competitive monitoring:

[
  {
    "sku": "334891025647",
    "product_id": "334891025647",
    "product_name": "Sony WH-1000XM5 Wireless Noise Cancelling Headphones Silver",
    "brand": "",
    "seller": "global_electronics_hub",
    "price": 18450.0,
    "original_price": 29990.0,
    "discount_percent": 38.48,
    "currency": "INR",
    "shipping": "Free shipping",
    "condition": "New",
    "listing_format": "Buy It Now",
    "rating": null,
    "rating_count": null,
    "image_url": "https://i.ebayimg.com/images/g/example/s-l225.jpg",
    "url": "https://www.ebay.in/itm/334891025647",
    "category": "",
    "in_stock": null,
    "source_query": "sony wh-1000xm5"
  },
  {
    "sku": "276013948275",
    "product_id": "276013948275",
    "product_name": "Apple AirPods Max Space Gray Imported US Version",
    "brand": "",
    "seller": "apple_imports_delhi",
    "price": 41999.0,
    "original_price": 59900.0,
    "discount_percent": 29.88,
    "currency": "INR",
    "shipping": "INR 500.00 shipping",
    "condition": "New",
    "listing_format": "Buy It Now",
    "rating": null,
    "rating_count": null,
    "image_url": "https://i.ebayimg.com/images/g/example/s-l225.jpg",
    "url": "https://www.ebay.in/itm/276013948275",
    "category": "",
    "in_stock": null,
    "source_query": "apple airpods max"
  }
]

The discount_percent field is pre-calculated from price and original_price, saving you the normalization step. The shipping field captures delivery cost as a string (including "Free shipping"), which you should parse into a numeric value for total-cost comparisons.

Common pitfalls

Ignoring shipping costs in price comparisons. A listing priced at INR 15,000 with INR 2,000 shipping is more expensive than one at INR 16,500 with free shipping. Always compute total landed cost (price + shipping) before comparing. The shipping field is a text string that requires parsing — "Free shipping" maps to zero, "INR 450.00 shipping" needs numeric extraction.

Comparing across currencies without normalization. eBay India search results mix INR, USD, GBP, and EUR listings. The currency field tells you which currency each price is denominated in. A Sony headphone at USD 189 and another at INR 18,450 cannot be directly compared without conversion. Always filter by currency or normalize before aggregation.

Overreacting to single-snapshot price drops. A listing may show a lower price because the seller changed the variant (e.g., switched from "with case" to "without case") rather than actually cutting the price. Track price changes over 2-3 snapshots before treating them as genuine competitive signals. The product_name field helps detect variant switches.

Not accounting for condition differences. A refurbished Sony WH-1000XM5 at INR 14,000 is not comparable to a new one at INR 18,000 for competitive pricing purposes. Always segment by the condition field before running price analysis.

Related use cases

Frequently asked questions

How often should I monitor eBay India prices?

Weekly monitoring catches major pricing shifts and new competitor entries. Daily monitoring is warranted during seasonal peaks like Diwali, Black Friday, and back-to-school periods when sellers adjust prices aggressively. For high-velocity categories like electronics, daily is the baseline; for slower categories like watches, weekly suffices.

Can I track prices for specific eBay India sellers?

The actor returns a seller field for each listing. While you cannot filter by seller at the input level, you can post-process results to isolate specific sellers and track their pricing patterns over time. Build a seller watchlist and filter each scrape's output against it in your pipeline.

Related

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.