How to transpose a product attributes csv for pim or feed upload
- Step 1Identify your export shape first — If you have ONE product with its attributes listed vertically (attribute name in column A, value in column B), the transpose is correct — it turns that into a single horizontal row. If you have MANY products in a
SKU, Attribute, ValueEAV table, the transpose is the wrong operation; see the edge-cases section for the pivot path. - Step 2Export from your ERP or source system — Pull the attribute export as CSV. The transposer treats it as a plain grid and does not understand product semantics — it won't know which column is the SKU or preserve any column as a key.
- Step 3Protect identifier columns before exporting — GTINs, EANs, and UPCs with leading zeros get mangled if your source tool stored them as numbers. The transposer carries text across faithfully, but it can't restore a zero Excel already stripped. Format ID columns as text at the source, or wrap them, before exporting.
- Step 4Drop the file onto the tool — The transpose runs automatically on load. There are no options — no SKU key picker, no attribute-spread function, no orientation toggle. The delimiter is auto-detected and the flip is always rows ↔ columns.
- Step 5Verify shape from the stat cards and preview — Check
Rows before/afterandColumns before/after. The preview (first 10 output rows) shows whether you got the clean horizontal row you expected, or — if you fed an EAV table — repeated SKUs spread across columns, which signals you needed a pivot instead. - Step 6Download and import into your PIM — Output downloads as
<name>.transposed.csv(plain UTF-8, no BOM). Import into Akeneo, Plytix, or your feed platform. If accented attribute values garble in Excel, re-save asCSV UTF-8or pre-clean with csv-cleaner.
Transpose vs EAV-to-wide pivot
The decision table. This tool does the transpose only; a multi-product EAV table needs the pivot.
| Your source | Operation you need | Tool |
|---|---|---|
| One product, attributes listed vertically (2 columns) | Transpose (flip vertical → horizontal) | CSV Transposer — drop and flip |
Many products, SKU, Attribute, Value rows | EAV → wide pivot (group by SKU) | pandas pivot / Excel PivotTable / SQL crosstab |
| Already product-per-row with attribute columns | Nothing — already PIM-ready | Import directly |
| Attribute columns you need as rows (rare) | Transpose | CSV Transposer |
Before and after: one product's vertical attribute list
The case the transposer handles cleanly. A two-column vertical list becomes a single horizontal row.
| Aspect | Source (attributes as rows) | Output (attributes as columns) |
|---|---|---|
| Grid shape | 5 rows × 2 columns | 2 rows × 5 columns |
| First column after flip | Attribute, SKU, Color, Size, Price | Becomes the header row (attribute names) |
| Second row after flip | Values column | The product's values, one per attribute |
| GTIN with leading zero | 0012345678905 (if stored as text) | Preserved as text — never re-numbered |
| Multi-line description | Quoted cell with line breaks | Carried across intact (if quoted in source) |
Free vs Pro limits for product files
CSV Transposer is a Pro tool. Catalog exports can be large.
| Limit | Free | Pro |
|---|---|---|
| Max file size | 2 MB | 100 MB |
| Max rows processed | 500 | 100,000 |
| Practical note | Fits a single product's attribute list easily | A 100k-row EAV table flips to 100k columns — unusable; pivot instead |
Cookbook
Real product-data shapes and how the raw flip handles each — including the EAV case where you should pivot, not transpose.
One product's vertical attributes → a horizontal row
ExampleThe clean case. A product whose attributes are listed down two columns becomes a single product-per-row record ready for PIM import.
Input (attributes as rows): Attribute,Value SKU,WIDGET-001 Color,Blue Size,Large Price,29.99 Download (.transposed.csv): Attribute,SKU,Color,Size,Price Value,WIDGET-001,Blue,Large,29.99
Multi-product EAV table — and why the flip breaks it
ExampleA SKU, Attribute, Value table with many products will NOT become a product-per-row catalog by transposing. The flip just spreads repeated SKUs across columns. This is the case for a pivot.
Input (EAV — repeated SKUs): SKU,Attribute,Value WIDGET-001,Color,Blue WIDGET-001,Size,Large WIDGET-002,Color,Red Transpose gives (NOT a catalog): SKU,WIDGET-001,WIDGET-001,WIDGET-002 Attribute,Color,Size,Color Value,Blue,Large,Red For a real product-per-row catalog, pivot: pandas df.pivot(index='SKU', columns='Attribute', values='Value')
Leading-zero GTINs survive (when stored as text)
ExampleBarcodes commonly start with zeros. The transposer is text-only and preserves them — but it cannot recover a zero that Excel already stripped in the source. Protect ID columns at export time.
Input (GTIN stored as text in source): Attribute,Value SKU,WIDGET-001 GTIN,0012345678905 Output (zero preserved): Attribute,SKU,GTIN Value,WIDGET-001,0012345678905 If the source had already turned it into 12345678905, the transposer carries that mangled value across as-is.
Varying attribute counts get padded
ExampleWhen two products have different numbers of attribute cells, short rows are padded to the widest row so the grid stays rectangular — empty cells appear where attributes were missing.
Input (second row shorter): Product,Color,Size,Material Widget,Blue,Large,Cotton Gadget,Red Output (Gadget padded): Product,Widget,Gadget Color,Blue,Red Size,Large, Material,Cotton,
Semicolon delimiter and quoted commas in descriptions
ExampleEuropean exports often use semicolons, and descriptions contain commas. The delimiter is auto-detected; commas inside quoted cells are kept as one value.
Input (semicolon-delimited): Attribut;Wert Name;"Bürostuhl, ergonomisch, schwarz" Preis;199,00 Output (delimiter detected; quoted comma preserved): Attribut;Name;Preis Wert;"Bürostuhl, ergonomisch, schwarz";199,00
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.
Multi-product EAV table transposed instead of pivoted
Wrong toolA SKU, Attribute, Value table with many products will not collapse into a product-per-row catalog when flipped — repeated SKUs just become repeated columns. This is the most common product-data misuse. Use pandas pivot, a SQL crosstab, or an Excel PivotTable keyed on SKU. The transposer has no key-column logic.
Leading zeros already stripped at the source
Cannot recoverIf Excel turned 0012345678905 into the number 12345678905 before you exported, the zero is gone from the file and the transposer carries the mangled value across faithfully. Protect ID columns by formatting them as text before pasting/exporting; the transposer preserves text exactly but cannot restore data the source already lost.
No grouping or deduplication of SKUs
Not aggregatedThe transpose never groups or dedupes. If a SKU appears on several rows, you get several columns for it. Deduplicate with csv-deduplicator or aggregate with a PivotTable before flipping if you need one record per SKU.
Varying attribute counts per product
PaddedProducts rarely share an identical attribute set. Short rows are padded to the widest row with empty strings before flipping, so missing attributes show as blank cells in the output — which is the expected shape for most PIMs (they treat blank as 'not set').
100k-row catalog → 100k columns
Spreadsheet limitPro allows up to 100,000 rows; transposing that many produces 100,000 columns, far past Excel's 16,384-column cap. A large catalog is almost never something you want to transpose wholesale — it's the signature of an EAV table that should be pivoted instead, or kept product-per-row to begin with.
Multi-line description with embedded newline
Preserved if quotedLong marketing descriptions often contain line breaks. They transpose cleanly only if RFC-4180 quoted in the source (the parser respects quoted newlines). An unquoted newline is read as a new row and shifts the grid. Re-export with proper quoting if descriptions break the layout.
Unquoted comma in a description splits the cell
Parse riskA description like ergonomic, black, mesh written without quotes in a comma-delimited file is read as three cells, shifting the row. That's a source-export defect; the transpose carries the misalignment across. Fix quoting at the source or with csv-find-replace first.
Free-tier cap exceeded
BlockedFree processing stops at 2 MB and 500 rows; this is a Pro tool. Catalog exports with rich descriptions exceed 2 MB quickly. Upgrade to Pro (100 MB / 100,000 rows), or — for a single product's attribute list — the free limits are usually plenty.
Source already product-per-row
ExpectedIf your export already has one product per row with attribute columns, it's PIM-ready and should not be transposed — flipping it would turn attributes into rows. Import it directly. Check the stat cards to confirm orientation before downloading.
Currency and unit symbols are not normalised
Preserved€199,00, $29.99, 12 cm, 0.5 kg are all carried across as plain text — the transposer never parses or standardises units or currencies. Normalise with csv-find-replace before transposing if your feed platform requires a specific numeric format.
Frequently asked questions
Will this turn my EAV product table into a product-per-row catalog?
No — and this trips a lot of people up. A SKU, Attribute, Value table (EAV) needs a pivot, which groups rows by SKU and spreads the attribute column into named columns. A transpose just flips the whole grid, so repeated SKUs become repeated columns. Use pandas pivot, a SQL crosstab, or an Excel PivotTable for an EAV table. The transposer is for a single product's vertical attribute list, not a multi-product EAV export.
What does the transposer do correctly for product data?
It turns a vertical attribute list — attribute names down column A, values in column B — into one horizontal product-per-row record. That single-product flip is exactly what a transpose is for. Anything involving grouping by SKU is a pivot, not a transpose.
Are my GTINs and barcodes kept intact?
Yes, as text — the transposer never coerces numbers, so a GTIN stored as text (including leading zeros) is carried across byte-for-byte. The one thing it can't do is recover a leading zero that Excel already stripped before you exported. Format ID columns as text at the source to be safe.
What happens when products have different attributes?
Short rows are padded to the widest row with empty strings before flipping, so missing attributes become blank cells in the output. Most PIMs read a blank column as 'attribute not set', which is the expected behaviour for variable catalogs.
Does it deduplicate or group repeated SKUs?
No. There's no grouping or deduplication — repeated SKUs become repeated columns. Deduplicate with csv-deduplicator or aggregate with a PivotTable first if you need exactly one record per SKU before flipping.
Can I pick the SKU as the key for the new columns?
No — the transposer has zero options and no concept of a key column. Choosing a key to spread on is a pivot operation; use pandas or Excel for that. The flip always moves the original header row to the first column and swaps every cell.
How are multi-line descriptions handled?
Correctly, as long as the source quotes them per RFC 4180 — the parser respects quoted newlines, so a multi-line description stays in one cell through the flip. If the source left the newline unquoted, the parser sees an extra row and the grid shifts; re-export with proper quoting.
Does it work with semicolon-delimited European exports?
Yes. The delimiter is auto-detected (comma / semicolon / tab), so European ERP exports that use semicolons flip without any setting, and decimal commas like 199,00 inside values are left untouched.
How large a product file can I transpose?
Free tier caps at 2 MB and 500 rows; this is a Pro tool, with Pro limits of 100 MB and 100,000 rows. A single product's attribute list is tiny. A huge catalog, though, is almost always something to pivot or keep product-per-row — transposing 100k rows yields 100k columns, which no PIM or spreadsheet can use.
Is my supplier and pricing data uploaded?
No. Parsing and transposing run entirely in your browser via PapaParse. Cost data, supplier identifiers, and unreleased SKUs never reach a server. If signed in, only an anonymous run counter (no content) is recorded for your dashboard.
Why does Excel garble accented attribute values after download?
The output is UTF-8 without a BOM, and Excel-on-Windows may assume Windows-1252. Open via Data → From Text/CSV with UTF-8 selected, save as CSV UTF-8, or pre-clean with csv-cleaner. The transposer does not add a BOM.
What's the right workflow to prep a product file for a PIM?
If your data is already product-per-row, you don't need the transposer — clean it with csv-cleaner, drop unused columns with csv-column-filter, and import. If you have a single vertical attribute list, transpose it. If you have a multi-product EAV table, pivot it in Excel/pandas first — the transposer is the wrong tool for that shape.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.