Overview
This guide walks you through moving your existing product catalog into {productName}, whether it lives in another e-shop, an ERP system or a set of spreadsheets. The recommended approach is simple: prepare the file, map it once, review the result in a changeset, and only then apply it. When you are happy with the outcome, you can turn the same setup into a scheduled automatic import.
Before You Start
Spend a few minutes on preparation. It saves a lot of cleanup later.
- Export your data. {productName} accepts CSV, Excel and XML files, or a URL where the feed is published.
- Decide on a unique identifier. Every record needs a value that never repeats, for example the product
codeor theean. This is the Lookup Field that lets {productName} recognise a record on the next import instead of creating a duplicate. - Start with a small sample. Cut your file down to 20-50 rows for the first attempt. Fixing a mapping on a small file is much faster.
- Check your data. Look for empty identifiers, duplicate codes and prices written as text (for example “1 200,-”).
**Tip:** If your data comes from a supplier feed that will keep updating, read [navigate:/help/en/user-flows/supplier-integration|Supplier Integration Pipeline|truck] as well. The migration steps below are the same, only the schedule differs.
Step 1: Upload and Map Your File
[navigate:/products/import|Open Import|upload]
1. Open the **Import** page in the product catalog.
2. Select the **Create template and import** tab.
3. Upload your file or paste the URL of the feed.
4. Click **Confirm** and wait while the assistant suggests how your columns match {productName} fields.
5. Review the suggested matches in the **Import Mapper** and correct any that are wrong.
6. Set the **Lookup Field** to your unique identifier.
**Review the mapping:** Always check the suggested matches before importing. Ambiguous column names, such as "Weight" and "Shipping Weight", can be matched to the wrong field.
The assistant is described in detail in [navigate:/help/en/user-flows/ai-mapping|Automatically map supplier columns|bot]. If you prefer to build the mapping by hand, or need transformations such as splitting a column or calculating a price, see [navigate:/help/en/api/mapper|Mapper Documentation|settings].
Your mapping is saved as an Import Template, so you can reuse it for the full file and for later updates.
[navigate:/importTemplates|Import Templates|file-text]
Step 2: Import a Sample
The Import page writes directly to your live catalog, so run the first import with your small sample file only.
1. Click **Import** in the **Import Mapper**.
2. Open [navigate:/products|Products|package] and check the imported records.
3. Compare a few of them with your source: names, prices, stock, images and categories.
4. If something is wrong, fix the mapping in the template and import the sample again. Because of the **Lookup Field**, records are updated instead of duplicated.
Step 3: Import the Full Data Set
For the complete file you have two options.
Option A: Import directly. Repeat the import on the Import page with the full file. This is the quickest way for a catalog that is still being set up.
Option B: Import with review. If the file is available at a URL and your catalog already contains data you care about, create an [navigate:/automaticImports|Automatic Import|upload] that uses your template and enable Requires Change Set. The import then creates a changeset instead of changing live data.
1. Open [navigate:/automaticImports|Automatic Imports|upload] and click **Create**.
2. Enter a name, the file URL and select your **Import Template**.
3. In the `Operation` dropdown choose how existing records are handled (see the table below).
4. Check **Requires Change Set** and click **Save**.
5. When the import has run, open [navigate:/changesets|Changesets|git-branch] and click the new changeset.
6. Check the numbers of created, updated and deleted records, and click an entity name to see the modified records.
7. Click **Apply** to make the changes live, or **Reject** to discard them and try again.
| Operation | When to use it |
|---|---|
create-only |
First load into an empty catalog, or when you must not touch records that already exist |
create-update |
New records are created and existing ones are updated |
update-only |
Correcting or enriching records that are already in {productName}, without adding new ones |
If your data contains parent-child structures, such as products with variants, use the @loop directive in the mapper to import the child rows together with their parent. Learn more about reviewing and applying changes in [navigate:/help/en/changesets|Changesets: Safe Drafts for Your Data|git-branch].
Step 4: Check the Result
After the full import:
- Look for empty required fields or missing relations. The article [navigate:/help/en/user-flows/data-quality-management|Managing Data Quality|activity] shows how to find and fix them in bulk.
- Compare record counts with the source. A difference usually points to rows with an empty or duplicated identifier.
Step 5: Keep the Data in Sync
If the old system remains the source of truth for a while, set up an automatic import using the template you just created.
1. Open [navigate:/automaticImports|Automatic Imports|upload] and click **Create**.
2. Enter the file URL and select your **Import Template**.
3. Choose the frequency: `hourly`, `daily`, `weekly` or `monthly`.
4. Select the **Operation**, usually `create-update`.
5. Click **Save**.
The Handle Missing option decides what happens to records that are in {productName} but no longer in the feed. The default nothing keeps them.
**Be careful with `delete`:** Choosing `delete` removes every record that is missing from the feed. Use it only when the feed always contains your complete catalog, and keep **Requires Change Set** enabled so you can review deletions before they happen.
All options are explained in [navigate:/help/en/user-flows/automatic-imports|Automatic Import Workflows|refresh-cw].
Common Problems
| Problem | Likely cause and fix |
|---|---|
| Duplicate records after the second import | The Lookup Field is not set or is mapped to a column that is not unique. Set it to a stable identifier such as code or ean. |
| Nothing was updated | The Operation is create-only, or the identifier values in the file differ from the ones already stored (for example leading zeros or extra spaces). |
| Prices or numbers look wrong | The source uses a different decimal separator or contains text such as “EUR”. Use a mapper expression to clean the value. |
| Related data such as categories is empty | The relation was not mapped, or the related record could not be found with the value in your file. |
Next Steps
Now that your data is in {productName}, set up the full pipeline with validation, scheduling and notifications.
[navigate:/help/en/user-flows/product-catalog-sync|Continue to Product Catalog Sync|refresh-ccw]
Related Articles
- [navigate:/help/en/user-flows/automatic-imports|Automatic Import Workflows|refresh-cw]
- [navigate:/help/en/user-flows/ai-mapping|Automatically map supplier columns|bot]
- [navigate:/help/en/changesets|Changesets: Safe Drafts for Your Data|git-branch]
- [navigate:/help/en/api/imports|Import System Documentation|upload]