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.
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
| Question | SKU | UPC |
|---|---|---|
| What does it stand for? | Stock Keeping Unit | Universal Product Code |
| Who controls it? | The business managing the inventory | Usually the brand owner, using the GS1 system |
| What does it identify? | Usually the exact variant the business stocks | A trade item, such as that same size and color combination |
| Where is it meaningful? | Within the business's own catalog | Across businesses selling that trade item |
| What does it look like? | A business-defined code, such as BOTTLE-BLK-500 | Commonly a 12-digit GTIN carried by a UPC-A barcode |
| Does it stay the same across stores? | Each business chooses its own | It should, for the same trade item |
| What should you use it for? | Tracking stock, orders, and fulfillment | Identifying 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:
| Variant | Inventory SKU | Units available |
|---|---|---|
| Black, 500 ml | BOTTLE-BLK-500 | 10 |
| Black, 750 ml | BOTTLE-BLK-750 | 0 |
| Green, 500 ml | BOTTLE-GRN-500 | 6 |
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:
| Identifier | How to interpret it |
|---|---|
| Inventory SKU | A business's code for a stocked configuration |
| Parent SKU | A business's grouping code for related variants |
| UPC / GTIN-12 | A 12-digit trade-item identifier commonly found in North American retail |
| EAN / GTIN-13 | A 13-digit trade-item identifier used internationally |
| MPN | A manufacturer part number; compare it with the brand or manufacturer |
| Serial number | A 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.
| Store | Store SKU | GTIN | Configuration | Observed price |
|---|---|---|---|---|
| North | BOTTLE-BLK-500 | GTIN-A | Black, 500 ml, one bottle | €24 |
| South | 80421 | GTIN-A | Black, 500 ml, one bottle | €22 |
| West | 80421 | GTIN-B | Black, 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.
| Situation | Practical response |
|---|---|
| Same SKU, different stores | Do not infer a match from the SKU alone |
| Same parent SKU, different sizes | Same local group; different sellable variants |
| Same validated GTIN, compatible configuration | Candidate for the same trade item |
| Same GTIN, conflicting size or pack quantity | Hold for investigation |
| Same brand and MPN, no GTIN | Check size and other options; MPN may span variants |
| No identifiers, similar titles | Use 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.