How to Build a Competitor Price Index for Your Shopify Store

A competitor price index turns a pile of price comparisons into one number: how expensive you are, on average, compared with the stores you actually compete with. If your index is 100, you sit right at the market. At 110 you are 10% above it. At 92 you are undercutting it. It takes an afternoon to build in a spreadsheet, and it answers a question most small stores only guess at.
What a price index actually is
For one product, the index is simple:
index = your price / reference competitor price × 100
For a whole catalog, you take a basket of products you can match across stores, compute the index for each one, and combine them. The arithmetic is easy. The work is in three choices: which products count, which competitor price you compare against, and how much each product weighs.
The running example is a small coffee-gear store with three direct competitors (A, B and C) and five products that all four stores sell.
Step 1: Build a basket of matched products
The index is only as good as the matching. You need products that are genuinely the same item, or close enough that a customer would compare them side by side.
- Every Shopify store exposes product titles, vendors, variants and prices through /products.json. Same vendor plus same model name is usually a safe match.
- SKUs rarely help across stores: the sku field is often empty, or it's the store's own internal code.
- Match at the variant level. A 600 ml kettle and a 1 L kettle are different products for this purpose.
- If one store sells filters in packs of 100 and another in packs of 50, compare price per 100.
Five to twenty matched products is plenty for a small store. Pick the ones that matter: your best-sellers and the items customers are most likely to price-check.
Step 2: Choose a reference price
With three competitors you have three prices per product. Which one do you compare against? Here is the basket:
| Product | You | A | B | C | Median | Index vs median | Lowest | Index vs lowest |
|---|---|---|---|---|---|---|---|---|
| Pour-over kettle | $48 | $45 | $52 | $49 | $49 | 98.0 | $45 | 106.7 |
| Burr grinder | $129 | $119 | $125 | $135 | $125 | 103.2 | $119 | 108.4 |
| Paper filters (100) | $9 | $8 | $10 | $9 | $9 | 100.0 | $8 | 112.5 |
| Coffee scale | $32 | $29 | $28 | $30 | $29 | 110.3 | $28 | 114.3 |
| Glass carafe | $24 | $26 | $25 | $27 | $26 | 92.3 | $25 | 96.0 |
The simple average index against the median is 100.8. Against the lowest price it's 107.6.
- Median answers "where am I in the market?" It ignores one store's odd pricing and is the best default.
- Lowest answers "how far am I from the cheapest option a shopper might find?" Useful if your customers really do shop around on price, harsh if they don't.
- Average works too, but a single competitor running a deep sale drags it around.
Pick one and stick with it. An index you redefine every month can't show a trend.
Step 3: Weight by what you actually sell
A simple average treats a $9 pack of filters the same as a $129 grinder. That's rarely what you want. Weighting each product by your own revenue from it shows how your prices land on the sales you actually make.
| Product | Units / month | Your revenue | Index vs median |
|---|---|---|---|
| Pour-over kettle | 40 | $1,920 | 98.0 |
| Burr grinder | 10 | $1,290 | 103.2 |
| Paper filters (100) | 200 | $1,800 | 100.0 |
| Coffee scale | 30 | $960 | 110.3 |
| Glass carafe | 20 | $480 | 92.3 |
Total revenue is $6,450. The weighted index is the sum of revenue × index divided by total revenue, which comes out at 101.0. In a spreadsheet that's one SUMPRODUCT divided by one SUM.
Here the weighted and simple numbers are close, which is itself useful information: no single high-revenue product is skewing the picture.
Reading the number and deciding what to do
A headline index of 101 says "you're priced with the market". The spread underneath it tells you more.
- The scale, at 110.3, is the outlier: every competitor sells it for less. It's worth asking whether you have a reason to be there (better bundle, faster shipping, stock they don't have) or whether the price simply hasn't been revisited. Our framework for matching a competitor's price covers that decision.
- The carafe, at 92.3, is the opposite: you're the cheapest in the set. If it sells well at that price, fine. If it doesn't sell noticeably better than when it was priced higher, you may be leaving margin on the table.
- Anything within about three points of 100 is at market. Moves that small are noise and not worth reacting to.
The trend matters more than any single reading. If your index drifts from 101 to 106 over two months while your own prices didn't change, competitors have been cutting, and that calls for a different response than one weekend sale.
Where the index misleads you
- A competitor's weekend discount pulls the reference down for a few days. Check whether the lower price comes with a struck-through compare-at price; some "sales" are permanent, and those you should treat as the real price.
- A cheap price on a variant nobody can buy isn't competition. The public catalog marks variants as available or not; drop unavailable ones from the reference.
- Shipping changes the comparison: a $3 cheaper product with $6 more shipping isn't cheaper. The catalog doesn't show shipping, so note it by hand for your main competitors.
- If a competitor sells in a different currency, convert at a fixed rate for the whole period, or the exchange rate becomes part of your index.
- An index built from prices you copied three weeks ago describes three weeks ago. How often you need fresh data depends on your niche; see how often to check competitor prices.
Keeping it up to date
The first build is the hard part: matching products and setting up the formulas. After that, updating the index is just refreshing the competitor price columns. For a handful of products and a monthly check, copying prices by hand or from /products.json is fine. For a quick one-off look at how two stores' catalogs line up, the free compare stores tool helps with the matching step.
It stops being fine when you want the index weekly across 15 competitors, or when you need to know whether a low price was a two-day sale or a new normal. That's the point where a monitor saves time. StoreSentry, for example, checks competitor catalogs on a schedule, keeps a price history for each tracked product and, on the Growth plan, exports it to CSV, which you can drop straight into the spreadsheet. The index itself stays your own formula; the tool just keeps the inputs current.
Keep your index inputs current
StoreSentry checks competitor Shopify stores on a schedule and sends a digest of price moves, launches, restocks and sell-outs by email or Telegram. Free for 2 competitors, no card required; price history and CSV export on paid plans.
Install the app — free for 2 competitors →