Skip to content
Browse the library

Keeping reliable records

SKUs, barcodes, and codes that keep working

Give every product one stable identity, and make sure a scan finds it.

On this page

A SKU and a barcode do different jobs

A SKU is your own code for a product. It is what CSV imports match on, it must be unique across the account, and it is compared without regard to case. A barcode is the code printed on the box by whoever made it. Scanning resolves a barcode first and a SKU second, so the code on the box wins when a product has both. Because a scan matches either field, a barcode that duplicates another product’s barcode or its SKU is refused: a code that matched two products would be a coin flip, and the product whose SKU it copied would stop being findable by the code printed on it.

An archived product keeps its SKU reserved. That is on purpose: reusing a retired code would attach a new product to an old history, and an import matching it would add stock to something nobody can see. The product form offers to restore the archived product instead of reporting a duplicate you cannot find.

A scheme that is still readable next year

A good SKU is short, typeable, and stable. Something like CB-UC2M for a two metre USB-C cable reads at a glance and survives a rename; something like BLUE-CABLE-NEW does not survive the arrival of a newer one.

  • Encode what will not change: a category prefix, a size, a length. Not a price, a season, or a supplier.
  • Keep it one product, one code, forever. Never recycle a code from a discontinued item.
  • Avoid characters a spreadsheet mangles or a scanner cannot encode. Letters, digits, and hyphens are safe.
  • Give variants their own SKUs; the family holds what they share, the variants hold the identity.

The leading zero problem

Most barcodes are digits, and most spreadsheets treat a column of digits as numbers, which quietly drops leading zeros: 0123456789012 becomes 123456789012, and the scan that used to find it stops working. Format barcode columns as text before you export, and check a few codes in the import preview.

Inventory writes exported text that begins with a formula character behind a leading apostrophe so a spreadsheet treats it as text, and strips exactly one such apostrophe back off on import, so its own exports round trip without damage.

Things that have no code at all

Plenty of stock arrives with nothing scannable: loose parts, bulk goods, anything you make yourself. Print a label and give it a code. If a product has neither a barcode nor a SKU, printing labels assigns it an internal code in the form INV-000001, chosen so it collides with nothing already in the account, and prints that.

From then on the item joins every scanning path: scan to adjust stock, scan into a basket, scan a row on a count sheet. Measured goods such as a reel of cable still get one label rather than one per unit, because there is no per-item count to label.