← Notes from the market
10 min read

Why a spreadsheet stops working at 100 SKUs

Spreadsheets are the right tool for pricing under 50 SKUs and the wrong tool above 100. Here is exactly where they break, and what replaces them.

pricingoperationsspreadsheetsaustralia

Every retailer we have ever spoken to runs their pricing in a spreadsheet at some point. Often for years. Sometimes for the entire life of the business. There is nothing wrong with that — for a long time, a spreadsheet is exactly the right tool.

And then one day, usually somewhere between 80 and 120 active SKUs, it quietly stops being the right tool, and nobody notices for a quarter. This piece is about where that line sits, what breaks first, and what to do when you cross it.

Spreadsheets are great. Until they are not

Let us be honest about what spreadsheets do well, because there is a tendency in the software industry to dismiss them and that is wrong.

A spreadsheet gives you a complete view of your pricing universe on a single screen. You can sort, filter, pivot. You can write a formula that ties your retail price to your cost plus a margin percentage and have it cascade across every row. You can mark up a SKU in seconds. You can colour-code by category. You can audit your own work, because every cell is visible and clickable.

For a business with 30 or 40 SKUs, two or three competitors per line, and weekly updates, this is genuinely a better tool than most software. The cognitive overhead is zero. The owner already knows it. There is no licence cost, no integration to maintain, no vendor to chase. The spreadsheet is portable, version-controlled (in OneDrive or Google Drive), and infinitely flexible.

If you are reading this and you have 50 SKUs, you do not need pricing software. You need a clean spreadsheet, a competitor list, and a recurring calendar block to update both. Genuinely.

The problem is not spreadsheets. The problem is what spreadsheets do at scale.

The 100-SKU wall

Something specific happens around the 100-SKU mark, and once you see it you cannot unsee it.

The first thing that breaks is not the formulas. Formulas scale fine. What breaks is the competitor price column.

A spreadsheet asks you to maintain, for every row, the current competitor price. To do that accurately you have to open three or four competitor websites per SKU, find the listing, copy the price, and paste it into the cell. For 30 SKUs across 3 competitors, that is 90 lookups — maybe an hour, weekly. Fine.

For 200 SKUs across 5 competitors, it is 1,000 lookups. Even at 20 seconds per lookup, you are talking five and a half hours of pure mechanical clicking. Nobody does that weekly. So they do it monthly. Then quarterly. Then they stop doing it at all and start guessing, or copying last quarter's prices forward, or just leaving the column blank for the SKUs that "do not matter" (every SKU matters to someone).

The wall is not the formulas. The wall is the human at the keyboard.

The four hidden costs

Once a spreadsheet crosses the line, four costs start compounding and most retailers do not notice any of them on the P&L until they are big.

The first is manual lookup time. If a pricing analyst is spending three days a month opening competitor websites, that is roughly a third of their job that does not produce any decision-making output — it is data entry. At $80,000 fully-loaded, that is $24,000 a year of human time you are spending to populate a column.

The second is data going stale within a day. The price you typed in on Monday is wrong by Tuesday afternoon. A spreadsheet has no concept of "this number is from Monday". It just sits there. Every decision made off that column on Wednesday, Thursday or Friday is being made on data older than the bread on your kitchen counter.

The third is no version history. When the competitor was $189 last month and is $159 this month, where is that history? Nowhere. The cell was overwritten. So you cannot answer "is this competitor getting more aggressive over time", which is the single most important pricing question a buyer ever asks. The data exists for one day, then it is gone.

The fourth is no audit of what changed and why. Someone bumped the retail on SKU 47 from $129 to $135 in week 3. Why? Who? Was it to chase margin, match a supplier increase, hold against a competitor? The spreadsheet shows the new number. It does not show the reasoning. Three months later, when sales on that line have dropped 15 per cent, nobody can reconstruct the decision.

None of these costs appear in any single P&L line. They appear as drift. The category quietly underperforms. The buyer cannot explain it. Nothing is broken. Everything is broken.

The "I will automate it with web scrapers" trap

About a third of the retailers we talk to have already tried to fix the spreadsheet problem the obvious way: pay a developer to write web scrapers that pull competitor prices into the sheet automatically. Sometimes this is a contractor. Sometimes it is the founder's son who is good with Python.

This works beautifully for about six months.

Then one of three things happens. The competitor redesigns their site, and the scraper breaks silently — it still runs, it still writes numbers into the sheet, the numbers are now last week's prices forever. Or the developer leaves, and nobody on the team can fix the scraper when it breaks. Or the competitor adds bot protection (Cloudflare, Datadome, whatever) and the scraper starts getting blocked, intermittently, in ways that look like real price changes ("competitor dropped to $0!").

