Compare supplier price lists by SKU and flag changes
A supplier sends a new price list. Before you update a single store price, you need to know which rows actually changed: price increases, pack-size changes, new products, dropped products, and anything you can’t compare yet.
This guide produces one output: a delta report that matches old and new rows by SKU, compares like with like, and puts every exception where a person can review it. Store updates happen later, from the reviewed report.
If you still need to build a clean SKU table from a supplier’s product pages, start with Turn a Supplier Catalog Into a Checked SKU Spreadsheet. This guide assumes you already have two versions to compare.
What you need before comparing
- Both price lists, old and new, as files or pages you are authorized to use.
- The SKU column in each, with a note if the supplier renamed it (for example “Item No.” in one file and “Code” in the other).
- Unit and pack-size fields, so a price per case isn’t compared with a price per item.
- The currency of each list, written down explicitly rather than assumed from a symbol.
- Your store’s current SKUs, if you want to know which changes affect live products.
Step 1: Protect the SKUs before you open anything
Spreadsheets damage SKUs quietly. Microsoft’s documentation on keeping leading zeros and large numbers says Excel automatically removes leading zeros, converts large numbers to scientific notation such as 1.23E+15, and keeps only 15 significant digits. Digits past the 15th become zero.
That breaks matching. 004512 becomes 4512, and two long barcodes can collapse into the same value.
To prevent it:
- Import with Power Query (Get & Transform) and set the SKU column to Text, or use the Automatic Data Conversions settings in Excel 365/2024 and later.
- Format the column as Text before pasting or typing values.
- Don’t rely on custom number formatting to fix it afterward. Microsoft notes it does not restore zeros that were already removed.
Then spot-check a few SKUs against the supplier’s original file.
Step 2: Match rows by SKU, not by row position
Supplier lists get re-sorted, re-grouped and extended. Match on the SKU text exactly, then sort every row into one of these groups:
| Group | Meaning |
|---|---|
| Matched | SKU appears in both lists |
| New SKU | Only in the new list |
| Missing SKU | Only in the old list |
| Duplicate | SKU appears more than once in either list |
Keep missing SKUs and new SKUs separate. A missing SKU might be discontinued, renamed or accidentally left out. A new SKU might be a replacement. Neither is a price change, and both need a decision from someone who knows the supplier.
Step 3: Normalize units before comparing prices
A price only means something with its unit. If the old list sells a case of 12 and the new list sells a case of 10, compare a per-item price:
- Old: 24.00 ÷ 12 = 2.00 per item
- New: 21.00 ÷ 10 = 2.10 per item
The case price went down, but the per-item price went up by 5%. Report both, and flag the pack-size change itself.
Only normalize units that are actually comparable (items to items, grams to kilograms). If one list sells by weight and the other by count, mark the row as an exception instead of guessing a conversion.
Step 4: Keep currencies separate
Never convert currencies silently. If both lists state the same currency, compare directly. If a row has no currency, a different currency, or a symbol that could mean several currencies, put it in an unresolved currency group. Converting it is a separate business decision.
The delta report (illustrative)
This table is an illustrative example with made-up SKUs and prices. It is not from a real supplier or a Dassi run.
| SKU | Unit (old → new) | Currency | Old price | New price | Per-unit change | Exception status |
|---|---|---|---|---|---|---|
| 004512 | each → each | USD | 3.40 | 3.65 | +7.4% | Price increase |
| 004513 | each → each | USD | 5.10 | 5.10 | 0% | Unchanged |
| 018220 | case/12 → case/10 | USD | 24.00 | 21.00 | +5.0% per item | Pack size changed |
| 018221 | — → case/6 | USD | — | 15.00 | — | New SKU |
| 020007 | each → — | USD | 8.75 | — | — | Missing from new list |
| 031900 | each → each | USD → not stated | 12.00 | 11.50 | — | Unresolved currency |
A reviewer should be able to accept, reject or query each row without reopening either source file.
Step 5: Check the report against your store format
If the reviewed changes will go into Shopify, read the product CSV documentation before building an import file:
- Price must be a number with no currency symbol, such as
9.99. A blank price defaults to0.00, so a missing new price must never become a blank cell. - Compare-at price is also numeric with no symbol and shows the original price when a discount applies.
- Markets with their own catalogs use separate
Price / [Market]columns. Don’t paste a supplier’s foreign-currency cost into the wrong market column. - With Overwrite products with matching handles selected, blank non-required columns clear existing data, and removing dependent option data can delete variants. Import only the columns you mean to change.
- Files must be UTF-8 with a comma-separated header row. If you export from Excel, check that the separator really is a comma.
A reusable prompt
You can run this comparison by hand or give it to an AI assistant. This version is read-only:
Compare these two supplier price lists by SKU. Do not edit any store or file.
Old list: [file or page]
New list: [file or page]
SKU column names: old = [name], new = [name]
Rules:
- Treat SKUs as text. Preserve leading zeros exactly.
- Match rows by exact SKU, never by row position.
- Report new SKUs, missing SKUs and duplicates in separate groups.
- Compare per-unit prices only when units are comparable; flag pack-size changes.
- Do not convert currencies. List rows with a missing or mismatched currency as unresolved.
- Do not guess any value that is not shown in the source.
Return a table: SKU, unit (old → new), currency, old price, new price,
per-unit change, exception status. Then list rows needing human review.
Review checklist
- SKU count in the report equals matched + new + missing rows
- Spot-checked SKUs keep their leading zeros
- No SKU shows scientific notation or trailing zeros past 15 digits
- Every pack-size change shows a per-unit comparison or an exception
- Unresolved currencies are listed separately, not converted
- No new price is blank in anything headed for a store import
- A person approved the report before prices changed
Where Dassi fits
Dassi is an AI browser agent that runs as a side panel in Chrome, Edge or Brave. Browser actions run on your machine using the accounts you’re already logged into, so it can read a supplier portal page or a price list open in your browser. Page content and your instructions go to the AI provider you choose. You can use your own API key or Dassi credits.
If the comparison repeats with every supplier update, you can save it as a workflow, run it on demand or on a schedule, review its run history, and have it pause for your approval. The decision about which prices to change stays with you.
Matching photos to variants is a separate catalog job. For that, see Match supplier photos to Shopify variants.
Next step
Start small. Open two authorized price lists and ask Dassi to compare five matching rows by SKU and return a change report in the table format above. Check those five rows by hand before you trust a longer run.