Short answer
- Match on the identifier
- Use the supplier SKU exactly as supplied, as text. Never match on product name, and check duplicates first.
- Same price basis
- Confirm unit, pack size, currency and VAT treatment are the same in both files before comparing a single price.
- Check both directions
- New file against old finds rises, falls, unchanged and new rows. Old file against new finds missing rows.
- Review before processing
- Statuses are prompts for a person to check, not instructions to change or delete catalogue records.
To follow along, download the two small fictitious sample files. No account is needed.
1. Check the price basis by hand
A price comparison is only meaningful if both files describe the same thing. Before matching anything, open both files and confirm with the supplier's covering note or terms:
- Unit and pack size: per item, per box, per roll or per case.
- Currency, and whether it is the same in every row.
- Whether prices include or exclude VAT, and any trade discount already applied.
The sample files have a Currency column but do not state VAT treatment or pack basis explicitly, so you cannot infer those from the data. Neither the formulas below nor Catalogix detect or convert units, packs or VAT for you. If the basis has changed, stop and resolve that first.
2. Import both files into Excel
These instructions are for modern Excel (Microsoft 365, Excel 2021 or Excel 2024). Opening a CSV by double-clicking lets Excel convert values automatically, which can strip leading zeros or alter codes, so import instead:
- In a new workbook choose Data > From Text/CSV and select the previous file.
- Choose Transform Data. Set the Supplier SKU column type to Text before any automatic type change is applied (remove an automatic "Changed Type" step if needed), so leading zeros and spaces are preserved exactly.
- For Cost Price, use Change Type > Using Locale, choose Decimal Number with English (United Kingdom), so the decimal point is read correctly.
- Load to a sheet and rename it Previous. Repeat for the new file on a sheet named Current.
Keep the original columns in A:E: Supplier SKU, Product Name, Category, Cost Price, Currency. Headers are on row 1. With the sample files, data runs from Previous!A2:A51 (50 rows) and Current!A2:A52 (51 rows). If Excel loads a table, you can convert it to a range so the plain A1 formulas below work as written.
3. Check identifiers and prices on both sheets
Add headers in row 1: F SKU check and G Checked price on both sheets. Enter the formula in row 2, then copy down to row 51 on Previous and row 52 on Current. The SKU check uses EXACT, which is case-sensitive, so it flags blanks, non-text values and duplicates.
=IF(OR(NOT(ISTEXT(A2)),A2=""),"Check SKU",IF(SUMPRODUCT(--EXACT(A2,$A$2:$A$51))>1,"Duplicate SKU","OK"))=IF(OR(NOT(ISTEXT(A2)),A2=""),"Check SKU",IF(SUMPRODUCT(--EXACT(A2,$A$2:$A$52))>1,"Duplicate SKU","OK"))=IF(ISNUMBER(D2),IF(D2>=0,D2,"Check price"),"Check price")Resolve every "Duplicate SKU" and "Check SKU" before comparing. The lookup in the next step returns the first match only, so a duplicate would silently hide the second row. The checked price returns "Check price" for blank, text, invalid or negative input. A price of 0 is allowed, but a percentage from an old price of 0 is not defined. Do not replace blanks with 0 or wrap formulas in IFERROR(...,0): that turns missing data into a fake price.
4. Compare prices on the Current sheet
On Current, add headers H Old price, I Status, J Price change and K Percentage change. Enter in row 2 and copy down to row 52. The old price uses XLOOKUP with EXACT and match mode 0, so matching stays case-sensitive.
=XLOOKUP(TRUE(),EXACT(A2,Previous!$A$2:$A$51),Previous!$G$2:$G$51,"Not in previous",0)=IF(NOT(ISNUMBER(G2)),"Check price",IF(H2="Not in previous","New in this file",IF(NOT(ISNUMBER(H2)),"Check price",IF(G2>H2,"Price rise",IF(G2<H2,"Price fall","Unchanged price")))))=IF(AND(ISNUMBER(G2),ISNUMBER(H2)),G2-H2,"")=IF(AND(ISNUMBER(G2),ISNUMBER(H2)),IF(H2=0,"Not defined",(G2-H2)/H2),"")Format column K as Percentage with two decimal places. The formula already returns a fraction, so do not multiply by 100.
5. Find rows missing from the new file
On Previous, add header H Reverse check, enter in row 2 and copy down to row 51.
=IF(SUMPRODUCT(--EXACT(A2,Current!$A$2:$A$52))=0,"Missing from new file","Present")"New in this file" and "Missing from new file" describe file membership only. A missing row does not mean the product is discontinued, and must not be deleted automatically. A "new" and a "missing" row may be the same product under a changed or reassigned SKU: check those pairs against the supplier's code crosswalk or ask the supplier.
6. Optional: warning keys for near-duplicate SKUs
Supplier codes sometimes differ only by case, stray spaces or non-breaking spaces (CHAR(160)). A normalised review key surfaces these. Add L Review key and M Similar-key count on each sheet.
=UPPER(TRIM(SUBSTITUTE(A2,CHAR(160)," ")))=SUMPRODUCT(--($L$2:$L$51=L2))=SUMPRODUCT(--($L$2:$L$52=L2))Worked example with the sample files
The sample files are fictitious office supplies from one supplier. Following the steps above gives these results:
- Previous rows
- 50
- Current rows
- 51
- Price rises
- 5
- Price falls
- 1
- New in this file
- 2
- Missing from new file
- 1
- Unchanged price
- 43
| SKU | Product | Status | Old price | New price | Change |
|---|---|---|---|---|---|
| DEM-001 | A4 copy paper 80gsm - box | Price rise | 20.00 | 25.00 | +25.00% |
| DEM-046 | LED desk lamp - variant 5 | Price fall | 38.00 | 35.00 | -7.89% |
| DEM-051 | Magnetic A3 whiteboard | New in this file | Not applicable | 22.50 | Not applicable |
| DEM-052 | 100x150 shipping labels - roll | New in this file | Not applicable | 9.95 | Not applicable |
| DEM-047 | A4 document tray - variant 5 | Missing from new file | 13.80 | Not applicable | Not applicable |
| DEM-020 | Medium shipping boxes - bundle - variant 2 | Unchanged price | 19.50 | 19.50 | 0.00% |
Prices are in EUR, as stated in both sample files; VAT and pack basis are not specified. "Not applicable" means the row exists in only one file.
Older Excel versions
XLOOKUP is not available in Excel 2016 or 2019. There you can use VLOOKUP in Current!H2 instead. It returns column 7 (the checked price in G) with exact match (FALSE()):
=IFNA(VLOOKUP(A2,Previous!$A$2:$G$51,7,FALSE()),"Not in previous")When Excel is enough, and when to use Catalogix
For a small, clean, occasional update, the workbook above is enough. When the same suppliers send new versions repeatedly, rebuilding columns and ranges each time becomes the work. Catalogix keeps a saved field mapping per supplier and a review step between versions:
- Add the supplier.
- Import the previous CSV or XLSX, map the fields and select Supplier SKU as the product key.
- Import the new version from the same supplier.
- Review rises, falls, new and missing rows.
- Export a CSV for your own import process.
It compares versions from one supplier at a time; it does not read PDFs, match across suppliers or sync to an ERP. See the sample workflow or compare plans.
The sample files and formulas need no account. Using Catalogix requires registration: 7-day free trial, no card, up to 2,000 rows per import.
Start free trial