We have audited maybe a dozen of these home-grown systems. Every single one had at least one silently broken scraper that had been returning the same stale price for weeks. Two of them had been wrong for over a year. In both cases the retailer had been pricing aggressively against a competitor who had moved on to a completely different price point.

The lesson is not "do not automate". The lesson is that ad hoc scraping is the worst of both worlds: you have the cognitive cost of a system you have to trust, plus the maintenance cost of one nobody owns. A retailer's job is not to run a scraping platform. Somebody else should do that and they should be on the hook when it breaks.

A real example — the SKU that drifted for 28 days

A homewares retailer we worked with had about 180 SKUs and three primary competitors. Their pricing spreadsheet had a "last updated" date column, which was a good instinct. The last update on most rows was the first week of March. We started looking at it together at the end of April.

One SKU — a mid-range floor lamp — had been their second-biggest revenue line in March. In April it was their twelfth-biggest. Nothing in the spreadsheet explained the drop. The cost had not moved. The retail had not moved. The "competitor price" column still showed $189, $195 and $179 for the three competitors, dated 4 March.

We opened all three competitor sites side by side. Competitor one was now at $149. Competitor two was at $155. Competitor three was at $159. The retailer had been sitting at $199 for the whole month, $40 above the cheapest competitor on a SKU where price was the dominant purchase driver. The traffic had quietly migrated. The sales had gone with it.

The damage over those 28 days was roughly $4,200 in lost gross margin on one SKU. It would have been caught in three minutes a day by a system that compared the live competitor price to the spreadsheet value. It was caught in eight weeks by a human and only after the category report flagged it.

What replaces the spreadsheet

The transition from spreadsheet to system does not have to be a forklift upgrade. The retailers who do this well replace four specific spreadsheet functions, one at a time, in roughly this order.

First, automatic catalogue tracking. A system that knows your SKUs and watches every competitor SKU that matches them. This is the spreadsheet column that broke first — the "current competitor price" column. Off the spreadsheet, onto a job that runs nightly.

Second, daily competitor refresh. The price you see at 8am every morning is the price the competitor showed yesterday. Not last week. Not last quarter. With history, so you can see how each competitor's price has moved over the last 30 days at a glance.

Third, rule-based repricing. Move from "we update the sheet on Friday" to "any competitor moves more than X per cent on a top-tier SKU and we get a notification". The rules can be simple. The point is that they are written down, applied consistently, and someone is on the hook for reviewing them.

Fourth, change history. Every price change tracked with who changed it, when, why, and what the competitor prices were at the moment of the change. That is what turns pricing from a black box into a decision your team can audit and learn from.

None of those four things require a 12-month transformation project. The first one alone — a system that watches competitors and updates a column — solves 60 per cent of the spreadsheet's failure mode.

When to make the switch — three honest signals

If you are wondering whether you have crossed the line, here are three signals we see again and again. None of them is theoretical. Each maps to a real pain we have watched retailers run into.

Signal one: you have more than 100 SKUs. Once you cross that line, the spreadsheet's competitor-price column starts going stale faster than you can refresh it by hand. The exact number depends on how many competitors you watch per SKU and how often the market moves, but 100 is the rough threshold across every category we have worked in.

Signal two: you watch more than five competitors regularly. Each additional competitor multiplies the lookup burden linearly. Five is roughly where weekly manual updates become an unsustainable use of someone's day.

Signal three: last week's spreadsheet has not been updated. If you check the file and the "last updated" timestamp is more than seven days old on any meaningful number of rows, the spreadsheet is no longer doing the job. The data is now decorative. Every decision being made off it is a guess dressed up as a number.

If two of those three apply to you, the spreadsheet has already stopped working. You probably just have not had the conversation with yourself yet.

What to do about it

Three concrete moves.

First, sort your spreadsheet by gross profit contribution and identify your top 50 SKUs. These are the ones that pay your rent. Whatever pricing system you use, those 50 are the ones that have to be right every day. Start there.

Second, list every competitor you currently price against. Be honest. If you cannot remember the last time you checked a competitor's price, you are not pricing against them — you are guessing. Trim the list to the competitors who actually matter, and commit to watching every one of them daily.

Third, decide who owns daily pricing decisions. Most retailers do not have a clear answer. The marketing lead might own promotions, the buyer owns cost, the owner makes the final call — and nobody owns the gap between them. That gap is where margin leaks out.

Follow the Market does the automatic catalogue tracking, daily competitor refresh, rule-based repricing, and change history that a spreadsheet stops being able to do at scale. It is built for AU retailers in particular — local competitors, AU sites, AU pricing conventions. If you are running a 200-SKU catalogue out of a 4,000-row spreadsheet and quietly suspecting that the column on the right is no longer telling you the truth, see how it works.

Want this for your catalogue?

Follow the Market watches every competitor on every line, every day. See how it works.

See how it works →
Why a spreadsheet stops working at 100 SKUs · Follow the Market