You're the category manager for dairy. Your boss wants to know if you're cheaper than Prisma, Rimi and Lidl on yoghurt. Half your range is your own brand, the competitors' yoghurts come in 150 g, 4 × 125 g and 1 kg tubs, and one of them shows a lower price only to loyalty members. Before you can answer the price question, you have to answer a harder one: which of their products is "the same" as yours?
Grocery product matching is the work of pairing each product in your range with the equivalent product at each competitor supermarket, so prices can be compared fairly. For branded goods that's often a barcode lookup. For private label, multipacks, weighed fresh goods and member prices, it needs rules. This guide walks through each case, with the Nordic and Baltic chains in mind.

Why is grocery product matching harder than other categories?
Grocery has many ways for the same product to look different. Pack sizes and multipacks change the price, private label has no exact twin at a competitor, fresh goods are priced by weight, and member prices, deposits and weekly campaigns all change what the shopper actually pays.
Electronics has model numbers. Fashion has photos and sizes. Grocery has all of these problems at once, across thousands of SKUs that turn over every week.
In a typical category file, the hard part isn't collecting the prices. It's the rows where someone has to decide whether "Arla 3% 1 l" matches "Arla Ko Standardmjölk 1 l" and whether Rimi's own-brand milk is a fair comparison to either.
Private label makes this bigger every year. Statistics Sweden (SCB) reported in September 2025 that sales of grocers' own brands in Sweden grew 11.6% in 2024, and its statistician noted that own brands are often priced a little lower than competing brands.
Every percentage point of private label is a share of your shelf with no barcode twin at the competitor.
How do you match branded grocery products?
Match branded products on the EAN first, then on brand, product name, size and pack count. If the EAN is the same, you have an exact match. If it isn't shown on the competitor's site, brand plus size plus pack count usually settles it. Reject any pair where size or pack count differ, however similar the titles look.
Two traps are common in the Nordics and Baltics:
- Local and imported versions. The same brand can sell a Finnish, Swedish and Baltic version of a product with different barcodes, languages on the pack and sometimes recipes. Decide up front whether these count as the same product for your comparison.
- Packaging changes. Sweden's deposit system shows how a pack can change while the product stays the same. Pantamera, which runs the Swedish deposit system, says that during 2025 the deposit rose from 1 to 2 SEK on cans and small PET bottles, and from 2 to 3 SEK on large PET bottles. It also warns that during the transition the same product can be found in two packaging types with two different deposit amounts. If your matcher relies on the barcode alone, it can lose the match when the new packaging appears.
Our post on why EAN matching fails covers the other barcode traps in detail.
How do you match private-label products across supermarkets?
You can't match private label exactly, because ICA's own yoghurt has no twin at Coop. Match it instead to the closest equivalent: same product type, same size, same quality tier. Compare a standard own-brand line with the competitor's standard own-brand line or with the leading brand, and label those pairs as similar, not identical.
Many chains run own-brand lines in tiers: a budget line, a standard line and a premium line. A fair comparison sets tier against tier. Comparing your premium own-brand pesto with a competitor's budget pesto tells you nothing useful about your price position.
A simple way to set this up:
- Define the tiers for each competitor once, per category. Write down which own-brand line is their budget, standard and premium.
- Match by role, not by name. "Standard own-brand natural yoghurt, 1 kg" at your store pairs with the same role at theirs.
- Keep similar matches visible. Flag them in the table so nobody reads a similar match as an exact one.
Our sister guide on grocery product matching (competitorproductmatching.com, also published by ScrapeWise) has a quick reference for this, including a table of match types from "same branded product, same size" to "loose or weighed goods".

