What this is
A browser-based schema-mapping engine for product data. Different source files name the same SKU differently — one workbook has it as a UPC, another as a CPID, another as a Grid or Art Base. UPC Concat lets you define one canonical field vocabulary, point each field at the columns where its value lives across every source, and resolve clean, concatenated outputs for any input key.
How it works
The tool decouples three things on purpose:
- Sources — the workbooks you register. Each source is one sheet of one workbook with a header row.
- Canonical schema — your standard field vocabulary. Direct fields read a column; derived fields evaluate a formula referencing other fields.
- Mappings — for each canonical field, an ordered list of file → sheet → column sources. Resolution walks the list and takes the first non-blank value.
Fields flagged ★ identity are used to join rows. On run, every row's identity values get indexed; rows that share any identity value collapse into one cluster, even when each file names the SKU differently. Paste any identity key and the tool finds the cluster, then walks priority across all of its rows to fill every canonical field.
Steps
-
Register source files. Drop workbooks onto the dropzone or click
+ Register file. For each, pick the sheet and the header row, then declare key columns (by header name, or by column letter when the header is blank).
-
Map each canonical field to its source as file → sheet → column. Open a field in the Schema panel; for direct fields, add one or more sources (a file you registered, plus the column to read from that file's sheet). Multiple sources are walked in priority order — first non-blank wins. For derived fields, write a formula referencing other fields with
{name}.
-
Rank file priority (Sources panel) to set the default order applied to every field's source list. Override per-field when a specific field should prefer a different file.
-
Define output templates (optional) — named formulas that concatenate canonical fields into ready-to-paste descriptions.
-
Paste keys and run. Mixed identity types are fine — the tool detects each key's type and finds its cluster.
-
Inspect & export. Expand any row's trail to see where every value came from (which file, sheet, column, priority). Copy TSV, or download
.csv / .xlsx (with a per-cell source-trail sheet).
Privacy
Everything runs locally in your browser. Profiles save schema and mapping rules, not workbook contents — files are re-attached each session.
Three layers
Sources are registered files — each one is a sheet of a workbook with a header row and a set of declared key columns. Canonical schema is your standard field vocabulary, made of direct fields (read from a column) and derived fields (computed from a formula). Field mappings connect each direct canonical field to one or more file → sheet → column sources, walked in priority order so the first non-blank value wins.
Identity & clusters
Fields flagged ★ identity are used to join rows. On run, every source row's identity values get indexed; rows that share any identity value collapse into one SKU cluster, even when each file names the SKU differently. Leading-zero UPCs match across raw, stripped, and zero-padded forms.
Priority
File-level priority (Sources panel, drag to reorder) is the default source order applied to every direct field. Tick "override file priority" inside a field to reorder that field's sources independently — each source row shows whether it is inherited or manual.
Profiles
A profile captures schema, mappings, file priority, and templates — not the workbook data. Save to this browser, or export / import JSON to share a workflow with teammates. The shipped "Eyewear Starter" profile defines the canonical field vocabulary but no file slots — register your own.
Expression language
Derived fields and templates use a safe Excel-like language.
{field} references another canonical field
& concat, + - * / numeric, and standard comparison operators are supported
- Literals include
"text", 42, TRUE, FALSE, and BLANK
| Function | Meaning |
CONCAT(a,b,...) | Join args, blanks dropped |
JOIN(delim,a,b,...) | Join with delimiter, blanks dropped |
IF(cond,then,else) | Conditional |
IFBLANK(v,fallback) | Fallback if v is blank |
COALESCE(a,b,...) | First non-blank |
UPPER LOWER TRIM LEN | String operations |
LEFT RIGHT MID | Substrings, 1-indexed |
PAD(s,len,char) | Left-pad for UPC normalization |
Edge cases handled
Leading-zero UPCs are indexed in raw and zero-padded forms. Columns can be referenced by letter when the header is blank. Circular formula references are rejected.