Tensor LabsTENSORLABS

The bestseller your website cannot find

A canonical attribute dictionary, enforced at ingestion, keeps inventory findable

July 13, 20264 min read3 sectionsBy Ahmed Abdullah
The bestseller your website cannot find

Introduction

Every retailer with both floors and a webshop has a version of this product. In the store it sells out by Thursday. Online it barely registers. The merchandising team has theories: the photos, the price point, the placement on the category page. The theories are usually wrong, and the truth is usually stupider.

One apparel client's version was a mid-weight jacket. In-store, a reliable mover. Online, a ghost. The reason took one query to find, once someone thought to run it: the jacket came from a supplier whose feed said size "Med" and color "Forest". The site's size filter listed S, M, L. The color filter listed Green. Filter by either, and the bestseller simply is not in the result set. It was not deranked. It was invisible.

Shoppers do not report the products they never saw. They buy them somewhere else.

The stock, meanwhile, sits in the warehouse: paid for, photographed, live on the site in the technical sense, and unreachable through the one interface most purchase journeys actually use. Multiply by every supplier feed with its own opinions about size labels, color names, units, and material fields, and "our online conversion is weaker" starts to look less like a marketing problem and more like an inventory of quiet data mismatches.

Facets are a contract nobody signed

Here is the mechanism. Faceted navigation, the filter column that drives a huge share of category-page purchases, only works if every product speaks the same attribute language. "M", "Med", "Medium", and "size 38" are one size to a human and four distinct values to a filter. A facet is an implicit contract: every product must express this attribute from a controlled vocabulary. But catalogs are built from feeds, and feeds come from suppliers, and no supplier signed your contract or has heard of it.

Search has the same disease with different symptoms; a query for "green jacket" that matches on text will find "Forest" only if someone taught it to. But facets fail harder, because a filter is binary. There is no partial credit, no fuzzy match, no ranking. In or invisible.

The dictionary and the gate

The method is unglamorous and it works: a canonical attribute dictionary, enforced at ingestion.

Define the canonical vocabulary once per attribute: sizes, colors, materials, fits, whatever your filters expose. For every supplier feed, maintain a mapping into that vocabulary: "Med" is M, "Forest" is Green, "100% cotton" and "Cotton" are the same material. Normalize units at the same gate, grams to the site's standard, centimeters to the size chart. Values the mapping does not recognize do not pass silently into the catalog; they land in a rejection queue that a human clears, and each clearance becomes a new mapping rule, so the queue shrinks month over month. New feed, new mappings, same dictionary.

The modern refinement is that language models have made the first draft of those mappings nearly free: they will propose that "Frst Grn" means Forest Green with high confidence. The judgment call, and the part that keeps the system trustworthy, is that a proposal is not a rule until reviewed; auto-accepting fuzzy mappings just relocates the corruption. We stood up this gate at a marketplace ingesting forty-plus supplier feeds; the rejection queue ran hot for six weeks, then settled to a few dozen items a week, and the "invisible product" class of ticket effectively retired. The jacket equivalents started showing up in filters, which is to say, in revenue. (The photos, it turned out, had been fine all along.)

A product with an unmapped attribute is not badly merchandised. It is unlisted, on the shelf, at full cost.

The fair objection is that this is plumbing, permanent plumbing, with a queue to staff. Correct. The alternative is what most catalogs actually run: a slow leak in which some single-digit percent of inventory is unreachable at any given moment, the specific victims rotating with every feed update, undetectable in any metric you currently chart.

TensorLabs builds catalog infrastructure of exactly this kind, and the first deliverable is always the same query we ran for the jacket: how much of your inventory is currently invisible to your own filters. The number has never once been zero.