How do you compare multipacks and different pack sizes?
Match the product first, then compare on unit price per kg, litre or item. A 6 × 330 ml pack and a 1.5 l bottle of the same drink are the same product in different packs, and the price per litre is the only fair comparison. Record the pack as an attribute of the match, not as a reason to reject it.
The order matters. If you convert to unit prices before matching, you end up comparing a branded 1.5 l cola with an own-brand 2 l cola because their litre prices look close. Match first (brand, product, variant), then convert. Watch for drained weight on canned goods and for "+20% free" packs, which change the unit price for a few weeks.
We covered unit price conversion step by step in price per unit across pack sizes. Unit prices make matched products comparable. They don't make different products the same.
How do you match fresh goods sold by weight?
Fresh meat, fish, cheese, fruit and vegetables usually don't share a barcode across chains. Match them by product type, cut, origin and quality claim, and compare the price per kg. The barcode on a weighed pack is usually a Restricted Circulation Number, not a global GTIN, so it can't reliably link products between retailers.
GS1 Sweden explains why. Consumer packs that vary in weight, such as meat, fish and cheese, are numbered with a Restricted Circulation Number (RCN) and priced from the item's kilo price and the pack's weight. An RCN is national, so a Swedish one can only be used in Sweden. GS1's global rules add that for variable-measure items the measure is an attribute of the product, so a heavier pack doesn't get a new GTIN.
In practice, define fresh matches as attribute rules: "Swedish minced beef, 10–15% fat, per kg" or "salmon fillet, Norwegian, skin on, per kg". Then compare kilo prices. Loose fruit and vegetables work the same way, with origin and class as the attributes that matter.
How should member prices, deposits and campaigns be handled?
Store them as separate price fields on the same match, never as a different product. Keep the shelf price, the member price, the campaign price with its dates and the deposit apart. Then you can compare like with like: shelf to shelf, member to member, and the effective price a shopper pays.
Member prices are now a normal part of Nordic grocery. ICA Gruppen says its Stammis loyalty programme had more than 5 million members at the end of 2024. Other chains run their own loyalty and member offers, so check each competitor's site for member-only prices. If you compare your shelf price with a competitor's member price, you'll think you're more expensive than most of their shoppers see.
Four fields cover most cases:
| Field | What it holds | Compare with |
|---|---|---|
| Shelf price | Price everyone pays | Competitor shelf price |
| Member price | Price with loyalty card or app | Competitor member price |
| Campaign price | Weekly or multibuy offer, with start and end date | Competitor campaign in the same week |
| Deposit | Pant or deposit added on top | Kept out of the unit price |
Multibuys such as "3 for 2", or "2 for €5" in euro markets like Finland and the Baltics, need the effective unit price worked out separately. For the timing of weekly campaigns, see the Nordic grocery price monitoring guide.
Does regional assortment change how you match?
Yes. Many chains carry a different range by store format and region, and some products are only sold online or in large stores. Match against the range a competitor actually sells where you compete, and mark products that a competitor only stocks in some stores. Otherwise your price index fills up with products your shoppers never see side by side.
The same applies across borders. A chain that operates in Estonia, Latvia and Lithuania may sell the same own-brand product under one name and different sizes in each country. Match per country, not per chain.
What does a good grocery matching process look like?
A good process runs the same steps every time: exact barcode matches first, then brand, size and pack count, then similar-product rules for private label and fresh goods, then pictures to break ties, and finally a person reviews the unsure pairs. Every match keeps its type, so reports can separate exact from similar.
This is where teams lose time. In Estonia, where I'm based, category managers often have an assistant who collects competitor prices by hand. The collecting is only half of it. The other half is the back and forth over which row matches which, in files named like "Category X_Prices_FINAL_v3.xlsx", with three people adding input before anyone can act.
The fix is a matching layer that does the obvious pairs automatically and only asks a person about the unsure ones. The short film below shows that third pile: matched, not matched, and "not sure, a person should look".

ScrapeWise, which publishes this blog, is one way to run this. You upload your product list as the master file, and rows match on a shared EAN first, then on title, brand and size, then on product pictures, with unsure pairs going to review. Text and EAN matching is priced at €0.15 per 1,000 products, and picture matching at €1.50 per 1,000 (minimum €1 per run). The charge is live in the wallet: a run reserves the most it can cost and settles to what it actually used (November 2026).
Our product matching page shows how it works, and the grocery industry page covers the wider setup. Other tools in the field, from monthly price trackers to enterprise platforms, are compared on competitorproductmatching.com, which ScrapeWise also publishes.
What should you do next?
Pick one category and 50 products: 20 branded, 20 private label, 10 fresh. Match them by hand against two competitors using the rules above, and note how long each type takes. That tells you where automation will save the most time, and which match types need clear rules first.
When you're ready to test it on real pages, run your own competitor URLs: the first 5 requests are free, no card needed. If most of your products have no barcode on the competitor's site, the guide to matching products without EAN is a good next read.
Paste your first URL and get structured data
No code, no credit card. Most public websites, turned into a table you can export.
Not ready to sign up? See 12 rows of real Amazon data →
5 free requests no credit card · pay per page, no monthly plan · book a 15-min call →