Skip to content
Price IntelligencePrice Intelligence home

Practice

How to monitor competitor prices without drowning in data

Monitoring competitor prices means observing a defined set of rival offers for a defined set of your own products, on a schedule fast enough to catch the changes that matter, with alerts tuned so only actionable moves reach a human. The work is four decisions: which competitors, which SKUs, how often, and what fires an alert.

Ashesh DhakalFounder12 min read
Start free trialOpen the live demo14 days, no credit card, cancel in one click.

Competitor price monitoring is a set of four decisions, made once and maintained: which competitors you watch, which of your own SKUs you watch them on, how often you check, and what threshold turns an observation into an alert. Get those wrong and you end up with either a dashboard nobody opens or a Slack channel everybody mutes. This guide is the procedure for getting them right, with the arithmetic shown.

Start from the decision, not from the data

Before you pick a single competitor, write down the decision the data has to support. There are only a few, and they need different data.

  • Do we change this price? Needs accurate matched prices on a small, high-revenue SKU set, refreshed fast enough that the number on screen is still true when you act on it.
  • Are we drifting out of position? Needs a stable basket, in-stock filtering and a weighted price index. Speed matters less; consistency matters more.
  • Is a reseller advertising below our floor? Needs full seller coverage on marketplaces and dated evidence, not a price average. That is a different program, covered in how to monitor MAP violations.
  • Where are we losing on assortment, not price? Needs stock status and promotion capture as much as price, so an out-of-stock competitor is not read as a lost sale.

Most programs stall because they were built to answer all four at once and ended up answering none well. Pick the first decision, build for it, and add the others after it runs for a month. If you have not chosen a tool yet, the software selection rubric weights the criteria that matter for this procedure.

How to monitor competitor prices: the seven-step loop

  1. 1

    1. Name the decision and its owner

    One sentence: who acts on this data, how often, and what action is available to them. If pricing changes go through a monthly committee, hourly refresh is wasted money. If a merchandiser can change a price today, refresh speed becomes the constraint that matters.

  2. 2

    2. Score the competitor candidates and cut the list

    Run every candidate through the rubric below. Keep the ones that score into the core band and the secondary band. A list of twenty competitors is a list nobody maintains, and each extra competitor multiplies the matching work by the number of SKUs you monitor.

  3. 3

    3. Choose the monitored SKU set with an explicit rule

    Three buckets: the revenue spine, the price-perception items, and the contested SKUs. Everything else is excluded on purpose and written down as excluded, so nobody spends a quarter wondering why a product is missing.

  4. 4

    4. Match products, then confirm the matches

    Identifier joins first, then title and attribute comparison, then image comparison. Review anything that lands below the auto-accept band before it feeds a decision. This is the step that silently ruins price data, and it is covered in depth in the product matching guide.

  5. 5

    5. Set refresh frequency to category velocity

    Measure how often prices actually move in your category, then set the check interval below that. Your interval is a hard ceiling on what you can see: a promotion that starts and ends between two checks leaves no trace at all.

  6. 6

    6. Set alert thresholds, routes and duration rules

    Every alert names a person and an expected action. Add a persistence rule so a change has to survive one full refresh cycle before it fires, and a de-duplication rule so one SKU cannot generate nine messages in a day.

  7. 7

    7. Run the weekly review and log the decisions

    Thirty to forty-five minutes, same agenda, data health checked before anything else. Record what you decided and why. The log is what turns a monitoring tool into a pricing capability, because next quarter you can tell which moves worked.

How a competitor listing is matched to your productMatching runs as a waterfall in order of decreasing certainty: exact identifier join, then product feed lookup, then title and attribute similarity, then image similarity. Matches at or above 95 percent confidence are applied automatically; anything lower is queued for human confirmation, and every correction feeds back into matching.GTIN / UPC / EAN / MPNExact identifier joinTreated as exactno identifierProduct feed lookupResolve identifier via a shopping feedHigh confidenceno identifierTitle + attributesBrand, model, capacity, pack sizeQueued below 95%no identifierImage similarityFor barcode-poor categoriesAlways paired with title≥ 95% confidence — applied automaticallyBelow 95% — you confirm, and the correction is learned
Step four of the procedure, in detail: how a competitor listing is tied to the right product in your catalog.

