CSV import & export · multilingual, with mapping
Complete multilingual support in one file. Custom fields as individual columns. Match by SKU, ID or EAN. With profiles, data type detection and batch sync.
Column convention for translations
Instead of one file per language: all languages in ONE CSV. One column per language. Pattern:
name_de-DE,name_en-GB— standard fields per languagecf_myField_de-DE,cf_myField_en-GB— custom fields per language
On import, language columns are detected automatically. Existing translations are merged, not overwritten (JSON merge). Empty cells do not cause data loss.
Custom fields as individual columns
Custom fields activated in the config matrix get their own column in the export (cf_myField). On import they are recognised directly — no JSON blob.
Supported types: text, number, boolean, date, select, multi-select (pipe), JSON.
Preset export profiles
- Master data, SEO, Prices & Stock (incl. separate gross/net purchase price)
- Properties & Custom Fields, Cross-Selling
- Translations, Images
Price columns — gross and net separated
For the purchase price there are two separate columns:
purchasePrice_gross— purchase price gross (incl. VAT)purchasePrice_net— purchase price net (excl. VAT)
All combinations are possible on import:
- Only gross given → net is automatically calculated via the tax class
- Only net given → gross is automatically calculated via the tax class
- Both given → values are taken 1:1
- Legacy column
purchasePrice→ remains backwards-compatible (interpreted as gross)
Alias detection
The importer also recognises German and English spellings automatically:
ek_brutto,einkaufspreis_brutto,cost_gross,purchase_price_gross→ mapped topurchasePrice_grossek_netto,einkaufspreis_netto,cost_net,purchase_price_net→ mapped topurchasePrice_net
CSV export
- Columns freely selectable
- Separator: comma, semicolon, tab
- Decimal: dot or comma
- UTF-8 with/without BOM
- Active filters apply to export
- Variant export as separate rows
"Unit (name)" column
The product unit is exported as a readable name ("Litre", "Kilogramm", "Piece") — Excel-friendly. In the "Prices & Stock" profile, the readable name is enabled by default.
CSV import
Workflow
- Upload file or enter URL
- Check preview
- Column mapping shown — auto-detected
- Adjust mapping if needed
- Check data type detection
- Pick import mode: update only, create only, or both
- Dry run shows new/update/skipped counts
- Real import with progress bar and ETA — cancellable
Match logic
- SKU (default), ID (UUID), EAN
Resolution by SKU or EAN
Fields normally requiring a UUID (parentId, mainVariantId) can be resolved via SKU or EAN on import. Lookup cache prevents duplicate hits.
"Unit" auto-detection
The importer recognises both "Unit (name)" and "Produkteinheit" as column headers and resolves names like "Litre" automatically. Plural forms also recognised.
Automatic lookups
Missing entities are created automatically: manufacturers, tags, categories, tax classes, delivery times, properties, product units.
Data type detection
- Boolean: 1/0, true/false, yes/no
- Date: ISO and German notation
- Number: comma or dot decimal
- Array: pipe separator
- JSON: for complex fields
Column mapping
If CSV headers don't match Shopware field names, override manually via drag-and-drop. Mapping saveable as template — per user or shop-wide.
Import log
Every import is logged under PIM → Import history: timestamp, user, record count, successes, errors with row number, download of original CSV (30 days retention).
Permissions
staw_pim.csv_import. Export tab hidden if staw_pim.csv_export is missing.