All articles

SKU vs UPC: Differences, GTINs, and Product Matching

A SKU tracks a store's inventory; a UPC identifies the item across stores. See how variants, parent SKUs, and GTINs affect stock and product matching.

Jerome Blin,

A SKU usually identifies the exact variant a merchant stocks and sells. A UPC identifies a trade item across businesses. Both can refer to the same black 500 ml bottle; the SKU belongs to a merchant's inventory system, while the UPC lets other businesses identify that item too.

Two retailers can give that bottle different SKUs and use the same UPC. The 750 ml bottle is a separate variant. Both types of code can distinguish the two sizes, so treating SKU as a variant ID and UPC as a product-family ID would be a mistake.

That distinction matters when you combine catalogs: you want to connect the same bottle across stores without accidentally merging the 500 ml and 750 ml versions.

SKU vs UPC at a glance

QuestionSKUUPC
What does it stand for?Stock Keeping UnitUniversal Product Code
Who controls it?The business managing the inventoryUsually the brand owner, using the GS1 system
What does it identify?Usually the exact variant the business stocksA trade item, such as that same size and color combination
Where is it meaningful?Within the business's own catalogAcross businesses selling that trade item
What does it look like?A business-defined code, such as BOTTLE-BLK-500Commonly a 12-digit GTIN carried by a UPC-A barcode
Does it stay the same across stores?Each business chooses its ownIt should, for the same trade item
What should you use it for?Tracking stock, orders, and fulfillmentIdentifying trade items across catalogs and supply-chain partners

GS1 US explains how SKUs and UPCs work in its UPC guide. Neither code contains the current selling price; the store's system looks that up.

What is a SKU, and why does stock belong to the variant?

A SKU is the code a business assigns to an inventory item. When a product comes in several sizes or colors, each combination normally gets its own SKU. Businesses choose their own format and code length.

Suppose you sell three variants of a bottle. Your stock might look like this:

VariantInventory SKUUnits available
Black, 500 mlBOTTLE-BLK-50010
Black, 750 mlBOTTLE-BLK-7500
Green, 500 mlBOTTLE-GRN-5006

You have 16 bottles, but a customer who orders the black 750 ml version is out of luck. That's why you track stock for each variant. A total for the whole bottle range won't tell you what you can ship.

Shopify recommends a unique SKU for each variant. If you store that variant in several warehouses, keep the same SKU and track the quantity at each location.

All ten black 500 ml bottles share a SKU. To distinguish one physical bottle from the next, you'd need something like a serial number.

Product family, parent SKU, and variant SKU

The bottle model is the product family. Black, 500 ml is one of its variants: a specific combination a customer can buy. A product with no size or color choices still needs an inventory record.

Some systems give the family a parent SKU. Here, BOTTLE could group the variants, while BOTTLE-BLK-500 identifies the black 500 ml bottle. An order for BOTTLE alone would leave the warehouse guessing which size and color to pick.

In Google Merchant Center, variants have separate item IDs and share an item_group_id. You can use a parent SKU as that group ID, but Google advises against submitting the parent as a separate product.

Before joining two exports on sku or product_id, check what the field contains. It could be a parent code, a variant code, or the platform's database ID.

Here, "inventory SKU" means the code for the stocked variant. Parent and variant SKUs both belong to the catalog that assigned them.

What is a UPC, and how does it relate to GTIN?

In everyday catalog work, "UPC" usually means the 12-digit number on a UPC-A barcode. That number is a GTIN-12; UPC-A is the barcode that carries it.

GTIN stands for Global Trade Item Number. GTINs come in 8-, 12-, 13-, and 14-digit formats. An EAN-13 barcode, for example, carries a GTIN-13. GS1 US's GTIN guide explains each format.

GS1's rules call for a separate GTIN for each size and color combination. A medium shirt and a large shirt can belong to the same product family and have different GTINs, just as they have separate inventory SKUs.

Catalogs often mix these identifiers in the same export:

IdentifierHow to interpret it
Inventory SKUA business's code for a stocked configuration
Parent SKUA business's grouping code for related variants
UPC / GTIN-12A 12-digit trade-item identifier commonly found in North American retail
EAN / GTIN-13A 13-digit trade-item identifier used internationally
MPNA manufacturer part number; compare it with the brand or manufacturer
Serial numberA code for one physical unit

A barcode is a way to encode a value so a scanner can read it. You can print an internal SKU as a barcode; it remains your internal code.

Be careful with MPNs. A manufacturer part number needs the brand or manufacturer alongside it, and even that pair may not identify a size. Google's MPN documentation notes that different apparel sizes can share an MPN.

A worked example: the same variant across stores

Suppose three stores sell the same bottle model. This example is fictional; GTIN-A and GTIN-B stand in for actual GTINs.

StoreStore SKUGTINConfigurationObserved price
NorthBOTTLE-BLK-500GTIN-ABlack, 500 ml, one bottle€24
South80421GTIN-ABlack, 500 ml, one bottle€22
West80421GTIN-BBlack, 750 ml, one bottle€26

North and South sell the same variant under different SKUs. West sells the larger bottle, even though its SKU happens to match South's. Join these catalogs on SKU and you'll miss the North–South match while incorrectly pairing South with West.

Once you've matched North and South, keep both listings. Each store has its own price and stock, and you need the URL and observation time for each record.

