How to Monitor Competitor Prices Without Code (2026 Workflow)
By M H TawfikUpdated 13 min read
To monitor competitor prices without code, capture each competitor's category or search pages into a spreadsheet on a weekly cadence with a no-code browser extension, append every run to a dated log tab, and match their products to your SKUs with lookup formulas. From there, simple delta and price-index calculations show exactly where you are being undercut — no scripts, no developers, no scraping service.
This guide walks small shop owners and marketers through the full workflow: building the competitor and SKU master list, running repeatable captures, matching products with VLOOKUP and XLOOKUP, computing price-position metrics, and setting up alerts so the sheet tells you when something moves.
Why build a competitor price tracking spreadsheet?
A competitor price tracking spreadsheet gives you a dated, sortable record of every rival's price for every product you both sell. Checking competitor sites by hand captures one product, one moment, with no memory. A sheet captures the whole catalog, timestamps it, and lets you compare this week against last week in one sort.
For a small shop, that history answers the questions that drive pricing decisions: am I being undercut, and on which SKUs? Who moved first? Is their "sale" real, or the same price with a new badge? Where can I raise prices without losing position?
Dedicated platforms exist, but most small catalogs do not need one. The spreadsheet version costs nothing, keeps your data on your own machine, and takes about an hour to set up. Here is the workflow, step by step.
Step 1: Define your competitor set and SKU match list
Start with a master spreadsheet — your price-monitoring workbook — and create a SKU Map tab before you capture anything. This tab is the backbone of the system: it decides who you watch and which of their products map to yours.
Keep it deliberately small at first:
- Pick 2–5 competitors. The shops that show up next to you in search results, not every store on the internet.
- Pick 20–100 SKUs. Your best sellers and the products where price drives the buying decision.
- Build the match list. One row per your SKU × competitor pair, with these columns:
| Column | Example |
|---|---|
Your SKU | HX-200 |
Your Product | Wireless Headphones X200 |
Your Price | 129.99 |
Competitor | Store A |
Their Product Name | X200 Wireless Over-Ear |
Their URL | the competitor's product link |
Match Key | hx-200-storea |
The Match Key is just a unique, stable identifier you invent — usually your SKU plus the competitor name. Every formula later in this workflow joins data through this key, so settling it now saves rework later.
Step 2: Run weekly captures on competitor category pages
Each week, open each competitor's category or search results page and capture the visible product list with a no-code collector like Calquer. It auto-detects the repeating product grid on the page, so you are not clicking field by field or writing selectors — you confirm the pattern, pick columns, and run.
The capture routine per competitor:
- Open the category or search page that contains your tracked SKUs. A filtered search ("wireless headphones") is often tighter than a broad category.
- Let the extension detect the product grid. Confirm it locked onto the product cards, not a promo rail.
- Keep five columns and rename them before export:
Product,Price,Availability,URL,Captured Date. Renaming at capture time means every weekly file lands with identical headers. - Collect across scroll and pagination so you get the full list, not just the first screen. If the competitor's catalog lazy-loads or splits across numbered pages, see how to capture infinite scroll and pagination to CSV.
- Export as CSV or copy the rows straight into Google Sheets or Excel.
The Availability column matters more than it looks: a price you cannot buy at is not a price you need to beat. If a competitor sells through a large marketplace, the capture works the same way on its search results — the workflow in scrape Amazon product data to CSV covers the marketplace-specific details.
Step 3: Append every snapshot to a log tab
Create a Log tab in your workbook and append each capture to the bottom of it — never overwrite. Add a Date column carrying the run date and a Competitor column naming the source, so every row is self-describing. After a few weeks the log looks like this:
| Date | Competitor | Product | Price | Availability | URL |
|---|---|---|---|---|---|
| 2026-05-28 | Store A | X200 Wireless Over-Ear | 124.50 | In stock | … |
| 2026-06-04 | Store A | X200 Wireless Over-Ear | 124.50 | In stock | … |
| 2026-06-11 | Store A | X200 Wireless Over-Ear | 109.00 | In stock | … |
Use a sortable date format — 2026-06-11, year-month-day — so the log orders correctly. In Google Sheets, paste new rows under the last row; in Excel, paste or load each CSV through Data → From Text/CSV. If you are building this in Excel end to end, turning a website into an Excel sheet covers the import side.
The log is append-only. Never "fix" or delete old rows — the entire value of the system is an untouched history you can trust when you ask "what did Store A charge three weeks ago?"
Step 4: How do you match competitor products to your SKUs?
Match competitor rows to your SKUs by normalizing the captured product names, then joining them to your SKU Map with a lookup formula. Competitors will not use your product names, so this matching layer is what turns a pile of captured rows into a comparison.
Normalize first. Captured names arrive with stray spaces, mixed case, and currency symbols stuck to prices:
Clean name (Sheets or Excel):
=LOWER(TRIM(C2))
Numeric price from "$1,299.00" (Google Sheets):
=VALUE(REGEXREPLACE(D2, "[^0-9.]", ""))
Numeric price (Excel):
=VALUE(SUBSTITUTE(SUBSTITUTE(D2,"$",""),",",""))If competitors price in different currencies, convert everything to one currency in a helper column — in Google Sheets, =D2*GOOGLEFINANCE("CURRENCY:EURUSD") converts a euro price to dollars. Comparing mixed currencies raw will quietly corrupt every metric downstream.
Then join on the match key. In the Log tab, add a Match Key column (match the captured name or URL to the pairs from Step 1), then pull your own price next to each competitor row with any of these:
XLOOKUP (Sheets and modern Excel):
=XLOOKUP(G2, 'SKU Map'!G:G, 'SKU Map'!C:C, "no match")
VLOOKUP (works everywhere):
=VLOOKUP(G2, 'SKU Map'!G:I, 3, FALSE)
INDEX + MATCH (when the lookup column is to the right):
=INDEX('SKU Map'!C:C, MATCH(G2, 'SKU Map'!G:G, 0))XLOOKUP is the most forgiving — it returns a clear "no match" instead of an error and does not care about column order. Whichever you pick, every captured competitor price now sits beside your price for the same product.
Matching is genuinely the hard part — the capture-and-append mechanics are the same as any no-code price tracking spreadsheet, but the SKU Map is what makes it competitor tracking.
Step 5: Which metrics tell you where you stand?
Three calculations turn matched rows into a market position: the week-over-week delta, the price index versus you, and the share of SKUs where you are cheapest. Each is one short formula on top of the log:
| Metric | Formula | What it tells you |
|---|---|---|
| Week-over-week delta | =D3-D2 with the log sorted by match key, then date | Whether this competitor moved since the last capture — negative means a cut |
| Price index vs you | =100*TheirPrice/YourPrice | Below 100 = they undercut you on this SKU; 95 means they are 5% cheaper |
| Lowest market price | =MINIFS(Price, MatchKey, "hx-200") | The price to beat on a SKU across all tracked competitors |
| Cheapest % | =COUNTIF(PositionRange,"You")/COUNTA(PositionRange) | The share of your tracked catalog where you hold the lowest price |
| Average index per competitor | =AVERAGEIF(CompetitorRange,"Store A", IndexRange) | Whether a rival prices above or below you overall, not just on one item |
For the Cheapest %, add a Position helper column labeling each SKU's leader: =IF(YourPrice<=LowestMarketPrice,"You","Them"). If your cheapest % slides from 60% to 40%, the market moved and your sheet caught it.
The price index is the metric worth internalizing. A single undercut is noise; a competitor whose average index drifts from 102 to 94 over a month is a strategy change — the kind of pattern only dated history reveals.
Step 6: How do you get alerted when a competitor changes price?
Set up alerts in two layers: conditional formatting to make changes visible the moment you open the sheet, and Google Sheets notification rules to email you when the alert area changes. Neither needs a script.
Layer 1 — conditional formatting. On your comparison view, add custom-formula rules:
- Highlight undercuts: format rule
=$F2<100(price index below 100) in amber. - Highlight fresh cuts:
=$E2<=-5(week-over-week delta of −5 or more) in red. - Highlight stock-outs:
=$D2="Out of stock"in gray — a chance to win the sale without touching your price.
Layer 2 — a flags tab plus notification rules. Create an Alerts tab containing only the rows that need attention:
=FILTER(Compare!A:G, Compare!F:F < 100)Then turn on Tools → Notification settings in Google Sheets and choose email when changes are made. Notification rules fire on any edit, which is why the FILTER tab matters: when your weekly paste produces new undercuts, the Alerts tab re-renders with new rows, and the change email becomes your signal to go look.
Do not chase every alert with a price change. Reacting to every competitor move trains a race to the bottom. The sheet's job is to inform a weekly pricing decision, not to trigger a reflex.
Step 7: Cadence and hygiene that keep the data trustworthy
Run every capture on the same day and at roughly the same time — for example, Monday at 9 a.m. — so week-over-week deltas compare like with like. Prices move during sales weekends; a Friday snapshot against a Monday snapshot will manufacture phantom changes.
The habits that keep a monitoring sheet honest:
- Same pages, same columns, every run, so files always line up.
- Keep raw snapshots. Save each week's exported CSV in a dated folder before pasting it into the log. When a formula misbehaves in week 12, the raw files let you rebuild.
- Never edit the log — derive instead. Cleanup and matching live in helper columns; the log stays exactly as captured.
- Browse at a human pace. One pass per competitor per week is normal browsing; respect each site's rate limits.
- Spot-check monthly. Open three random competitor URLs and confirm the live price matches your latest captured row — it catches silent layout changes early.
When is a spreadsheet no longer the right tool?
A spreadsheet workflow works well up to roughly a few hundred SKU-competitor pairs on a weekly cadence — beyond that, the right tool is a dedicated repricing or market-intelligence service. Honest boundaries:
- Hundreds of SKUs across many competitors. Capture and matching time grows linearly; when the routine takes hours, the labor cost exceeds a subscription.
- Hourly or real-time repricing. A manual weekly snapshot cannot drive dynamic pricing. Marketplace repricers react in minutes; a sheet never will.
- Marketplaces with aggressive bot checks. Occasionally capturing a page you can already see is fine, but if monitoring means fighting CAPTCHAs and login walls, switch to an official API or a licensed data provider.
- Automated price-match guarantees. A contractual promise to match prices needs monitored, audited data — not a homemade log.
For a small shop watching its real rivals weekly, none of those usually apply, and the spreadsheet earns its keep. When you outgrow it, the SKU Map transfers directly into whatever service you adopt.
Is it legal to monitor competitor prices?
Viewing and recording prices a competitor displays publicly is generally fine — prices are public, factual information, and noting them in a spreadsheet is what shoppers and analysts have always done. Three guardrails still apply: respect each site's terms of service, keep your capture pace gentle and human, and use the data for your own analysis rather than republishing it. For the fuller picture, read Is Web Scraping Legal? — and treat none of this as legal advice.
Where the capture runs also matters. A cloud scraping service fetches competitor pages from its servers and stores your competitive research on someone else's infrastructure. Calquer works the other way: it runs 100% on-device in Chrome, Firefox, or Edge, reads only the page you are already viewing, and exports locally with no account — your pricing intelligence never leaves your machine.
FAQ
How do I monitor competitor prices without code?
Capture each competitor's category or search pages into a spreadsheet weekly using a no-code, pattern-detecting browser extension, with columns for product, price, availability, URL, and capture date. Append every run to a dated log tab, match products to your SKUs with XLOOKUP or VLOOKUP, and compute deltas and a price index. No scripts or servers required.
How many competitors and SKUs should I track?
Start with 2–5 direct competitors and 20–100 of your best-selling, price-sensitive SKUs. That is enough to read the market without making the weekly routine a burden. Expand only after the capture-append-review loop runs reliably for a month.
What if competitor product names don't match mine?
They almost never will — that is what the SKU Map tab solves. Define one row per your SKU × competitor pair with a stable match key, normalize captured names with TRIM and LOWER, then join through the key using XLOOKUP, VLOOKUP, or INDEX+MATCH. Model numbers make the most reliable keys.
Can Google Sheets email me when a competitor drops a price?
Yes: build a FILTER-driven alerts tab that only shows SKUs where the price index falls below 100, then set Tools → Notification settings to email on changes. When your weekly paste produces new undercuts, the alerts tab updates and the notification fires.
How often should I capture competitor prices?
Weekly fits most small e-commerce catalogs — frequent enough to catch strategy shifts, light enough to sustain. Move to twice weekly during sale seasons like Q4, and monthly for slow, stable categories. Whatever cadence you choose, capture on the same day and time so deltas compare cleanly.
Why are my price deltas showing changes that didn't happen?
Usually one of three hygiene issues: captures run on different days or times, prices stored as text because of leftover currency symbols, or mixed currencies compared raw. Fix them with a fixed capture schedule, =VALUE(REGEXREPLACE(D2,"[^0-9.]","")) to force numeric prices, and a single conversion currency for all competitors.
Ready to see where you stand? Add Calquer to your browser and turn your competitors' category pages into a price-monitoring spreadsheet this week — free, no code, 100% on your device.