Back to Blog
TutorialOctober 25, 202610 min read

Compare a Phone's Price on Croma, Reliance Digital, Amazon, Flipkart & the Brand Store

The same phone can differ by thousands of rupees between a retailer, a marketplace and the brand's own store. Here's how to compare all of them live with one API key.

#phone price comparison#croma#reliance digital#amazon#flipkart#oneplus

Shoppers buying a phone check four or five tabs before they pay: Croma, Reliance Digital, Amazon, Flipkart and the brand store. A comparison widget that does this for them needs live prices, not a nightly crawl, because launch offers and sale prices change within hours. With QuickCommerce API all five sources answer through the same `/v1/item` endpoint and return the same JSON shape.

How the comparison works

๐Ÿ”—Product linksOne per store
๐ŸงญResolve/v1/item/resolve (free)
โšกFetch/v1/item in parallel
๐Ÿ“ŠCompareCheapest in stock

Step 1: map the model to an ID on each store

There's no shared product ID across Indian stores, so you build a small mapping once per model. Start from the product page links:

StoreHow to get item_idFree link resolving
CromaNumber after `/p/` in the linkYes
Reliance DigitalSlug after `/product/` in the linkYes
AmazonResolve the amazon.in linkYes
FlipkartResolve the flipkart.com linkYes
OnePlus`<productCode>:<skuCode>` from the storeNot yet: copy from the URL
vivo`<spuId>:<skuId>` from a mshop.vivo.com linkNot yet: copy from the URL
GET /v1/item/resolveTurn any supported product link into an item_id (0 credits)
Request (cURL)
curl -H "X-API-Key: your-api-key" \
  "https://api.quickcommerceapi.com/v1/item/resolve?url=https://www.croma.com/apple-iphone-17-pro-256gb-deep-blue-/p/317418"
Response (JSON)
{
  "status": "success",
  "credits_remaining": 100,
  "data": {
    "platform": "Croma",
    "item_id": "317418",
    "sku_id": null,
    "source": "url",
    "verified": false,
    "warning": null
  }
}

Try it live in the API Playground โ†’

Tip

Prefer a UI? Paste links into the Item ID Finder. Short share links from the Amazon and Flipkart apps (amzn.in, dl.flipkart.com) work too. Match exact variants: 8 GB/256 GB in one colour on every store, otherwise you're comparing different products.

Step 2: fetch every store in parallel

Each `/v1/item` call costs one credit and returns `price`, `mrp`, `available` and a `deeplink`. Fire them concurrently so the slowest store sets the response time, not the sum of all of them.

compare_phone.py
import asyncio, os, httpx

API = "https://api.quickcommerceapi.com/v1"
HEADERS = {"X-API-Key": os.environ["QC_API_KEY"]}
LOC = {"lat": 19.0760, "lon": 72.8777, "pincode": "400001"}  # Mumbai

# One model, one entry per store. Links are resolved; brand-store IDs are given directly.
OFFERS = [
    {"url": "https://www.croma.com/<model-slug>/p/<id>"},
    {"url": "https://www.reliancedigital.in/product/<model-slug>"},
    {"url": "https://www.amazon.in/dp/<ASIN>"},
    {"url": "https://www.flipkart.com/<model-slug>/p/<itm>?pid=<PID>"},
    {"platform": "OnePlus", "item_id": "<productCode>:<skuCode>"},
]

async def resolve(client, offer):
    if "item_id" in offer:
        return offer["platform"], offer["item_id"]
    r = await client.get(f"{API}/item/resolve", params={"url": offer["url"]})
    r.raise_for_status()
    d = r.json()["data"]
    return d["platform"], d["item_id"]

async def price(client, platform, item_id):
    r = await client.get(f"{API}/item", params={**LOC, "platform": platform, "item_id": item_id})
    if r.status_code != 200:
        return {"platform": platform, "error": r.json().get("detail")}
    item = r.json()["data"]["items"][0]
    return {
        "platform": platform,
        "name": item["name"],
        "price": float(item["price"]) if item.get("price") else None,
        "mrp": float(item["mrp"]) if item.get("mrp") else None,
        "available": item.get("available"),
        "link": item.get("deeplink"),
    }

async def main():
    async with httpx.AsyncClient(headers=HEADERS, timeout=60) as client:
        ids = await asyncio.gather(*(resolve(client, o) for o in OFFERS))
        rows = await asyncio.gather(*(price(client, p, i) for p, i in ids))
    in_stock = [r for r in rows if r.get("available") and r.get("price")]
    for r in sorted(in_stock, key=lambda r: r["price"]):
        print(f"{r['platform']:<16} Rs {r['price']:>9,.0f}  (MRP {r['mrp'] or 0:,.0f})")
    if in_stock:
        best = min(in_stock, key=lambda r: r["price"])
        print(f"Cheapest: {best['platform']} -> {best['link']}")

asyncio.run(main())

Resolve the links once and store the `(platform, item_id)` pairs; after that each refresh is just the `/v1/item` calls. Five stores cost five credits per refresh, and resolving is free.

Step 3: present a fair comparison

1

Rank by price among in-stock offers

An out-of-stock store with a low price isn't an option for the shopper. Show it greyed out, below the rest.

2

Use the same pincode everywhere

Croma and Reliance Digital price and stock by pincode (derived from lat/lon if you omit it). Use the shopper's pincode so the number matches what they'll see at checkout.

3

Show MRP and the discount

Brand stores often list a higher MRP; computing `(mrp - price) / mrp` per store makes that visible instead of misleading.

4

Say what's not included

Bank and exchange offers aren't part of the listed price. Label the column as the listed price so users aren't surprised.

Store typePlatformsSearchItem lookupDelivery ETA
Electronics retailersCroma, Reliance DigitalNoYesNo
Brand storesOnePlus, vivoNoYesNo
MarketplacesAmazon, FlipkartYesYesNo

Info

Need to discover the model first? Run `/v1/search` on Amazon or Flipkart with the model name, then add the matching retailer and brand-store IDs to your mapping. The electronics stores themselves don't support keyword search.

Keep it fresh

For a comparison page, refresh popular models every few hours and on page view with a short cache. To alert users when the cheapest store changes, combine this with the watchlist in our electronics price tracking guide.

Tip

Test the flow in the API Playground first. New accounts get 100 free credits.

Frequently asked questions

Can one API compare phone prices on Croma, Reliance Digital, Amazon and Flipkart?

Yes. All of them are available through GET /v1/item with the same response shape, so one key and one parser cover every store.

Which product links can be resolved automatically?

Croma, Reliance Digital, Amazon and Flipkart links (including app share links) resolve via GET /v1/item/resolve or the Item ID Finder for free. OnePlus and vivo IDs are read from the store URL for now.

Are bank offers included in the price?

No. The API returns the listed selling price and MRP. Card and exchange offers applied at checkout aren't included.

How many credits does one comparison cost?

One credit per store per refresh. Resolving links is free, so a five-store comparison costs five credits.

Ready to Get Started?

Sign up for free and get 100 credits instantly. No credit card required. Start querying quick commerce and marketplace platforms with a single API.