One Product, Forty Names

    The same product shows up under dozens of titles across stores. Product identity resolution, anchored on barcodes, is what lets one order reach the right shelf.

    October 23, 20264 min read

    The same pack of batteries can show up under forty different titles across forty stores. Before anyone can route an order to the nearest shelf, the system has to know they're one product.

    That job has a name: product identity resolution. It's unglamorous, and almost everything else in local commerce depends on it.

    Why the same product looks different everywhere

    Stores don't coordinate their listings. Each one writes its own title, shoots its own photo and writes its own description. Over time they drift.

    One store writes "AA Batteries 24 Pack." Another writes "Alkaline AA, 24ct." A third leads with the brand and buries the count. One puts the size in the title. Another puts it in a field you can't see.

    Photos differ. Descriptions differ. Category names differ. Even the unit can differ: "24 pack" and "2 x 12" can be the same box.

    None of this is anyone's mistake. It's what happens when thousands of people describe the same thing in their own words.

    For a person looking at one store, it's fine. For a system trying to combine many stores, it's the whole problem.

    Barcodes anchor product identity resolution

    Words are a poor way to decide whether two listings are the same product. Barcodes are better.

    A barcode (UPC or GTIN) is a number assigned to a specific product. It's printed on the package and scanned at the register. If two listings carry the same barcode, they're the same product, no matter what each store calls it.

    That's why the SKU Graph is anchored on barcodes. A canonical product in the graph is one product, defined once, with store listings joined to it.

    Barcodes aren't magic. Some listings don't have one. Some are wrong. A product can be reissued with a new number. So identity is something we keep checking, not something we settle once. But it's a far stronger starting point than matching titles.

    What breaks without it

    If you skip identity and just pile up listings, a few things go wrong fast.

    • Duplicate results. A search for batteries returns the same box a dozen times, each with a different name.
    • Wrong items. Two titles look alike and aren't. The 24-pack and the 8-pack get merged, and the shopper gets the wrong one.
    • Useless price comparison. You can't compare prices for "the same thing" if you don't know which things are the same.
    • Broken routing. To find the nearest shelf, you need to know which shelves carry this product. Without identity, you're guessing.

    For an AI agent, the damage is worse. A person might notice that two listings are odd. An agent acting on a mismatched product will buy it.

    How the SKU Graph joins it up

    The SKU Graph joins three things:

    1. Canonical products, anchored on barcodes.
    2. The stores that carry them, as store offers with price, stock, source and when we last saw it.
    3. How sure we are right now.

    So when an agent asks for a product, it isn't searching forty names. It's asking about one canonical product, and the graph already knows which stores carry it and what each offer looks like.

    That's also why a shopper at shop.jennipro.com picks a product, not a store. The product is the stable thing. The store is a detail that JENNi resolves behind it. Every offer reads "Delivered by JENNi."

    Why this matters for agents

    An agent working through search_catalog gets results that point at products, not at raw listings. With a product_id in hand, it can call get_product for the facts and get_buying_options with a zip, a quantity and a fulfillment_mode to see price, delivery fee, delivery promise and total before tax.

    None of that works if the product_id is fuzzy. Identity is what lets one request go cleanly from "I need these batteries" to "here's what it costs to get them to this ZIP."

    One small practical note: sized goods are often listed one size per product, so put the size in your query. Identity can be exact and still need a clear question.

    Learning from orders

    Identity isn't only built from barcodes and matching. It gets better with use. Delivered orders and failed orders both feed back into the graph. If an order fails because the item wasn't what the listing implied, that's a signal we can act on.

    That's the loop we care about: resolve identity, serve it, watch what happens, correct it.

    Build on it

    If you're building an agent that shops, start with a product you know and see how it resolves. Connect to https://shop.jennipro.com/mcp and try a few searches with a ZIP code.

    Ready to connect?

    See how JENNi works for your business

    Whether you're a retailer with inventory, a brand, or building a channel — we'll show you exactly how the network fits.

    See the API