# CSV (https://eulabel.eu/docs/knowledge-base/switch-from/csv)

> Fetch the complete documentation index at: https://eulabel.eu/docs/llms.txt
> Use this file to discover all available pages before exploring further.
> Full content: https://eulabel.eu/docs/llms-full.txt
> Append .md to any page URL for markdown, or send Accept: text/markdown.



Use CSV when you leave any portal, PIM, or spreadsheet that can export tabular product data. EUlabel does not require a vendor-specific importer — map columns once, then create products and passports through the API.

At a glance [#at-a-glance]

* **Outcome**: one row per product (or SKU/vintage) becomes a product + passport in EUlabel.
* **Path**: export CSV → validate GTINs → map columns → scripted `POST` creates → issue QR codes.
* **Works with**: exports from U-Label, Glasswise, Bottlebooks, e-label.eu, Excel, Google Sheets, and most PIMs.

Recommended columns [#recommended-columns]

At minimum for wine e-labels:

| Column        | Notes                                                  |
| ------------- | ------------------------------------------------------ |
| `gtin`        | 8/12/13/14 digits; normalized to 14 in EUlabel         |
| `name`        | Product / cuvée name                                   |
| `ingredients` | Full list including processing aids as required        |
| `nutrition_*` | Per 100 mL energy and macros as required               |
| `allergens`   | Sulphites and other Annex II allergens                 |
| `origin`      | Country / region / designation                         |
| `abv`         | Alcohol by volume                                      |
| `locale`      | Language of the row if you export one language per row |

See [passport data format](https://eulabel.eu/docs/knowledge-base/guides/passport-data-format) and [wine e-label](https://eulabel.eu/docs/knowledge-base/guides/wine-e-label) for full field expectations.

Migration steps [#migration-steps]

Export a clean CSV [#export-a-clean-csv]

    One product per row. UTF-8 encoding. Quote fields that contain commas. Keep a separate file per language if that matches your source system.
Validate GTINs [#validate-gtins]

    Run [GTIN validation](https://eulabel.eu/docs/knowledge-base/guides/gtin-validation) on every row before API calls. Reject rows with bad check digits early.
Map and create via API [#map-and-create-via-api]

    Write a short script (or use your integration layer) that reads each row and calls the products/passports endpoints. Pattern: [PIM integration](https://eulabel.eu/docs/knowledge-base/guides/pim-integration) with a file source instead of webhooks.

    Authenticate with an API key from [authentication](https://eulabel.eu/docs/documentation/get-started/authentication). Start in [sandbox](https://eulabel.eu/docs/documentation/get-started/sandbox).
Publish QR codes and verify scans [#publish-qr-codes-and-verify-scans]

    Generate GS1 Digital Link QR codes, spot-check languages and nutrition tables, then cut over production.
Next steps [#next-steps]

* [Quickstart](https://eulabel.eu/docs/documentation/get-started/quickstart)
* [Wine e-label](https://eulabel.eu/docs/knowledge-base/guides/wine-e-label)
* [Overview](https://eulabel.eu/docs/knowledge-base/switch-from)