Choosing competitors: a rubric that cuts the list

The instinct is to monitor everyone who sells what you sell. That produces a wide, shallow dataset with a large matching burden and no clear signal. A competitor earns a slot when their price affects a buying decision you can respond to. Score each candidate on six criteria and sort.

Competitor selection rubric. Score each criterion 0 to 3, multiply by the weight, maximum 39.
CriterionThe question to answerScore 0Score 3Weight
Catalog overlapWhat share of our top 100 revenue SKUs do they carry?Under 10 percentOver 60 percentx3
SubstitutabilityWould our buyer treat their listing as the same purchase?Different segment, service model or lead timeSame item, same delivery promise, same conditionx3
Visibility where buyers lookDo they appear above us in search results, shopping ads or the buy box?Rarely visible in the channels we sell throughPresent on nearly every comparison surface we appear onx2
Price leadershipWhen they move, does anyone follow?Their moves pass unnoticed by the rest of the marketTwo or more competitors reprice within a few daysx2
ActionabilityIf they undercut us, can we do anything about it?Contract, MAP or margin floor prevents any responseWe can match, bundle, promote or change the offerx2
Data feasibilityCan their price be observed reliably and repeatedly?Price only shown after login or in the cartPrice published on the product page in structured datax1

Bands: 30 and above is a core competitor, monitored on the full SKU set at full refresh. 20 to 29 is secondary, monitored on the revenue spine only. Below 20, leave it off and re-score in a quarter.

Worked example, using the fictional demo tenant Northline Supply. Voltbay scores 3, 3, 3, 2, 3, 3 across the six criteria, which weights to 9 + 9 + 6 + 4 + 6 + 3 = 37 and lands comfortably in the core band. Harborline scores 2, 3, 1, 1, 3, 3, weighting to 6 + 9 + 2 + 2 + 6 + 3 = 28, so it is secondary and gets watched on spine SKUs only. The marketplace seller DealVault scores 1, 2, 3, 0, 1, 2, weighting to 3 + 6 + 6 + 0 + 2 + 2 = 19. Highly visible, completely unresponsive to anything you do, so it moves to a marketplace watchlist instead of the pricing list.

Competitor prices — Audio & Small appliances

ProductYouVoltbayHarborlinePrimeDeckCasa & KinBelmont DirectPosition
Aurora H7 Noise-Cancelling HeadphonesNL-1000$249.00$254.75$257.46$263.24$260.16Lowest
Aurora H7 Noise-Cancelling Headphones — BlackNL-1007$275.83$255.57$295.14$273.40$261.36$274.54Above
Aurora H7 Noise-Cancelling Headphones — Midnight BlueNL-1014$275.90$243.97$299.78$294.42$280.25$272.53Above
Aurora H7 Noise-Cancelling Headphones — SandNL-1021$273.31$265.33$265.90$247.33$259.81$288.91Above
Aurora Buds ProNL-1028$149.00$162.74$169.34$159.11$167.18$154.28Lowest
Aurora Buds Pro — BlackNL-1035$165.68$165.93$187.17OOS$173.29$174.95$177.90Matched
Aurora Buds Pro — Midnight BlueNL-1042$165.19$148.24$183.85$161.72$162.17$167.73Above

Out-of-stock listings are struck through and excluded from position and repricing decisions.

The output of a scored competitor list: one row per SKU, one column per competitor, with stock status beside every price so an unavailable offer is never read as a live one.

Choosing SKUs when you cannot monitor everything

Nobody monitors a full catalog well. The cost is not only the subscription, it is the matching and the review. Three buckets cover almost every useful case, and the fourth rule is what keeps the set small.

Bucket 1: the revenue spine

Sort SKUs by trailing twelve-month revenue and take the set producing roughly the first 80 percent. Example: a 6,000 SKU catalog where the top 500 SKUs produce $4.2M of $6.0M in annual revenue. That is 70 percent of the money covered by 8.3 percent of the catalog, because 500 / 6,000 = 0.083. Run this on your own data before buying a plan size. It usually says the plan you need is smaller than you assumed.

Bucket 2: price-perception SKUs

