← All notes

How to audit SKUs and barcodes on Shopify

Review identifiers across the whole catalog, separate actionable conflicts from intentional blanks, and verify corrections before another system relies on them.

A catalog can look tidy product by product and still contain identifiers that fail when inventory is exported, scanned, or matched by another system. The audit has to compare variants across the catalog, not merely confirm that each field contains something.

Shopify describes SKUs as internal inventory codes and barcodes as scannable product identifiers. They can live beside each other, but they do different jobs. Before reviewing either field, write down which system consumes it and what that system expects to be unique.

Define the identifier contract first

A warehouse may use SKU as the join key between Shopify and its own item master. A retail scanner normally reads the barcode field. A marketplace may expect an assigned GTIN for some products while a made-to-order item has no legitimate GTIN at all. Those are three different contracts; one blanket rule will misclassify at least one of them.

Record the scope as well as the format. If only active products go to a 3PL, archived products should not compete for the same remediation queue. If one vendor supplies assigned barcodes and another sells original goods without them, a missing-barcode rule may belong to the first group only.

Scan for collisions, not just exact duplicates

Exact duplicates deserve review because two variants can compete for one match. Also look for values that become equal after a receiving system normalizes them: leading or trailing whitespace, case differences, Unicode variants, or barcode separators can turn apparently different strings into the same practical key.

Treat a collision as a decision point, not proof that both records are wrong. Bundles and other specialized workflows sometimes reuse a SKU intentionally. Confirm the downstream behavior before changing it, then document the exception if it is deliberate.

Audit the value another system will compare. Preserve the original field for correction, but group findings by the normalized form that could collide after export or sync.

Separate structural errors from optional information

Control characters, unsafe edge whitespace, and an invalid check digit are concrete structural concerns. A missing barcode is different. Shopify allows the field to be blank, and a product without an assigned GTIN should not receive an invented number simply to clear a report.

For numeric GTIN-shaped values, check both the supported length and the GS1 Mod-10 digit. That confirms structure only. It does not prove that the number belongs to the brand or product, and it cannot promise approval by Google or another marketplace.

Correct narrowly, then run the audit again

Start with the findings that can misroute or corrupt a match: invalid structure, duplicate identifiers, and invisible characters. Open the affected variant, verify the approved replacement against the source of truth, and change only the intended field. Avoid generating a sequence of plausible-looking identifiers.

Finish with another full scan and a downstream test. A clean Shopify field is useful evidence, but the warehouse import, POS lookup, or feed sync is where the identifier contract is finally proven.