SKU Numbering System: Design the Code, Then Audit It
A good SKU numbering system uses short, stable codes of 8 to 12 characters, one code per variant, with price, supplier and warehouse kept out, and an audit run before loading.
By Praveen Nune, Co-Founder & CEO · Updated 3 Nov 2026

Key takeaways
Use a three-part SKU such as
FAN-0012-WH: three letters for the category, a four-digit family number from a running sequence, and a short variant code. Aim for 8 to 12 characters, with a hard ceiling of 16.- Keep price, supplier, warehouse, lot, serial number, barcode and HSN (Harmonised System of Nomenclature, the goods classification code on Goods and Services Tax invoices) out of the SKU. They change or belong to other records; the SKU should not.
- Audit the list before you load it. Our script flagged all six faulty codes we planted in a 10-entry test list. It cannot catch two spellings of one item or an 8 typed for a B, so you also compare descriptions.
- In Arka Inventory, one code per variant gives you stock by warehouse. Multiple warehouses and barcoding are on our Basic plan, and lot and serial tracking is on Enterprise.
In this article
- 1What is the best SKU numbering system for an Indian trader or manufacturer?
- 2Which details belong in a SKU, and which belong in separate fields?
- 3What breaks a SKU list after the first few months?
- 4How do you audit a SKU list before loading it?
- 5How do you recode an existing catalogue without losing history?
- 6How do we hold your SKUs and warehouse stock in Arka Inventory?
- 7Frequently asked questions
A SKU (stock keeping unit) is your own internal code for one sellable variant of a product. It looks like the easiest decision in inventory, and it is the hardest to undo. Every purchase order, bin label, barcode and sales report carries it. Change a code later and you are editing history.
Category first, attributes after and no price in the code is the easy part. What breaks a SKU list is a letter O typed for a zero, medium spelt two ways, a leading zero lost in a spreadsheet, and hundreds of untidy codes already in use.
This page gives you a code format, a rule for what stays out of the code, and a short script that audits your list before you load it anywhere. It then shows how we hold the result in Arka Inventory, with stock visible by warehouse.
What is the best SKU numbering system for an Indian trader or manufacturer?
Use three segments: three capital letters for the category, a four-digit family number taken from a running sequence, and a short variant code. FAN-0012-WH is a white variant of the twelfth fan family. It is 11 characters, readable at a glance, and nothing in it can go stale when a supplier or price changes.
| Segment | Rule | Example |
|---|---|---|
| Category | 3 capital letters, from a fixed list | FAN, BLT, PMP |
| Family | 4 digits, next number in sequence, never reused | 0012 |
| Variant | 2 to 3 characters per attribute; if a product needs both size and colour, use one combined code of 2 to 3 characters from a fixed list | WH, W48 |
A family is all the variants of one model. The family number carries no meaning, so a supplier change or a revised material never makes the code wrong. A fully descriptive code such as FAN-CEIL-48-WHT-ORIENT breaks the first time any of those details changes.
On length, Amazon's guide to SKUs for sellers in India puts the typical SKU at 8 to 12 characters. We recommend that as your target, and 16 as the ceiling for any code. Longer codes are harder to read aloud, key in and fit on a label.
Plan the sequence for headroom. Take 5 categories × 40 models × 6 sizes × 8 colours. That is 9,600 variants, our illustration and not a measured catalogue. A single flat four-digit sequence tops out at 9,999, so that catalogue would use 96% of it on day one. Splitting the code into category, family and variant keeps every segment small.
Write the allowed values for each segment down once, in one place. An inventory data dictionary is the right home for that list.
Which details belong in a SKU, and which belong in separate fields?
Only details that never change belong in the SKU: category, family and the variant attributes. Everything that can change or that identifies something other than the product belongs in its own field. Warehouse is the easiest detail to get wrong: a SKU names a product, and your stock system records where it sits.
| Detail | In the SKU? | Where it lives |
|---|---|---|
| Category, family, variant (colour, size) | Yes | The SKU |
| Price, promotion, season | No | Price or sales fields |
| Supplier, supplier part number | No | A supplier cross-reference |
| Warehouse, bin | No | Location record: stock is held per SKU per warehouse |
| Lot, batch, expiry date | No | Lot record (see lot number vs batch number) |
| Serial number | No | The record for each individual unit |
| Barcode or GTIN (Global Trade Item Number) | No | Barcode field |
| HSN code | No | Tax classification field |
| Kit or bundle | Its own SKU | Component list |
If you add a warehouse suffix such as -BLR (Bengaluru) or -HYD (Hyderabad), one product becomes two. Stock totals split, reorder levels double up and reports need merging. Keep one code per variant and read the stock per warehouse from the system.
What breaks a SKU list after the first few months?
SKU lists break through small, avoidable inconsistencies, not through bad design. These are the faults we check for:
- Letter and digit confusion.
FAN-BLU-001andFAN-BLU-OO1look identical on a label and are two different products in your system. - Case. Shopify's developer documentation defines a variant's SKU as a case-sensitive identifier (as of November 2026), so
abc123andABC123are different codes. Use capitals only. - Lost leading zeros. A spreadsheet can treat
012345as a number and show12345. Start every code with a letter. - Spaces and symbols. A slash, space or full stop can break an import or a label print. Use capitals, digits and the hyphen only, and test-print one label before you commit.
- Two spellings of one thing. One team writes
MDand anotherMEDfor medium, and the same item gets two codes. A fixed list of variant values prevents this. - HSN codes inside the SKU. Keep HSN codes in a tax field, not in the SKU, because the HSN depends on the product's tax classification and can be revised.
- Reused codes. A retired code given to a new product mixes two products' sales and stock history. Never reuse one.