The items a buyer checks before deciding whether your store is expensive: well-known commodity products, anything you advertise, and the entry item in a category people shop by price. These often carry thin margin and low revenue, and they still belong in the set, because they set the belief that governs the rest of the basket.

Bucket 3: contested SKUs

SKUs where you have lost share, lost the buy box, or seen unusual price movement this quarter. This bucket is dynamic: add to it from the weekly review, remove once the contest resolves.

The exclusion rule

  • Private label and exclusives with no comparable competitor offer. A fabricated comparison is worse than no data.
  • SKUs below a gross-margin-dollar floor. A product generating $180 of gross margin a year does not deserve a monitoring slot or a minute of match review.
  • Discontinued products and anything with less than a quarter of sell-through remaining.
  • Anything under an enforced MAP floor you cannot price below anyway. Monitor those for compliance in a separate queue, not for repricing.

Setting refresh frequency to match category velocity

Refresh frequency is not a preference, it is a measurement. Count distinct price changes per SKU over 30 days across your observed set, take the median, and set the interval below the typical gap between changes. The rule that governs everything here: any price movement shorter than your check interval is invisible to you, permanently. There is no recovering it later.

Category velocity, how to recognise it, and the refresh that keeps up
Category behaviourHow to recognise itRefresh that keeps upWhat a daily check misses
StableFewer than one price change per SKU per month, moving on cost changes and season turns. Specialty hardware, furniture, industrial supply.DailyAlmost nothing. Paying for more refresh here is waste.
ModerateOne to four changes per SKU per month, clustered around weekends and promotional calendars. Home improvement, sporting goods, pet.Twice dailyWeekend promotions that start Saturday morning and end Sunday night, which is when the discounting happens.
FastSeveral changes per week per SKU, competitors running automated repricing, frequent short promotions. Consumer electronics, small appliances.Four times dailyMost promotional windows, and any price moved down in the morning and back up by evening.
VolatileIntra-day movement, marketplace buy box rotation, algorithmic repricers reacting within minutes.HourlyPractically the whole picture. A daily number in a volatile category is a random sample presented as a fact.

Refresh tiers map to plans: daily on Starter, twice daily on Growth, four times daily on Scale, hourly on Enterprise. Velocity varies by category inside one catalog, so measure per category rather than picking one number for the business.

Two practical notes. Faster refresh raises cost on almost every pricing model in this category, so measure before you upgrade. And refresh frequency is worthless without freshness visibility: a plan that promises four times daily but shows no per-source timestamp cannot tell you whether one specific competitor has been checked since Tuesday. Ask for the last successful check time per source, which is what the data quality view exists to show.

Setting alert thresholds that do not create noise

The design principle is one line long: one alert equals one decision a named person is expected to make. Everything else goes in a digest or stays in the dashboard. Alerting on every price change is the single most common way a monitoring program gets muted in its first month.

The arithmetic makes the point. Suppose you monitor 800 SKUs against 5 competitors at four checks a day: 800 x 5 x 4 = 16,000 observations daily. If even 2 percent of those are a change, that is 320 change events a day, and nobody reads 320 messages. Filter to undercuts deeper than 3 percent, on the 120 spine SKUs only, held for one refresh cycle, capped at one message per SKU per day, and the queue becomes clearable before lunch.

Alert thresholds: what to fire on, where to start, and the noise each rule prevents
AlertFires whenStarting thresholdRoute and cadenceNoise it prevents
Undercut on a spine SKUAn in-stock competitor offer sits below our price and stays there for one full refresh cycle3 percent or $5.00 below, whichever is greaterSlack channel, immediate, one message per SKU per dayPenny-level repricer flapping and five-minute pricing errors
Deep undercut, any SKUAny monitored competitor is far below us on any monitored SKU10 percent belowSlack and email, immediate, no batchingNothing. This one is meant to interrupt you, and should stay rare
Competitor out of stockA competitor that normally carries a contested SKU shows out of stockConfirmed on two consecutive checksDaily digest to merchandisingStock flicker during restock and cart-level availability quirks
Price index driftThe revenue-weighted index for a category moves outside its band1.5 index points week over weekWeekly digest to pricingDay-to-day wobble caused by basket changes rather than price changes
Below-MAP listingAn advertised price falls below the MAP in force for that SKU on that date1 percent or $1.00 below, held for the grace windowImmediate to the channel manager, with the timestamped capture attachedRounding artefacts and feed glitches that cure themselves within the hour
Match confidence droppedA confirmed match falls below the auto-accept band after a page changedAny fall below the accept bandDaily queue to the data ownerSilent substitution of the wrong product into a live price feed
Source degradedA source returns fewer successful checks than its established baselineBelow 95 percent of expected checks for that sourceImmediate to the data ownerThe worst failure of all: an empty dashboard that looks perfectly calm

