SKU naming conventions
Our product codes carry meaning. Anyone should be able to look at a SKU and know what the product is — without opening the database.
SPU (customer-facing SKU) format
[form factor]-[region]-[data]-[duration]Examples:
| SKU | Meaning |
|---|---|
eSIM-UK-10GB-30D | UK eSIM, 10 GB, 30 days |
eSIM-EU-UNL-7D | Europe multi-country eSIM, unlimited data, 7 days |
SIM-AU-20GB-28D | Australia physical SIM, 20 GB, 28 days |
eSIM-GLOBAL-5GB-15D | Global travel eSIM, 5 GB, 15 days |
eSIM-JP-3GB-7D | Japan eSIM, 3 GB, 7 days |
Variant (fulfillment SKU) format
[SPU]-[carrier code]Examples:
| Variant SKU | Meaning |
|---|---|
eSIM-UK-10GB-30D-VODA | The UK 10GB 30D SPU, fulfilled on Vodafone UK |
eSIM-UK-10GB-30D-EE | Same SPU, fulfilled on EE |
eSIM-UK-10GB-30D-THREE | Same SPU, fulfilled on Three UK |
SIM-AU-20GB-28D-TELSTRA | Australia physical SIM, fulfilled via Telstra |
If a carrier variant has additional dimensions (5G, voice), append as another suffix:
eSIM-UK-10GB-30D-VODA-5G
eSIM-UK-10GB-30D-EE-VOICEHard rules
- All caps.
A-Zand0-9only. - Hyphens only. No underscores, no spaces, no slashes.
- SPU ≤ 32 characters. Variant ≤ 48 characters. (Shopify, Amazon and most platforms cap SKU length around these limits.)
- Region codes use ISO 3166-1 alpha-2 where possible (
UK,JP,AU,FR,DE). For multi-country products, use our own abbreviations:EU,NA(North America),SEA(Southeast Asia),GLOBAL. - Data amounts use
{number}GBformat. Sub-GB values convert to fractional (e.g. 500MB →0.5GB). Unlimited uses literal stringUNL. - Duration uses
{number}Dformat (e.g.30D, not30DAYSor30d). - Carrier codes ≤ 8 characters (typically ≤ 4). See Carrier codes.
The immutability rule
Once a SKU has been used on a real order, it can never change. Not even to fix a typo.
Why: Shopify order history, Amazon seller account, eBay listings, supplier invoices, OMS order records, and customer receipts all reference the SKU. Changing it breaks every one of those links.
If you discover a typo after launch, the only clean path is:
- Set the broken SKU to
is_active = false - Create a new correctly-named SKU
- Document the replacement in the product’s description
This is why: think twice before creating any new SKU. Run it past someone.
Naming a new product: checklist
Before adding a SKU, answer all of these:
- Does a similar SKU already exist? Search the
productstable first. - Is the region code ISO-standard or a pre-approved region abbreviation?
- Does the data amount use
GB/UNLcorrectly? - Does the duration use
{N}Dformat? - Is the total length within 32 characters for SPU?
- Have you written the product name (English + Chinese) to go alongside?
- Have you identified which carriers this will have variants for?
- Have you decided the retail price in AUD / USD / EUR?
If any answer is “not sure,” pause and ask before creating.
Related
- Carrier codes — the authoritative carrier code list
- Data model spec — underlying table structure