Your Shopify SKU for a product is TS-BLK-M. Your supplier calls the same thing 4471/BK/02. Their system will not accept your code, your storefront cannot use theirs, and the purchase order has to carry both.
Every merchant who buys from more than one supplier hits this. It is not a data quality problem to be cleaned up once; it is a permanent translation layer between your catalogue and theirs, and the only question is where you keep it.
1. Why the codes never match
Supplier item codes are built for the supplier's world, not yours. They typically encode things you do not care about, such as a factory line, a fabric batch, a pack configuration, or a legacy numbering scheme from before they had computers. Meanwhile your SKUs are built for picking and reporting in your own warehouse.
Three specific mismatches cause most of the pain:
- Different conventions. Yours are readable, theirs are numeric, or the reverse.
- Different granularity. You stock a single variant; they sell it in a pack of six with its own code.
- Two suppliers for one product. The same item has two different codes, and which one goes on the PO depends on who you are ordering from that week.
2. The three approaches that do not work
Worth naming, because most merchants try at least one before landing on the mapping table.
Renaming your Shopify SKUs to match the supplier
Tempting, and destructive. Your SKUs are referenced by your pick lists, your barcode labels, your accounting exports, your shipping rules and possibly your 3PL. Changing them to suit one supplier breaks all of it, and it cannot work at all for a product you buy from two places. Your SKU is yours. Leave it alone.
Keeping the mapping in a spreadsheet
Workable, until the PO gets built. Every order becomes a lookup exercise, and a lookup exercise performed at speed produces a PO with one wrong code in it, which produces the wrong goods three weeks later. The mapping is not the problem; the manual join at order time is.
Letting the supplier translate
"They know what we mean" works with a long-standing supplier and a human who has been there for years. It stops working the week that human is on holiday, and it stops working immediately with a new supplier. It also removes any chance of automating the PO, because no rule can rely on goodwill.
3. What does work: a mapping table per supplier
The durable answer is a table that holds, for each product, the code each supplier uses for it. Your Shopify SKU stays canonical. The supplier's code is an attribute of the relationship, not of the product, which is why the table belongs per supplier rather than on the product record.
The rules that make it hold up in practice:
- Fall back, never fail. If a product has no mapping, the PO should use your Shopify SKU rather than refusing to generate. An imperfect PO you can correct beats a blocked order.
- One table per supplier. The same product can carry different codes at different suppliers without conflict.
- Mappings are cheap to add and easy to bulk load. Most suppliers will send you their price list as a spreadsheet, which is your mapping in disguise.
What about barcodes?
If your supplier is also the manufacturer and the product carries a GTIN or EAN, the barcode is often a better shared key than either SKU, and it is already on your Shopify variant. It is worth checking before building a mapping table. It falls down on private label goods, on anything repackaged, and on suppliers who order by their own catalogue code regardless of what the barcode says. Use it where it works; do not assume it will.
4. Setting it up in Replenishly
Replenishly keeps an SKU override table per supplier, and the purchase order uses it when it builds the file.
- Open the supplier in the Factories section and find the SKU overrides table.
- Paste the mappings in bulk. Comma or tab separated, one per line, Shopify SKU first and supplier code second. A header row is skipped automatically, so you can paste straight out of the price list the supplier sent you.
- Map the column in their template. In the column mapper, point the column their spreadsheet uses for item codes at the Factory SKU field. That is what puts the translated code in the file rather than yours.
- Re-paste whenever it changes. Rows are merged rather than replaced: existing mappings for the same SKU are updated and anything you do not mention is left alone. Re-pasting an updated price list is safe.
Products with no override fall back to the Shopify SKU, so a half-finished mapping table still produces usable purchase orders. That matters when you are onboarding a supplier with 2,000 line items and have mapped the 40 you actually buy.
For suppliers who insist on their own ordering portal rather than a file, the same mapping feeds the portal shopping list, so what you paste into their website is already in their codes, with barcodes and quantities alongside. Full detail is in the SKU overrides documentation.
5. The cases that catch people out
Pack sizes hiding inside the code
If their code 4471/BK/02-CS6 means a case of six, then a mapped quantity of 48 units is eight cases, not 48. Case size belongs in the supplier's MOQ and case settings, not in the code mapping, and the two need to be right together. Getting this wrong is the single most expensive mapping error, because the order looks correct and arrives eight times too large.
Codes that change under you
Suppliers renumber. Usually at the start of a season, usually without telling you. The symptom is a PO the supplier queries rather than fulfils. The fix is a habit: when a price list arrives, paste it in. It takes a minute and it is the whole maintenance burden.
Discontinued codes
A mapping to a code the supplier no longer stocks is worse than no mapping, because it looks deliberate. When a product is discontinued at a supplier, clear the mapping rather than leaving it to rot.
6. What good looks like
You should be able to raise a purchase order without knowing any supplier codes yourself. You think in your own SKUs, the PO carries theirs, and the translation is a table someone else could maintain if you were away. That is the actual test: if raising an order for your second supplier requires you personally, the mapping is still in your head rather than in the system.
The bottom line
Supplier codes will never match yours, and trying to make them match breaks your own operation. Keep your SKUs canonical, keep a mapping table per supplier, make it fall back to your SKU rather than fail, and bulk load it from the price lists you already receive.
Replenishly keeps per-supplier SKU overrides and puts the right code in each purchase order automatically. 14-day free trial, no credit card required to start.