Thresholds are starting points. Review them at week four: if a rule has fired more than twenty times without producing an action, it is measuring something you do not act on.

Three mechanics keep these rules quiet. Persistence: a condition must survive one full refresh cycle before it fires, which removes almost all transient noise. De-duplication: cap alerts per SKU per day. Hysteresis: once fired, the condition must clear by a wider margin before it can fire again, so a price sitting on the threshold does not toggle all day.

Alerts — last 24 hours

  • Voltbay cut Aurora H7 by 12%

    18 min ago

    $249.00 → $219.00. You are now $30.00 above the market low.

  • New MAP violation — DealVault

    42 min ago

    Ironside 20V Brushless Drill Kit listed 23.4% below MAP. Evidence captured.

  • Harborline feed recovered automatically

    3 hours ago

    Layout change detected at 04:12, new extraction recipe live at 04:19. No gap in history.

  • PrimeDeck out of stock on 4 tracked products

    5 hours ago

    Audio category. Repricing rules now ignore these listings.

  • Casa & Kin raised 9 prices overnight

    8 hours ago

    Home & kitchen, average +4.2%. Margin headroom opened on 6 of your SKUs.

  • New seller detected on 3 products

    11 hours ago

    Rivermark Trading appeared on PrimeDeck. Not in your authorised reseller list.

Alerts routed by rule rather than by volume. Each entry carries the observed price, the competitor, the depth of the undercut and the action expected.

The weekly review that turns data into decisions

Same agenda, same day, thirty to forty-five minutes. Data health is checked first, before anyone looks at a price, because reviewing prices from a feed you have not verified is how a program loses credibility in one meeting.

  1. 1Data health, 5 minutes. Coverage and freshness by source: anything below baseline, any match that dropped out of the accept band, any competitor whose last successful check predates the refresh interval. Fix these first, or note which numbers today are not trustworthy.
  2. 2Position, 10 minutes. Revenue-weighted price index by category, plus the position mix of lowest, matched and above. Compare against the same basket as last week, not whatever the basket is today.
  3. 3Exceptions, 15 minutes. The ten deepest undercuts on spine SKUs and the ten largest index movers. Each gets one of three outcomes: change the price, hold with a reason, investigate.
  4. 4Decisions and rules, 10 minutes. Record every decision with the date, the SKU, the observed competitor price and the reasoning. Update repricing rules and thresholds. Add or retire contested SKUs. If this meeting consistently overruns, the exception list is too broad and the thresholds need tightening.

Data quality — source health

Coverage

98.8%

of tracked URLs

Checks today

1,106

Auto-healed (7d)

7

no data gaps

Human queue

2

awaiting review

SourceMethodCoverageLast full passStatus
VoltbayStructured data100%38 min agoHealthy
HarborlineDomain recipe98.4%1 h 12 m agoSelf-healed

Recipe regenerated 3 h ago after a layout change

PrimeDeckMarketplace API99.6%22 min agoHealthy
Casa & KinDomain recipe96.1%2 h 04 m agoDegraded

12 URLs returning 404 — queued for re-discovery

Belmont DirectStructured data100%51 min agoHealthy

Incident log

  • Today 04:12HarborlinePrice selector returned null on 214 URLs.New extraction recipe generated and validated — live 04:19
  • Today 01:50Casa & Kin12 product URLs returned 404.Re-discovery queued via GTIN lookup
  • Yesterday 19:31PrimeDeckRate limit reached.Backed off and completed the cycle 22 min late
The first five minutes of the weekly review: coverage and freshness per source, with degraded sources flagged before anyone reads a price from them.

