Match any product across retailers. Every match checked.
AI reads each listing the way a shopper would, works out what the product is, and matches it across sellers, with no barcodes or hand-written rules, in any category. Then it checks every match and records why it was made.
- TescoHovis Soft White Medium Sliced Bread 800G
- AsdaHOVIS Soft White Medium Bread 800g
- Sainsbury'sHovis Soft White Medium Sliced Bread 800g
- MorrisonsHovis Medium White Bread 800g
One product, 4 sellers
Hovis Soft White Medium Sliced Bread
800g, ambient, groceries > bread
- CheckedBrand and size known before matching
- CheckedSize agrees: 800g on all four listings
- CheckedMatch confidence 0.94, above the 0.8 review line
Similar titles are not the same product.
Name matching is fooled by a single number. To a string comparison, a 400g loaf and an 800g loaf are near identical, so a price tracker that merges them reports a price cut that never happened. The same goes for XM4 and XM5, cream and lotion, bare tool and kit.
How to match products without barcodes ›Hovis Soft White Medium Sliced Bread 400g
Hovis Soft White Medium Sliced Bread 800g
Name matching
98% similar, merged
catalogued.ai
Two products, size differs
Four passes, no hand-written rules
- 1
Read
The model reads the title, size, ingredients, storage advice and photo together, the way a shopper would.
- 2
Decide
It works out what the product physically is: brand, range, variant, size, colour, kit contents, whatever matters in that category.
- 3
Match
Listings that describe the same product become one. Near misses stay apart. No barcodes needed, so own-label goods match too.
- 4
Check
Mechanical checks and a model review run over every label after matching. Anything they cannot settle goes to one queue with the evidence attached, worked causes first.
Every match checked. Not a sample.
A wrong match costs more than a missing one. So nothing goes into your data on the model's word alone.
Checked, not sampled
Automatic checks run over every product after matching. Anything they cannot settle goes to a review queue with the evidence attached, never quietly into your data.
Mistakes don't come back
When a reviewer finds a new kind of error, we add the check that would have caught it, and it runs on everything from then on.
Every match explains itself
Each match keeps its confidence, its reasons and a full change history, so you can audit it or show it to your own customers.
A queue item, as the reviewer sees it
Braeburn Apple 4-6 pack, own label
- Found by
- Matching review, group matching, confidence 0.9
- Finding
- Two Waitrose listings on one product: a 4 pack and a minimum-5 pack. A retailer lists an item once.
- Evidence
- Waitrose Braeburn Apples 4s £2.00, confidence 0.85
Waitrose Braeburn Apples minimum 5 £1.85, confidence 0.85 - Suggested fix
- Deep-check the variant, detach the odd one out, re-run matching for the label.
- Outcome
- Resolve, dismiss, or escalate to a person with what was tried.
The checks running today
Cheap mechanical checks run first and often; a model review reads each label whole. The list grows whenever a reviewer finds a new kind of mistake.
- mechanical
Preflight, before any matching spend
Every listing in scope must have a brand and a usable size, and open questions about them must be settled first. Otherwise matching does not run.
- mechanical
Vocabulary checks
The same item filed under two labels (title similarity 0.99 or higher), two labels one spelling apart, and sizes that contradict their own title. Found by embeddings and text, no model needed.
- mechanical
Size by siblings
A listing whose size is ambiguous takes the amount its product-mates and near-identical titles at other retailers agree on, within 2%. If they split, it waits for a deep check.
- model
Label review
One call per label reads every listing grouped by product: retailer, title, brand and its relation, size, price, confidence. Findings come back by group with the ids, the reasoning and a suggested tool.
- mechanical
Low confidence and size stretch
Any match under 0.8 confidence is queued. A member more than 25% from its product's median size is queued when the retailer had a closer-sized listing that should have matched instead.
- mechanical
Flip-flops
The change log is read for a fact that went back to a value it had already left. Renames and merges do not count. The fix is to decide and lock.
- model
Deep check, on demand
Fetch the live product page and photo once, cache them, and re-judge the label, brand, size or variant with storage, ingredients and description as evidence. It writes nothing; a person decides.
- mechanical
One queue, one log
Findings are keyed by fingerprint, so a re-run updates rather than duplicates, and a finding that no longer reproduces is marked gone. Every fact change is audited in the same transaction.
Work order: causes before symptoms
- brand
- size
- label
- matching
- other
- low confidence
A wrong brand or size explains a wrong match, so the queue is worked in this order. An unattended pass takes each item in turn under a spend cap and must resolve, dismiss or escalate it; nothing is left half done.
Every fact holds one value with a full change log. A person's lock is the only thing no writer overrides.
Any category. The model learns what matters in each.
There is no grocery-specific code and no electronics-specific code. The same passes run everywhere; what changes is which details decide a match.
Groceries
size, variant, chilled or ambient
Electronics
model number, generation, colour
Home & DIY
bare tool or kit, voltage, pack size
Beauty
form, volume, shade
Pet
life stage, flavour, bag weight
Pharmacy
strength, count, formulation
Search by what it is, not what the listing says.
Retail filters are a flat list of boxes filled in by hand, one value each: type, size, material. They cannot say which end is 15mm, cannot describe a fitting whose ends connect differently, and every retailer fills them in its own way. Here the model reads each listing and its product page into a spec: the fitting type, then the size and connection at every port. Search runs on the spec, so you point at the fitting you need.
2,149plumbing fittings from Screwfix and Toolstation, read into specs across 9 fitting types
Type
Tee
Elbow
Coupler
Reducer
Size
15mm
22mm
28mm
1/2in
Brand
Endex
Flomasta
Hep2O
JG Speedfit
Material
Brass
Copper
Plastic
Connection type
Push-fit
Compression
End feed
Colour
White
Grey
Chrome
Pack size
1
2
5
10
+ 14 more filters
264 results
Endex Copper End Feed Reducing Tee 22mm x 15mm x 15mm
✗ End feed, and one run is 15
Flomasta Brass Compression Reducing Tee 15mm x 15mm x 22mm
✗ Compression, and the branch is 22
Yorkshire Copper Solder Ring Reducing Tee 22mm x 15mm x 22mm
✗ Solder ring
…and 261 more to read through.
30 tees of that exact shape: Screwfix 18, Toolstation 12
- ScrewfixHep2O Plastic Push-Fit Reducing Tee 22mm x 22mm x 15mm£6.99
- ToolstationHep2O Branch Reduced Tee 22 x 22 x 15mm£7.09
Each retailer's own words, one spec. …and 28 more.
Three trade words, one fitting
Coupler, reducer, adaptor, bush and nipple are all one straight fitting, told apart by its ends, not by what the retailer called it.
Hep2O Plastic Push-Fit Reducing Coupler 22mm x 15mm
- straight
- reducing
- tube 22 push-fit
- tube 15 push-fit
What the title leaves out
A tank connector's thread is never written: 15mm means 1/2in BSP male. The spec says so, and marks the port as inferred.
JG Speedfit Plastic Push-Fit Tank Connector 15mm
- tank connector
- tube 15 push-fit
- BSP 1/2 male, inferred
What fits, not what is equal
An adjustable 0-90° bend turns up in a search for 45°. A >B<Press fitting turns up for someone holding M-profile jaws.
FloPlast Push-Fit 0-90° Double Socket Adjustable Bend 110mm
- elbow
- angle 0-90
- soil 110 push-fit
The awkward jobs too
Lead pipe is sized by bore and weight per yard. Read that way, an old-house repair is as searchable as a new install.
Unbranded Lead to Copper Coupler 1/2" 7lb x 15mm
- straight
- lead 1/2 7lb compression
- tube 15 compression
Try it on your own listings
Send us a sample from the retailers you track. We'll send back the matches, with the checks each passed and the reason for each.