How do you audit a SKU list before loading it?
Export your list and run seven pass-or-fail tests. Tests 1 to 4 are in the script below; test 5 is a sort by description in a spreadsheet; tests 6 and 7 need a scanner and a spreadsheet.

| # | Test | Pass | Fail |
|---|---|---|---|
| 1 | Count codes that appear more than once | 0 | Any |
| 2 | Look-alike pairs after treating O as 0 and I or L as 1, ignoring case and symbols | 0 pairs | Any pair |
| 3 | Format: starts with a letter, then capitals, digits or hyphen only | Every code | Any code |
| 4 | Length | 4 to 16 characters; review any code outside 8 to 12 | Under 4 or over 16 |
| 5 | Sort by item description: same description, different code | None | Any |
| 6 | Print one label per family and scan it | Scanner reads the exact code | Any difference |
| 7 | Open the file in a spreadsheet, save, reopen | No code changes | Any code changes |
Tests 1 to 4 are in this script:
import re, collections
def norm(s):
s = s.upper().replace("O", "0").replace("I", "1").replace("L", "1")
return re.sub(r"[^A-Z0-9]", "", s)
def audit(skus, lo=4, hi=16):
issues, seen = [], collections.defaultdict(set)
for s, n in collections.Counter(skus).items():
if n > 1: issues.append((s, "exact duplicate"))
for s in skus: seen[norm(s)].add(s)
for group in seen.values():
if len(group) > 1: issues.append((sorted(group), "look-alikes"))
for s in set(skus):
if not re.fullmatch(r"[A-Z][A-Z0-9-]*", s):
issues.append((s, "start with a letter; capitals, digits, hyphen only"))
if not lo <= len(s) <= hi:
issues.append((s, f"length {len(s)} outside {lo}-{hi}"))
return issues
We ran it in November 2026 on a 10-entry test list we built: 9 distinct codes, with one entered twice.
| Code | Result |
|---|---|
| Flagged: duplicate |
| Flagged: look-alikes |
| Flagged: starts with a digit |
| Flagged: lower case, space and slash |
| Flagged: full stop, and 27 characters |
| Not flagged |
| Not flagged |
Six of the nine distinct codes were flagged, and each flag was a genuine fault. The three misses are why test 5 exists: two codes with the same description are a fault only a description comparison can find. Test 6 checks that labels print and scan exactly as listed.
How do you recode an existing catalogue without losing history?
Add the new code beside the old one, never over it. Keep the old code as a cross-reference field, freeze it, and move stock and open orders in one planned cut-over. Overwriting old codes breaks every historic report and every supplier or customer document that quotes them. This is our recommendation, not a rule.
- Export every item with its current code, description, unit and current stock.
- Group by description to find items that already have two or more codes. Choose one family number for each and list the others as old codes.
- Assign category, family and variant codes from your fixed lists.
- Run the seven tests above on the new codes.
- Load the new codes with the old code in a reference field. Count a sample of 20 to 30 items by new code against the shelf. Cycle counting gives a method for the schedule.
- Retire the old codes. Do not reuse them.
How do we hold your SKUs and warehouse stock in Arka Inventory?
We run your SKUs on Salesforce. You log in with Salesforce, set up your locations and products, and see stock for each product across all your warehouses and locations. We built Arka Inventory natively on Salesforce, so sales reps see the same figures where they create quotes and orders. Our inventory visibility feature covers on-hand stock, stock on order and lead times.
Because a SKU names one variant, we can show the stock for each warehouse without a warehouse suffix in the code.
What you get on each plan, with prices as of November 2026 from our pricing page:
- Basic: $199 a month, billed yearly, with one user licence (extra users $42 a month). Multiple warehouses, purchase orders and transfers, barcoding and packing slips, and inventory alerts.
- Advance: $499 a month, billed yearly, with two user licences (extra users $52 a month). Everything in Basic, plus bills of material, production and kitting, so a kit can be sold as a single item.
- Enterprise: custom-priced. Everything in Advance, plus sales orders, lot and serial tracking, and landed cost and bin tracking. Lot and serial tracking is where lot numbers, expiry dates and serial numbers live, so they stay out of your SKU.
As of November 2026, new accounts get a 15-day free trial with full access to all features and no credit card. As of November 2026, onboarding takes a minimum of two weeks. In our view an audited SKU list is the quickest way to keep it near that minimum. To see your own codes working across warehouses, book a demo with our team.
Frequently asked questions
Sources
- 1.Shopify developer documentation: ProductVariant object, Shopify, accessed November 2026
- 2.SKU Numbers in eCommerce: Meaning, Examples & How to Use Them, Amazon Smart Commerce India, accessed November 2026
- 3.Our SKU audit script and its test run, Arka Inventory, November 2026, on a 10-entry list we built
- 4.Arka Inventory pricing, Arka Inventory, accessed November 2026
- 5.Arka Inventory inventory visibility, Arka Inventory, accessed November 2026