Programs that quietly die

  • Twenty competitors on the list, four of them actually relevant
  • Every price change generates an alert, so the channel gets muted in week three
  • Matches accepted in bulk at onboarding and never reviewed again
  • Nobody notices that one competitor stopped returning data in March

Programs that stick

  • Five to eight scored competitors, re-scored each quarter
  • Alerts tied to a named owner and a possible action, everything else in a digest
  • Low-confidence matches reviewed as a standing queue, with corrections fed back
  • Coverage and freshness checked first, every single week

The failure modes worth naming out loud

  • Silent data decay. A retailer moves price into a JavaScript-rendered component, or renames a class. The scraper still returns HTTP 200 and now finds nothing, or finds the crossed-out reference price instead of the sale price. Nothing errors. Your index drifts and you trust it. The defence is a freshness and plausibility check on every stored price, plus an alert when a source drops below its baseline.
  • Wrong matches feeding repricing. A 6-quart model matched to an 8-quart model looks like a $40 undercut, and a repricing rule obeys it. Guardrails such as a margin floor limit the damage. Match review prevents it.
  • Out-of-stock prices treated as live. A competitor showing $189 on a product they cannot ship is not a $189 competitor. Filter unavailable offers out of any average before it reaches a decision.
  • Comparing advertised price to your delivered price. If the competitor shows $199 plus $14 shipping and you show $209 delivered, the comparison as displayed is wrong. Pick advertised or delivered as your standard and hold it constant everywhere, including in competitor price monitoring reports that other teams read.

14 days

Free trial, no credit card

4 refresh tiers

Daily, twice daily, four times daily, hourly

0

Features gated behind a plan upgrade

Run this procedure on your own catalog

Load your SKUs, add your scored competitor list, and see matched prices with stock status and freshness on every row. 14-day free trial, no credit card.

Frequently asked questions

How do I monitor competitor prices without breaking anything?

Define the decision the data supports, score competitors and keep five to eight, choose SKUs in three buckets (revenue spine, price-perception items, contested SKUs), match products and confirm the low-confidence matches, set refresh to your category velocity, then set alerts that fire only on moves someone will act on. Review weekly, checking data health first.

How many competitors should I monitor?

Five to eight for most mid-market retailers. Beyond that, the matching and review workload grows faster than the insight, because every added competitor multiplies by your SKU count. Score candidates on catalog overlap, substitutability, visibility, price leadership, whether you can respond, and whether their price is observable at all. Keep the core band and re-score quarterly.

How often should competitor prices be checked?

Match the interval to how fast prices move in your category. Fewer than one change per SKU per month means daily is enough. One to four changes a month with weekend promotions calls for twice daily. Several changes a week calls for four times daily. Marketplace-driven intra-day movement calls for hourly. Any movement shorter than your interval is invisible permanently.

What should trigger a competitor price alert?

An undercut deeper than 3 percent or $5.00 on a revenue-spine SKU, held for one full refresh cycle, is a reasonable starting rule. Add a separate immediate alert for undercuts deeper than 10 percent. Everything else belongs in a daily or weekly digest. Cap alerts at one per SKU per day so a single flapping price cannot fill a channel.

Which products should I monitor if I cannot afford to monitor them all?

The SKUs producing roughly the first 80 percent of revenue, plus the items buyers price-check before trusting your store, plus any SKU currently contested. Exclude private label with no comparable, discontinued lines, and anything below a gross-margin-dollar floor. Writing the exclusions down matters as much as the inclusions.

Is it legal to monitor competitor prices?

Observing publicly displayed prices is ordinary competitive research and is widely practised. The legal questions concern how data is collected, such as terms of service, account access and rate of requests, rather than the fact of looking at a published price. See our guide on whether web scraping is legal. This is educational information, not legal advice.

How do I know my competitor price data is still accurate?

Check coverage and freshness before you read any price. Coverage is the share of expected checks that succeeded; freshness is the time since the last successful check per source. A source that silently returns nothing after a site redesign looks identical to a source with no news. Alerting on degradation, not just on price changes, is what catches it.

Start monitoring in the next ten minutes

Connect your store, match your catalogue and get your first competitor comparison in the same session.

14 days, no credit card, cancel in one click.