The bottle model groups the 500 ml and 750 ml variants. Each variant can appear in several store listings, with seller offers and availability attached to those listings. You can compare the whole model's assortment across stores, or compare prices for one exact variant. Keep that choice explicit in your matching rules.

For competitor price monitoring, also check condition, pack quantity, and currency. A member price or a total that includes shipping needs different treatment from the ordinary item price, even when the variant matches.

How to store and validate product identifiers

1. Preserve the source value and its meaning

Store the original identifier with its type and the catalog it came from. Keep the retailer alongside its SKU, and retain the seller for seller-assigned marketplace SKUs. Give parent and variant IDs separate fields.

For your own pipeline, a record could look like this (this example isn't an Extralt API response):

{
  "store": "north.example",
  "source_url": "https://north.example/products/black-bottle-500",
  "observed_at": "2026-09-25T08:00:00Z",
  "source_parent_sku": "BOTTLE",
  "identifiers": {
    "sku": "BOTTLE-BLK-500",
    "gtin": null,
    "mpn": null
  },
  "options": {
    "color": "Black",
    "capacity": "500 ml"
  },
  "pack_quantity": 1
}

The GTIN is null because we haven't established it for this record. Leave it missing until you can verify it.

2. Treat identifiers as strings

Store UPCs as strings. An integer field or a spreadsheet's number format can strip their leading zeros.

If you compare GTINs in a 14-character field, GS1 specifies padding shorter GTINs with leading zeros. Keep the original value too. The GTIN guide's sample 614141000005 becomes 00614141000005.

The padded value still identifies the same item. To identify a case, use the GTIN assigned to that case.

Check the barcode format before padding an eight-digit value. UPC-E compresses a GTIN-12, so you must expand it first. Eight digits alone don't establish that the input is a GTIN-8.

3. Separate format validation from product validation

First check the length, digits, and check digit for the identifier type. Then check which item the code belongs to.

A valid checksum won't catch a GTIN copied from the wrong size. When a match will drive purchasing or pricing decisions, verify the association using manufacturer records or an authoritative lookup. Google's GTIN guidance likewise says to use the assigned identifier and avoid guessing.

On a page with several sizes, check which size the GTIN describes. Copying the selected variant's GTIN and availability to every option would create false matches and stock records. Google's variant markup handles this distinction with a ProductGroup and individual variant Product records.

4. Keep conflicting evidence visible

If two records share a GTIN but disagree on capacity or pack quantity, investigate. Dropping the conflicting field would hide the reason to question the match.

SituationPractical response
Same SKU, different storesDo not infer a match from the SKU alone
Same parent SKU, different sizesSame local group; different sellable variants
Same validated GTIN, compatible configurationCandidate for the same trade item
Same GTIN, conflicting size or pack quantityHold for investigation
Same brand and MPN, no GTINCheck size and other options; MPN may span variants
No identifiers, similar titlesUse attributes and other evidence; keep uncertainty explicit

For the matching process itself, see product matching across sellers.

When a shared GTIN is not enough

Multipacks can trip up an otherwise valid match. Under Google Merchant Center's feed rules, a multipack created by the manufacturer uses the pack's GTIN. A retailer who puts three bottles together uses the individual bottle's GTIN with the pack information. Read the multipack quantity before comparing the prices.

Some minor product changes also keep the same GTIN. GS1's Consumer Product Variant guideline includes certain packaging artwork changes. Two records with the same GTIN may therefore describe different artwork, even though size and color combinations still need separate identifiers.

When you extract ecommerce product data, keep the offer details alongside the identifiers. You'll need the seller, condition, currency, pack quantity, and observation time to judge whether two prices are comparable.

Frequently asked questions

Is a SKU the same as a UPC?

No. A SKU is a merchant's inventory code; a UPC identifies a trade item across businesses. Both can describe the same exact variant, but you need to know which merchant assigned a SKU to make sense of it.

Does each product variant need its own SKU and UPC?

Each variant you stock separately should have its own SKU. Products that use GTINs need a separate GTIN for each size and color combination. If a product has no assigned GTIN, leave it blank until you can verify one.

What is the difference between a parent SKU and a variant SKU?

A parent SKU groups a model's variants. A variant SKU identifies the size, color, or other combination you can order. The parent code alone doesn't tell the warehouse which item to ship.

Can I convert a SKU into a UPC?

There is no universal conversion formula. Look up the mapping in retailer, manufacturer, or supplier records. If you can't verify it, leave the UPC blank.

What is the difference between GTIN and UPC?

GTIN is the family of GS1 trade-item identifiers. The 12-digit number commonly called a UPC is a GTIN-12, encoded in a UPC-A barcode. GTINs also have 8-, 13-, and 14-digit formats.

Can two stores use the same SKU for different products?

Yes. Two stores can use the same code for different products. Store the SKU together with the store or seller that assigned it.

Before you merge catalogs

Try your matching rules on a few awkward cases before running them across a catalog: the same item at two stores, two sizes of one model, a multipack, and a record with no GTIN. Check which records merge and which stay separate. A join that mishandles these examples needs work before you trust its pricing report.

Extralt Enrich structures extracted product details and connects matching products and variants across stores. It keeps the identifiers and original records so you can inspect what went into a match. The product data enrichment workflow shows how to use those records in your own catalog.