How to build a full sku by merging attribute columns
- Step 1Export the product CSV with attribute columns — Download from your PIM, ERP, or supplier template. You need the attributes as discrete columns (
Brand,Category,Size,Colour) — that's the shape this tool merges. - Step 2Drop the file onto the merger above — Headers become checkboxes; delimiter and encoding are auto-detected, so semicolon-delimited supplier feeds load without setup.
- Step 3Tick the attribute columns in SKU-segment order — Tick order is the SKU order. For
BRAND-CAT-SIZE-COLOUR, click Brand, then Category, then Size, then Colour. No drag-reorder exists — re-tick to change the sequence. - Step 4Set the separator to match your SKU convention — Type
-for hyphenated SKUs,_for underscore, or leave it empty for a continuous code likeSHRTTOPRED. The separator is inserted verbatim between every segment, including around an empty one. - Step 5Name the column `SKU` — Default header is
merged; rename it toSKU(orproduct_sku,variant_id) to match your import template. The field can't be blank — Merge stays disabled until filled. - Step 6Merge, then uppercase / fix gaps as needed — Click Merge columns; the attribute columns collapse into the SKU at the front of the file. To uppercase the result, run CSV Case Converter; to collapse a
--left by an empty attribute, run CSV Find & Replace.
Controls the SKU merger actually exposes
Exactly these controls. There is no skip-empty-attribute, no uppercase toggle, no zero-padding, and no drag-reorder in the browser UI.
| Control | Behaviour for SKU building | Default |
|---|---|---|
| Column checklist | Pick the attribute columns. Tick order = SKU segment order. No drag-reorder | Nothing ticked |
| Separator | -, _, ., or empty for a run-together SKU. Inserted around empty attributes too | Single space (change this for SKUs) |
| New column name | Header of the SKU column. Rename to SKU. Cannot be blank | merged |
| Insert position | Browser tool puts the SKU first (position 0). API/orchestrator expose insertAt | 0 (front) |
What the tool does and does not do for SKUs
Composite-SKU expectations vs the tool's literal-concatenation reality, with the sibling tool that covers the gap.
| SKU need | Does the merger do it? | Where to do it instead |
|---|---|---|
| Join attributes with a delimiter | Yes — its core function | — |
Skip blank/optional attributes (no --) | No — empty attribute still emits separators | CSV Find & Replace -- → - after merge |
| Uppercase the SKU | No — inherits source casing | CSV Case Converter |
Zero-pad a numeric size (8 → 008) | No — copies values verbatim | Pad in the source export / spreadsheet first |
Abbreviate Category to a code (Tops → TOP) | No — uses the literal value | CSV Find & Replace or a lookup before merge |
Cookbook
Before/after rows from product feeds, including the gaps in optional attributes. Output is exactly what the tool emits — no auto-cleanup.
Four-attribute composite SKU
ExampleThe clean case: every attribute populated, hyphen separator. Source columns vanish; the SKU leads the file.
Input: Brand,Category,Size,Colour,Price NIKE,SHOE,42,BLK,89.99 Tick: Brand, Category, Size, Colour Separator: "-" New name: SKU Output (attribute columns removed, SKU first): SKU,Price NIKE-SHOE-42-BLK,89.99
Empty optional attribute leaves a double separator
ExampleA one-size product with blank Size produces NIKE-CAP--BLK. There is no skip-blank — the empty Size still emits its hyphens. This is the classic difference from Excel TEXTJOIN(TRUE,...).
Input:
Brand,Category,Size,Colour
NIKE,CAP,,BLK
Tick: Brand, Category, Size, Colour Separator: "-"
Output:
merged
NIKE-CAP--BLK
^^ double hyphen where Size was empty
Fix: CSV Find & Replace "--" -> "-"Run-together SKU with an empty separator
ExampleLeave the separator field empty to concatenate with no delimiter — useful for fixed-width SKU schemes.
Input: Brand,Style,Size AB,1024,M Tick: Brand, Style, Size Separator: "" (empty) Output: merged AB1024M
Lowercase source values come out lowercase
ExampleThe merger never changes case. If your scheme needs uppercase SKUs, run the result through Case Converter — the merger alone won't do it.
Input: brand,cat,colour nike,shoe,blk Tick: brand, cat, colour Separator: "-" Merger output: merged nike-shoe-blk Then CSV Case Converter (uppercase) -> NIKE-SHOE-BLK
Attribute value containing the delimiter is quoted, not corrupted
ExampleIf an attribute legitimately contains your separator character, the parser keeps it inside the field and the SKU is re-quoted. Worth knowing before you pick a delimiter that appears in your data.
Input (Category value has a hyphen): Brand,Category,Size ACME,"T-Shirt",L Tick: Brand, Category, Size Separator: "-" Output (the field is re-quoted; the SKU now has an ambiguous hyphen): merged "ACME-T-Shirt-L" Lesson: pick a delimiter that doesn't appear in attribute values, or normalise Category first (T-Shirt -> TEE) with Find & Replace.
Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
Optional attribute is blank — double separator in the SKU
By designNo skip-blank option exists. An empty Size between CAP and BLK with a - separator yields CAP--BLK. Excel's TEXTJOIN("-",TRUE,...) would skip it; this tool does not. Collapse -- → - afterwards with CSV Find & Replace.
SKU comes out lowercase
PreservedThe merger copies source casing verbatim — there is no uppercase toggle. If your SKU convention is uppercase, run the merged column through CSV Case Converter. Casing the source attributes before merging also works.
Numeric size loses zero padding
PreservedThe tool copies values exactly, so a size stored as 8 stays 8, not 008. If your scheme needs fixed-width segments, pad the source column (in the export or a spreadsheet) before merging — the merger can't add padding.
Attribute value contains the delimiter character
SupportedA T-Shirt category merged with a - separator produces ACME-T-Shirt-L, which is ambiguous to split later, and the field is re-quoted to keep the value intact. Choose a delimiter your attributes don't contain, or normalise the value first (T-Shirt → TEE) with CSV Find & Replace.
Fewer than two attributes ticked
invalid_configThe Merge button is disabled below two ticks; the API returns csv-column-merger requires ≥ 2 columns (400). A SKU from a single column is just that column — rename it with CSV Header Rename instead.
Source attribute columns are removed
By designAfter the merge, Brand / Category / Size / Colour no longer exist — they're replaced by the SKU column. If you need both the SKU and the discrete attributes (common for marketplace feeds), duplicate the attribute columns before merging.
SKU column is at the front of the file
ExpectedThe browser tool inserts the merged SKU at position 0, so the file becomes SKU, Price, .... Many import templates expect SKU first anyway; if yours doesn't, reorder with CSV Column Reorder. The API accepts insertAt.
Duplicate SKUs generated from non-unique attribute combos
ExpectedIf two variants share the same Brand+Category+Size+Colour, they get identical SKUs — the merger doesn't enforce uniqueness. Add a variant or sequence column to the merge, then check for collisions with CSV Duplicate Finder on the SKU column.
Large catalogue exceeds free tier
Upgrade requiredThis is a Pro tool; free tier caps at 2 MB / 500 rows. A full catalogue of thousands of variants needs Pro (100 MB / 100,000 rows). Split with CSV Row Splitter to test on free tier first.
Frequently asked questions
What if some attribute columns are optional and sometimes blank?
The merger does not skip blanks, so an empty optional attribute leaves a double separator — CAP--BLK rather than CAP-BLK. (The old copy claiming a skip-blank option was wrong.) Merge first, then collapse -- → - with CSV Find & Replace.
Can I uppercase the merged SKU automatically?
Not in the merger — it inherits the case of the source values. Run the merged SKU column through CSV Case Converter for uppercasing, or uppercase the source attribute columns before merging.
Do the original attribute columns remain after building the SKU?
No — they're removed and replaced by the SKU column. If your marketplace feed needs both the SKU and the discrete attributes, duplicate the attribute columns in a spreadsheet before running the merge.
How do I control the order of segments in the SKU?
By the order you tick the checkboxes. Tick Brand → Category → Size → Colour to get BRAND-CAT-SIZE-COLOUR. There is no drag-to-reorder — re-tick in the right order if you get it wrong.
Can I make a SKU with no separator between segments?
Yes — clear the separator field entirely. AB + 1024 + M with an empty separator gives AB1024M, ideal for fixed-width SKU schemes.
Can the tool zero-pad a size like `8` to `008`?
No. It copies values verbatim, so 8 stays 8. Pad the source column in your export or spreadsheet before merging — the merger has no padding option.
What if an attribute value contains my separator character?
It's preserved and the field is re-quoted, but the resulting SKU becomes ambiguous to split later (e.g. ACME-T-Shirt-L). Pick a delimiter your data doesn't contain, or normalise the value (e.g. T-Shirt → TEE) with CSV Find & Replace first.
Will the tool stop me creating duplicate SKUs?
No — if two rows share the same attribute combination, they get the same SKU. Include a uniqueness-carrying column (variant ID, sequence) in the merge, then scan the SKU column with CSV Duplicate Finder to catch collisions.
Can I abbreviate `Category` to a short code as part of the merge?
Not in one step — the merger uses the literal value. Map Tops → TOP first with CSV Find & Replace (or a lookup in your PIM), then merge the abbreviated column into the SKU.
Is product and pricing data uploaded anywhere?
No. The merge runs entirely in your browser via PapaParse. Supplier costs, margins, and catalogue data never reach a server — only an anonymous usage counter if you're signed in.
How large a product catalogue can I process?
Free tier caps at 2 MB / 500 rows; this is a Pro tool with limits of 100 MB / 100,000 rows. For a bigger catalogue, split with CSV Row Splitter, build SKUs per chunk, and recombine with CSV Merger.
Can I generate SKUs in an automated catalogue pipeline?
Yes. GET /api/v1/tools/csv-column-merger returns the schema; pair the @jadapps/runner once, then POST { columns: ["Brand","Category","Size","Colour"], separator: "-", newHeaderName: "SKU", insertAt: 0 } with your CSV to 127.0.0.1:9789/v1/tools/csv-column-merger/run. On-device, so catalogue data stays local.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.