Shopify field mapping
Shopify SKU to mpn
variant.sku
mpn
An mpn is the manufacturer's part number, and a SKU is your own stock reference, so the two coincide only when you are the manufacturer. Mapping SKU to mpn on resold goods sends a value no channel can match, which is worse than sending nothing.
The Shopify side
- API field
- variant.sku
- Called
- SKU (Stock Keeping Unit)
- Found at
- Product → Variants → edit variant → Inventory → SKU
- Feeds
- mpn
Before and after
Real values on the left as Shopify stores them, on the right as a channel needs them.
| In Shopify | In the feed | Note |
|---|---|---|
| SKU "OXF-100-BLK-M", own-made product | OXF-100-BLK-M | You are the manufacturer, so the SKU genuinely is the mpn. |
| SKU "WH-4471", resold product | (the manufacturer part number instead) | An internal warehouse reference, which matches nothing. |
| metafield custom.mpn = "A1234-02" | A1234-02 | The manufacturer's own number, from supplier data. |
| mpn "A1234-02" with no brand | (incomplete) | The pair only works together; a part number is unique per manufacturer. |
| SKU empty | (omitted) | SKU is optional in Shopify and frequently blank. |
The transformation, step by step
-
Establish whether you are the manufacturer
For own-made and own-label goods your part number is the manufacturer part number, and the mapping is correct. For resold goods it is not, and no amount of formatting makes it so.
-
Prefer a dedicated manufacturer part number field
For resold products the real mpn is a value from the manufacturer, normally held in a metafield populated from supplier data. That is the field to map, and it is worth creating if it does not exist.
-
Send mpn only where brand is also present
Channels accept brand with mpn as a substitute for a gtin, and the pair only works together. An mpn without a brand identifies nothing, because a part number is unique to its manufacturer rather than globally.
-
Preserve the manufacturer's formatting
Part numbers carry meaningful hyphens, slashes and letter case. Normalising them to look tidy breaks the match, so this is a field to pass through rather than clean.
-
Leave it empty rather than approximating
Where there is no genuine manufacturer part number, send nothing and let gtin or identifier_exists carry the identifier question. A plausible-looking wrong value is harder to find later than an absent one.
What goes wrong
The mapping looks correct and matches nothing
SKU to mpn validates, fills the field, and satisfies the identifier requirement on paper. The value matches no product anywhere, so the item gains none of the benefit of having an identifier while appearing to have one, and nothing is ever reported.
Shopify does not enforce unique SKUs
The same SKU can appear on several variants. For an mpn that is less damaging than for a feed id, but it still means the value is not the reliable identifier it looks like.
Tidying a part number breaks it
Stripping hyphens or upper-casing a part number produces something that no longer matches the manufacturer's catalogue. This is one of the few feed fields where normalisation is the wrong instinct.
It is only half an identifier
Sending mpn while brand is missing or wrong leaves the pair useless. In catalogues where brand comes from the Shopify vendor field, the brand is often the weaker half of the two.
How feedlab maps it
feedlab maps mpn from a dedicated manufacturer part number field where one exists, falls back to the SKU only for products marked as own-made, and leaves it empty otherwise rather than filling it with a stock reference. Values are passed through unnormalised, and rows with an mpn but no brand are flagged in the preview.
Frequently asked questions
Is a Shopify SKU a valid MPN?
Only when you are the manufacturer, in which case your part number genuinely is the manufacturer part number. For resold goods a SKU is an internal reference and matches nothing.
Where should the MPN come from for resold products?
From the manufacturer, normally through a metafield populated from supplier data. It is worth creating that field rather than substituting the SKU.
Does mpn work without brand?
No. A part number is unique to its manufacturer rather than globally, so channels expect the brand and mpn pair together as a substitute for a gtin.
Should I clean up part numbers before sending them?
No. The hyphens, slashes and letter case are part of the value, and normalising them breaks the match with the manufacturer's catalogue.
Errors this mapping causes
- Missing value: GTIN The "Missing value: GTIN" issue means a channel believes a product has a manufacturer-assigned barcode but the feed did not supply one. On Shopify it almost always traces back to the variant barcode field, which is optional in the admin and therefore left empty across large parts of most catalogues.
- Missing value: brand The "Missing value: brand" issue means a channel expects a brand name for a product and the feed did not supply one, or supplied a placeholder it treats as empty. On Shopify it usually means the vendor field is blank, or holds a supplier or internal category rather than the brand a shopper would recognise.
Attributes involved
- mpn The mpn attribute is the part number a manufacturer uses to identify a product in its own catalogue, and it serves as the fallback identifier when an item has no GTIN. Unlike a GTIN it is only unique within one manufacturer, so it is meaningless to a channel unless the brand attribute is supplied alongside it.
- brand The brand attribute is the name of the brand a product belongs to, and it is what makes a manufacturer part number meaningful and a listing eligible for brand-based matching. On Shopify it maps most often from the vendor field, which is unreliable because merchants commonly use vendor to record a supplier or distributor rather than the consumer-facing brand.
- gtin The gtin attribute is the globally unique barcode number a manufacturer assigns to a product, covering UPC, EAN, JAN and ISBN formats. Channels use it to match an item against the same product sold elsewhere, and on Shopify it comes from the variant's barcode field, which is optional in the admin and therefore frequently empty.
- identifier_exists The identifier_exists attribute is an explicit declaration that a product has no manufacturer-assigned identifiers, set to no when a GTIN, MPN and brand genuinely do not exist for the item. It is a statement about the product, not a way to silence identifier warnings, and channels treat misuse as a data quality problem rather than a resolution.
Related concepts
Primary sources
Channel specifications change. These are the official documents this page is based on.