Guide
How to track competitor prices in Google Sheets (free)
7 min read
If you want to track a handful of competitor prices without paying for a tool, Google Sheets can do it - for free. It takes some setup and has real limits, but it works. Here are two approaches (a quick one and a robust one), the gotchas, and the point where a spreadsheet stops making sense.
The quick way: IMPORTXML on a product page
Google Sheets' IMPORTXML can pull a price straight off a product page using an XPath to the price element. In a cell:
=IMPORTXML("https://competitor.com/products/some-product", "//span[contains(@class,'price')]")The robust way: Apps Script on products.json
The reliable approach reads Shopify's structured products.json instead of scraping HTML, so it doesn't break on a redesign. Plain IMPORTDATA/IMPORTXML can't parse JSON, so you use a small Apps Script function (Extensions > Apps Script), then call it like a formula:
function SHOPIFYPRICE(storeUrl, handle) {
const url = storeUrl.replace(/\/$/, '') + '/products/' + handle + '.json';
const data = JSON.parse(UrlFetchApp.fetch(url).getContentText());
return data.product.variants[0].price;
}
// then in a cell:
// =SHOPIFYPRICE("https://competitor.com", "some-product-handle")Building the tracker
- 1List your competitor product URLs (or store + handle) down column A.
- 2Add a price column using IMPORTXML or the SHOPIFYPRICE function above.
- 3Add a 'last checked' column with =NOW() so you can see freshness.
- 4Optionally, copy the price into a dated column each day to build a history.
- 5Set the sheet to recalculate (Apps Script triggers can refresh on a schedule).
The limits you'll hit
A spreadsheet works for a small, static list. Here's where it breaks down:
- No real alerts - you have to open the sheet and notice a change yourself. The whole point of monitoring is to be told, not to check.
- It breaks silently - IMPORTXML stops working on a redesign, cells error out, and you don't find out until you look.
- No history by default - you only see today's price unless you manually snapshot it each day.
- It doesn't scale - 5 products is fine; 50 products across 10 competitors becomes a maintenance project.
- No stock, new-product or removal tracking - just whatever price you wired up, one cell at a time.
When to stop spreadsheeting
The spreadsheet is a great way to prove the value to yourself. But the moment you're tracking more than a few products, or you catch yourself forgetting to check, it's costing you more time than it saves - and you're missing the changes that happen between your checks.
Shop Sentry does the same job automatically: paste a competitor's domain and it tracks every product's price and stock, keeps the full history, and alerts you by email or Telegram the instant something changes - no formulas, no broken XPaths, no forgetting. Its free plan covers one competitor store, so you can replace the sheet for free.
Frequently asked questions
Can Google Sheets track Shopify prices?
Yes - IMPORTXML can pull a price from a product page, or an Apps Script function can read the stable price from the product's .json. Both are free; the Apps Script method is more reliable because it doesn't break on redesigns.
Why doesn't IMPORTDATA work on products.json?
IMPORTDATA and IMPORTXML are built for CSV and HTML/XML, not JSON. To read products.json in Sheets you need a short Apps Script function using UrlFetchApp (shown above).
Can the sheet alert me when a price changes?
Not out of the box - you'd have to build email triggers in Apps Script, and even then it's fragile. For reliable instant alerts, a monitoring tool is far less work.
When should I switch from a spreadsheet to a tool?
Once you're tracking more than a few products, want stock/new-product tracking too, or keep forgetting to check. That's when the manual sheet costs more time than it saves.
