All articles
8 min read

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

A shopkeeper in a stockroom scans a carton on a tidy shelf with a handheld barcode scanner.

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
  1. 1What is the best SKU numbering system for an Indian trader or manufacturer?
  2. 2Which details belong in a SKU, and which belong in separate fields?
  3. 3What breaks a SKU list after the first few months?
  4. 4How do you audit a SKU list before loading it?
  5. 5How do you recode an existing catalogue without losing history?
  6. 6How do we hold your SKUs and warehouse stock in Arka Inventory?
  7. 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.

SegmentRuleExample
Category3 capital letters, from a fixed listFAN, BLT, PMP
Family4 digits, next number in sequence, never reused0012
Variant2 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 listWH, 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.

DetailIn the SKU?Where it lives
Category, family, variant (colour, size)YesThe SKU
Price, promotion, seasonNoPrice or sales fields
Supplier, supplier part numberNoA supplier cross-reference
Warehouse, binNoLocation record: stock is held per SKU per warehouse
Lot, batch, expiry dateNo

Lot record (see lot number vs batch number)

Serial numberNoThe record for each individual unit
Barcode or GTIN (Global Trade Item Number)NoBarcode field
HSN codeNoTax classification field
Kit or bundleIts own SKUComponent 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-001 and FAN-BLU-OO1 look 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 abc123 and ABC123 are different codes. Use capitals only.
  • Lost leading zeros. A spreadsheet can treat 012345 as a number and show 12345. 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 MD and another MED for 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.
A hand holds a magnifying glass over two almost identical boxes on a workbench.
Two codes that look the same on a label can be two different products in the system.

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.

A woman at a desk reviews a list on a laptop beside a scanner and a stack of cartons.
Checking the list before it is loaded catches faults while they are still cheap to fix.
#TestPassFail
1Count codes that appear more than once0Any
2Look-alike pairs after treating O as 0 and I or L as 1, ignoring case and symbols0 pairsAny pair
3Format: starts with a letter, then capitals, digits or hyphen onlyEvery codeAny code
4Length4 to 16 characters; review any code outside 8 to 12Under 4 or over 16
5Sort by item description: same description, different codeNoneAny
6Print one label per family and scan itScanner reads the exact codeAny difference
7Open the file in a spreadsheet, save, reopenNo code changesAny 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.

CodeResult

TSH-BLK-M (entered twice)

Flagged: duplicate

FAN-BLU-001 and FAN-BLU-OO1

Flagged: look-alikes

012345

Flagged: starts with a digit

bolt m8/20

Flagged: lower case, space and slash

PUMP-SS-0.5HP-CAST-IRON-1PH

Flagged: full stop, and 27 characters

BPK-CHAR-MD and BPK-CHRL-MED (one item, two spellings)

Not flagged

TSH-8LK-M (an 8 typed for the B in TSH-BLK-M)

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.

  1. Export every item with its current code, description, unit and current stock.
  2. 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.
  3. Assign category, family and variant codes from your fixed lists.
  4. Run the seven tests above on the new codes.
  5. 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.
  6. 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.

Talk to our team

Leave your details and we'll get back to you.

Frequently asked questions

A SKU is your own internal code for a product variant. A barcode is a machine-readable image of a code, which can encode your SKU or a standard product number such as a GTIN. You can print your SKU as a barcode, but the two are different things.
No law requires one, but every variant needs its own SKU to be counted, reordered and reported separately. Some tools make it compulsory: Shopify requires a variant's SKU to connect it to a fulfilment service.
Use both: capitals, digits and the hyphen only. Start every code with a letter so a spreadsheet does not drop a leading zero, and avoid O and I where they could be read as 0 and 1.
No. Two products on one code mix their stock and sales history, and the system cannot count, reorder or report either one separately. One SKU should name one variant.
You can, but avoid it. If you must, add the new code beside the old one, keep the old code as a cross-reference, move stock and open orders in one planned cut-over, and never reuse a retired code for a new product.

Sources

  1. 1.Shopify developer documentation: ProductVariant object, Shopify, accessed November 2026
  2. 2.SKU Numbers in eCommerce: Meaning, Examples & How to Use Them, Amazon Smart Commerce India, accessed November 2026
  3. 3.Our SKU audit script and its test run, Arka Inventory, November 2026, on a 10-entry list we built
  4. 4.Arka Inventory pricing, Arka Inventory, accessed November 2026
  5. 5.Arka Inventory inventory visibility, Arka Inventory, accessed November 2026

Keep reading

Arka Inventory.

© 2026 Arka Inventory

Powered by PageLens.ai

Get in touch — we'd love to help.

Request a Demo