SKU generator
Compose an internal product code from segments — TSH-BLU-M-0001 — and
export the whole list. Everything below runs in your browser: there is no account, no
upload, and no server call, so the network tab stays empty while you work.
Scheme
Segments combine as a product, so two choices of three values produce six codes. Order is yours and is never re-arranged.
Preview
CSV cells that begin =, +, - or @ are
neutralised with a leading tab, so a code cannot run as a formula when the file is opened
in a spreadsheet.
Next
These codes are plain text — print them alongside a barcode when you have one. A label sheet builder is not here yet, so rather than promise it, the other half of the job that does exist is on the main generator.
Create a QR codeWhat a SKU is, and what it is not
A SKU (stock-keeping unit) is an identifier you own. It exists so your own systems — a spreadsheet, a shop till, a warehouse — can tell one thing you sell apart from another. Because it is yours, there is no authority to apply to and no standard to conform to. That freedom is the whole point, and it is also where schemes go wrong.
It is not a retail barcode. GTIN, UPC and EAN are the globally unique numbers that go in a barcode on a product, and they are issued by GS1 under rules you cannot invent. A SKU never leaves your business; a GTIN appears on shelves worldwide. People say "SKU" when they mean "barcode" often enough that it is worth keeping them apart, because the two have completely different rules.
This tool generates the SKU strings themselves and nothing else. It does not render a barcode and does not emit GS1 data, so what you get is a list of codes to use in your own systems.
How the segments combine
A scheme is built from three kinds of segment, and they combine as a product rather than a sum:
| Segment | What it contributes | Example |
|---|---|---|
| Literal | Fixed text, the same in every code | TSH for the T-shirt range |
| Choice | One value from a list you give | BLU, RED, GRN — three options |
| Sequence | A run of numbers, with a start, a step and padding | 0001, 0002, 0003… |
That multiplication is the thing to internalise before you design anything. Two choices of three values and a sequence of ten thousand is not thirteen items — it is sixty thousand codes, from a form that took a minute to fill in. The tool refuses to build past fifty thousand and tells you the true total as you go, so the arithmetic is visible rather than a surprise at export time.
Designing a scheme that survives growth
The mistake almost everyone makes is designing for the catalogue they have now. A scheme is cheap to get right at the start and expensive to change once codes are printed on labels, listed in a shop and quoted on invoices.
-
Keep each segment's width fixed. If colour is always three
characters, then
TSH-BLU-M-0001can be read by eye and split by a spreadsheet at a known position. A scheme where one segment sometimes has two characters and sometimes four cannot be parsed without guesswork. -
Pad the sequence. This is the single most common oversight.
Unpadded numbers sort as text:
1, 10, 100, 2. Four digits gives you0001through9999in the order a human expects, in every file listing and every spreadsheet column. - Leave room for the category you will subdivide. If you might split "M" into "M" and "MW" for a wider fit, decide now whether that is a new value in the same segment or a new segment entirely. Changing it later means either a gap in the sequence or reissuing codes.
- Decide where the sequence goes and leave it there. A trailing sequence keeps codes grouped by variant; a leading one groups by nothing useful. Order is never rearranged for you.
- Do not encode anything that changes. Price, supplier and season are all things that will differ from what you wrote down. A SKU identifies the thing, not its current situation.
Separators, case and padding
The separator is a readability choice more than a technical one. A hyphen is the convention most people expect. A slash reads well in print and badly in a URL, which matters if the code will ever appear in one. Underscores survive systems that dislike hyphens. No separator at all produces the shortest code, and the hardest to read aloud or copy by hand.
The case rule is applied to literals and generated parts alike, so one
scheme cannot end up mixing conventions. Uppercase is the usual choice: it reads
clearly at small sizes on a label, and it removes an entire class of mismatch
where someone types tsh-blu-m-0001 into a system that stored
TSH-BLU-M-0001.
Characters to avoid on a label
If a code will ever be read by a person rather than a machine — typed into a
search box, read down a phone line, written on a returns form — some characters
cost you support time. The classic pairs are 0 and O,
and 1, I and l. At small print sizes they
are genuinely hard to tell apart, and a mistyped code looks like a missing
product rather than a typo.
You do not have to avoid them, but it is worth knowing you chose them. A range built entirely from unambiguous characters is noticeably easier to live with at scale.
Checking the list before you commit
Two things are worth doing before you use a generated list anywhere real:
-
Look for duplicates. A scheme can produce the same code twice
—
BLUas a colour choice andBLUas a size value will collide. The tool reports collisions it finds rather than handing you a list with a hidden repeat in it. - Read a few codes out loud. Pick three from different parts of the sequence and read them as you would to a colleague. If you stumble, your customers will too.
The preview materialises the first thousand codes so a large scheme does not lock up the browser, but the total count shown is always the true one. Export gives you the whole list as CSV for a spreadsheet or TXT for a plain list, and you can copy it to the clipboard directly.
SKUs and QR codes
The two do different jobs and are often used together. A SKU identifies a product inside your business; a QR code is a way to hand something to a phone. On a product label you might do both — print the SKU as text for your own staff and a QR code for the customer.
If you want a code that carries the SKU itself, a plain text QR code does that, and a website link code is better if the customer should land on a product page. If the destination might change — a range that gets renamed, a URL that moves — a dynamic code lets you repoint it without reprinting the label.
Frequently asked questions
What is the difference between a SKU and a barcode?
A SKU is an internal identifier you invent and control; a barcode holds a globally unique retail number such as a GTIN, UPC or EAN that GS1 issues under its own rules. A SKU never leaves your business. This tool generates SKU strings only — it does not render barcodes and does not emit GS1 data.
How many SKUs can I generate at once?
Up to fifty thousand. The limit is checked against the total the scheme would produce before anything is built, because segment counts multiply: three colours, four sizes and a run of five thousand is sixty thousand codes, not twelve. The preview shows the first thousand so a large scheme stays responsive, but the total reported is the real one.
Does my data get uploaded anywhere?
No. The whole tool runs in your browser and makes no server call at all — no upload, no telemetry, no remote configuration. That is a property of how it is built rather than a promise about policy, and you can confirm it by watching the network tab while you use it.
Should SKUs have leading zeros?
Yes, if the code contains a number that will be sorted, listed or read by a person. Unpadded numbers sort as text — 1, 10, 100, 2 — in both file listings and spreadsheet columns. Padding to a fixed width fixes the ordering, which is why the default example uses four digits.
Can I use this to make UPC, EAN or GTIN codes?
No, and it would be a mistake to try. Those numbers are allocated by GS1 and carry a check digit computed under their rules. A made-up number in that format will either be rejected by a retailer or, worse, collide with a product that already exists. Use this for internal codes only.
What is the difference between the CSV and TXT export?
CSV is one code per row with a header, for opening in a spreadsheet or importing into a product system. TXT is a plain list, one code per line, for pasting into a label printer, a script or anywhere that just wants the values. Both contain the same codes.
Why does my scheme report duplicate codes?
Because two segments can produce the same text. If "BLU" appears both as a colour choice and as a size value, the same code is generated twice and neither is wrong — the scheme itself is ambiguous. Change one of the values so every code is unique before you use the list.