
Receipt-to-SKU matching: abbreviations, bundles, and lookalike products
How to turn ambiguous receipt line items into defensible product matches for loyalty and promotions, including uncertainty and human review.
The product name on a campaign brief rarely appears unchanged on a receipt. A shopper buys “North Coast Sparkling Water Lime, 6 × 1.5 L.” The retailer prints N COAST LM 6PK, SPK WTR LME, or an internal numeric code. Receipt extraction can reproduce that line perfectly and still leave the campaign unable to decide whether the purchase qualifies.
Receipt-to-SKU matching is therefore a separate task from OCR. It connects noisy retailer text to a product catalogue while preserving uncertainty when the evidence does not identify one product safely.
Start with a catalogue fit for matching
A campaign catalogue needs more than a marketing name. For each eligible product, include stable identifiers where available and the attributes that distinguish nearby variants:
- brand and sub-brand
- product family and flavour
- unit size, unit count and pack size
- GTIN/EAN/UPC or retailer product code where available
- known retailer descriptions and abbreviations
- campaign eligibility dates and markets
Do not turn every word into an alias. LIME can identify a flavour; LM may also mean lemon. An alias should narrow the candidate set, not force a match.
Consider these clearly synthetic lines:
| Receipt line | Candidate | Safe outcome |
|---|---|---|
NC SPK LIME 6X1.5 |
Lime six-pack, 1.5 L | Match if catalogue attributes agree |
NC SPK 6PK |
Lime or lemon six-pack | Review or use retailer code |
NC WATER 1.5 |
Single bottle or pack | Do not infer quantity |
89410233 |
Retailer-specific code | Match only with a verified code map |
NC VAR PK 8 |
Eight-pack variety bundle | Match to bundle, not its component SKUs |
Separate evidence from campaign rules
Product matching answers, “Which catalogue item does this line most likely represent?” Campaign rules answer, “Does that item qualify, in this quantity, for this member at this time?” Keeping the layers separate makes errors traceable.
In a scoped Steve and Open Loyalty workflow, Steve extracts configured receipt fields and can use a workflow schema, prompts, and rules designed around supplied product reference data. A general catalogue matcher is not established merely by uploading an arbitrary SKU list, so the matching approach and expected outputs must be validated on representative receipts. Open Loyalty receives approved purchase data and applies the program’s campaign and earning rules. Changing a points multiplier belongs in Open Loyalty. Improving a tested abbreviation mapping or confidence threshold belongs in the verification workflow.
Treat quantity and packaging as first-class data
The most expensive false matches often involve pack structure. “Buy two bottles” is not the same as “buy one twin pack” unless the terms say so. A multipack should remain a catalogue item with its own identity. If a receipt prints quantity separately, preserve both the line quantity and the package count.
A useful normalized result might contain:
{
"raw_line": "NC SPK LM 6PK",
"matched_product_id": "synthetic-nc-lime-6x15",
"quantity_on_receipt": 2,
"units_per_pack": 6,
"match_status": "review",
"reason": "flavour abbreviation is ambiguous"
}
This example is illustrative. Its matched_product_id, match_status, and reason fields are a proposed workflow schema, not guaranteed built-in output. The important point is to define what the downstream system receives when product identity is uncertain and test that contract before launch.
Design an uncertainty policy
Every matcher needs an abstention path. Define which attributes are mandatory for automatic approval. A campaign covering one flavour may require brand, flavour and pack size. A brand-wide spend campaign may only require the product family and value.
Use three operational outcomes:
- Matched: evidence identifies one eligible catalogue item with sufficient confidence.
- Uncertain: more than one plausible item remains, or a required attribute is unreadable. Route it to review.
- Unmatched: the line does not map to the configured catalogue. This is not automatically fraud; it may be a new retailer description.
The current review queue can show the receipt, configured extracted fields, confidence and rule reasons. If reviewers also need ranked candidate products and differentiating attributes, add that as an explicit pilot requirement. Any accepted alias or schema change should create a new workflow version so historical decisions remain explainable.
Test with hard neighbours
Random receipts make a weak test. Build groups of products that differ by one attribute: 330 ml versus 500 ml, regular versus zero, single unit versus multipack, old packaging versus new. Include eligible and ineligible products from the same brand. Measure correct matches, incorrect matches and uncertain outcomes separately.
Do not promise a universal product taxonomy unless one exists and is maintained for the target markets. A campaign-specific catalogue can be the more reliable design because the acceptable products and evidence standard are explicit.
Steve’s receipt verification returns configured structured fields and applies configured checks before a purchase moves downstream. If your receipts contain difficult abbreviations, book a demo and bring the product reference data plus examples from several retailers. We will test the proposed matching workflow and identify which outputs are supported, uncertain, or require additional design.


