Skip to content
Stone & Water
Doc · 05 CSV import & export

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 language
  • cf_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 to purchasePrice_gross
  • ek_netto, einkaufspreis_netto, cost_net, purchase_price_net → mapped to purchasePrice_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

  1. Upload file or enter URL
  2. Check preview
  3. Column mapping shown — auto-detected
  4. Adjust mapping if needed
  5. Check data type detection
  6. Pick import mode: update only, create only, or both
  7. Dry run shows new/update/skipped counts
  8. 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

Security: The import tab is accessible only to super admins — in addition to staw_pim.csv_import. Export tab hidden if staw_pim.csv_export is missing.