Why catalog SKUs don't fit one-of-a-kind pieces
Most SKU guides are written for stores that sell the same item over and over. There, the SKU encodes what separates one item from its siblings: brand, style, color, size. Shopify's own apparel example uses the format ####-###-### for brand, style and size, so 4225-776-3234 means boot-cut pants from brand 4225 in 32x34. That works when you stock the same pants in twelve sizes.
A vintage piece has no siblings. Brand, size and color are already in the listing, and every piece is its own product. So a reseller SKU only has three jobs: be unique, stay attached to the piece, and get you back to the piece fast. Shopify describes SKUs as codes “that you can use internally to track your inventory and report on your sales”, and they aren't required (Shopify Help Center: SKUs).
They still pay off with one-offs, because that's where the mix-ups start. In a March 2022 Shopify Community thread, a vintage store selling 200 to 500 one-of-a-kind items a week described writing SKUs by hand on sticky notes tucked into the product sleeve, and occasionally pulling the wrong piece when similar items came in different conditions.
SKU examples for clothing resellers
For one-offs, a running number is enough, optionally with a short prefix. You don't need a SKU generator for this; a counter in a spreadsheet does the job. Three formats to choose from:
| Format | Example | Good fit if … |
|---|---|---|
| Number only | 000142 | you track everything in one spreadsheet and don't store by category |
| Category + number | JK-0142 (jacket), DN-0087 (denim), DR-0031 (dress) | you sort by category or want to see which categories sell |
| Intake batch + number | 2647-012 (2026, week 47, 12th piece) | you want to see how long a piece has been sitting; the trade-off is a longer code |
Shopify's best practices for the format:
- Short: Shopify suggests no more than 16 characters and says a format as short as 4 to 8 characters can work, depending on what you sell. JK-0142 is 7.
- No spaces or special characters: Shopify warns they can cause search problems. Dashes and underscores, on the other hand, are useful for separating parts of the code.
- No look-alikes: Shopify advises avoiding formats where 0 and 1 can be confused with O and I. In practice: keep O and I out of your prefixes. That's why the examples above use JK, DN and DR, and why “TOP” for tops or “OUT” for outerwear make poor prefixes.
- One case only: SKUs are case-sensitive. Shopify's example: “ABC123” and “abc123” count as different SKUs. Stick to uppercase.
- Room to grow: four digits cover 9,999 pieces per prefix; start with five if you expect more.
Three rules Shopify won't enforce for you
- Every number once, even after the piece sells. Shopify doesn't block duplicate SKUs; it only shows a warning in the Inventory section, and it notes that duplicates can cause issues with third-party integrations and inventory tracking. A reused number blends two different pieces in your reports and returns. Tools rely on unique codes too: if a create attempt in Klamox, for example, gets interrupted, it looks among the listings created in those few minutes for the one that may already exist, by SKU first. If two of them carry the same SKU, it stops for that piece instead of guessing.
- No storage location inside the SKU. Pieces move: from the intake bin to the rack, from the rack to the photo station. A location baked into the code is wrong after the first move. Keep it separate (next section).
- The next free number lives in exactly one place. A simple spreadsheet with columns for SKU, short description, location, intake date and status is enough. One reply in an r/Flipping thread about inventory systems suggested much the same: a row number in a spreadsheet plus bins labeled with letters. Rule of thumb: print tags in blocks, say 50 at a time, so assigning a number at intake is just tearing off the next one.
If you crosslist on eBay, use the same SKU in eBay's Custom label (SKU) field. eBay describes it as your unique identifier for the item and notes that buyers don't see it (eBay seller help).
Hang tags and storage spots
The number only helps if it stays on the piece. Shopify mentions that businesses also label their products with stickers that display the SKU, for easier exchanges and returns. For clothing, attach a hang tag to the garment itself rather than a note to the hanger, which gets swapped sooner or later. A tagging gun through the care label keeps the fabric intact.
Track the location separately. Give racks and bins a letter and shelves or sections a number: B3 means bin B, section 3. Record it in your spreadsheet, or in Shopify as a single line text product metafield called “Storage spot”; “Location” is easy to mix up with Shopify's inventory locations. Metafields let you extend products with your own custom data. When a piece moves, you change one field and the SKU stays the same.
The whole flow in six steps:
- Intake: take the next free number from the spreadsheet, or tear off the next pre-printed tag.
- Tag: attach the tag, add a row to the spreadsheet.
- Photograph: the SKU card always in the same spot of the photo sequence (next section).
- List: enter the SKU in the variant's SKU field, under Inventory in the Shopify admin.
- Store: put the piece in its spot, record the location.
- Sale: SKU of the sold product → location → piece, then check the tag against the order.
Photograph the SKU instead of typing it
A typical weak spot is copying the SKU from a slip of paper, often hours after the shoot. It's simpler to write the SKU on a card and photograph it as its own shot in a fixed position, for example always as the last photo of each piece. Then the number lives inside the photo set itself: piece, photos, listing and location stay linked by one code, and when you scroll through a shoot, the card shows where one piece ends and the next begins. In a 2019 Scavenger Life forum thread, a reseller who labels every box and shelf does something similar for whole boxes: “The first picture I take is of the box number.”
A few rules of thumb so the number reads clearly in the photo:
- Printed or block capitals, large, with a thick marker. You shouldn't have to wonder whether it's a 1 or a 7.
- Let the card fill most of the frame, flat and sharp, with no shadow or glare on the writing.
- Keep it apart from the brand label: brand and care labels often carry the manufacturer's own style or article numbers. Shoot your card so it's obvious which number is yours, and don't put a second article number on it. Label anything else you add, such as “SKU JK-0142 · Spot B3”, so it's clear which number is which.
- One card for everything: if you note measurements, put them on the same card. How to take them is in the guide on how to measure clothes for reselling; how to grade condition (NWT, EUC and so on) is in the condition grading guide.
With Klamox, the card photo becomes the SKU field of the Shopify variant. Set the workflow to two label photos per piece, one of the brand and size label and one of your card. From these the AI reads brand, size and SKU, the SKU only if it's legible in a photo; label photos don't go to your store by default. The card only separates pieces for you: the tool splits the batch strictly by the number of photos per piece set in the workflow and doesn't sort anything on its own. If one piece is missing a photo, every photo after it, SKU cards included, shifts to the wrong piece, so check the order before you start. A SKU example such as JK-0142 in the workflow's “Label / SKU detection” card tells the AI which format to look for. Which number it picks when a manufacturer's number is also in the frame still isn't defined, and handwriting is recognized much less reliably than print.
If the storage spot is already decided at intake, the AI can read it from the card too: add a field “Storage spot” with the source “Automatic — is on the label” in the workflow's “Custom fields (metafields)” card. It is written as a single line text metafield, custom.storage_spot; if you've already created a definition for it in Shopify, it should use the single line text type without a preset list of values. The tool creates new products as drafts by default, so check the SKU there before you publish. For English-language stores: titles and descriptions come out in German by default, a workflow is switched to English only on request, not in your own editor, and the size option on the variant is still named “Größe”. More on the features page.
Shopify SKU vs. barcode vs. handle
Three fields that often get mixed up:
| Field | What it is | For one-of-a-kind pieces |
|---|---|---|
| SKU | your internal stock code, one per variant | always set, unique, never reused |
| Barcode | a scannable code, such as a GTIN (UPC or EAN); up to 20 per product or variant | a GTIN only if the piece actually carries one; never make one up |
| Handle | part of the product URL, generated from the title | keep it unique and readable, for example with the SKU at the end |
SKU: Shopify says SKUs are primarily for internal use. You can search by SKU in the admin search bar. If you want customers to see SKUs or search by them on your storefront, Shopify points to theme code or the Search & Discovery app.
Barcode: Shopify notes that some sales channels might require a GTIN before a product can be published there. Shopify has no specific rule for secondhand one-offs, but Google's Merchant Center help does: “Used or vintage products may have a GTIN, and you should provide it if possible.” If there's none, leave it out: “Don't guess or make up a value” (Google Merchant Center Help: GTIN), so with no code on the piece the field stays empty. If you also sell in person: in Shopify POS, you can find a product by scanning or searching any of its barcodes, or its SKU. And if you import by CSV: the column is now called “Barcodes”. A file that has both the old “Barcode” column and the new “Barcodes” column fails to import.
Handle: Shopify generates it from the title, so “Black Sunglasses” becomes “black-sunglasses”. It can contain letters, numbers and dashes, but no spaces, and Shopify advises not to edit it too often, or the product might not display in search engine results. In vintage, many listings have near-identical titles, like “Vintage Adidas Track Jacket (L)”. Adding the SKU when you create the product gives every piece its own readable URL: vintage-adidas-track-jacket-l-jk-0142. That's a recommendation, not a Shopify rule. If you import by CSV, there's a second reason: a row whose handle matches an existing product is ignored, or, with “Overwrite products with matching handles” selected, overwrites that product's details (Shopify Help Center: CSV). Either way, set the handle before the product goes live.
When a piece sells
With “Track quantity” on and stock at 1, Shopify's default “Stop selling when out of stock” applies: once inventory hits 0, customers can't add the piece to their cart. In person it's different. According to Shopify, staff using Shopify POS can keep selling when available inventory reaches zero; POS only warns them first (Shopify Help Center: inventory setup). So pull a piece that sold online off the rack right away.
What happens to the product page afterwards is a separate decision. Archiving hides the product from your storefront and can be undone; an unarchived product comes back as a draft. Deleting is permanent, and deleted products can't be restored. Whichever you choose, the SKU stays marked as used in your spreadsheet.