> ## Documentation Index
> Fetch the complete documentation index at: https://help.lobyco.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Import stores from a CSV file

> Add or update many stores in Lobyco Nexus at once with a CSV file, and check how the import went.

Use this page to add new stores, or update existing ones, from one CSV file instead of one form at a time. Only admin users who can edit stores see **Import**.

> [!WARNING]
>
> An import changes your stores as soon as it runs, and the portal has no undo. A row whose ID already exists replaces that store. Stores that aren't in the file stay as they are.

## Prepare the file

Save your stores as a CSV file with one row for each store and the column names below, in the first row. Stores that are new to Lobyco and stores you want to change go in the same file.

| Column | What to put in it |
| - | - |
| `Id` | Required. The store's ID, up to 450 characters. Each ID can appear once in the file. |
| `AlternateIds` | The store's alternate ID, up to 128 characters. To give more than one, separate them with `;`. |
| `Name` | Required. The store's name, up to 256 characters. |
| `RegistrationNumber` | The store's registration or VAT number. |
| `Phone` and `Email` | How to reach the store. |
| `Country`, `City`, `Street`, `StreetNumber` and `PostalCode` | The store's address. |
| `TimeZone` | The store's time zone, for example `Europe/Copenhagen`. |
| `Latitude` and `Longitude` | The store's coordinates, as numbers. Fill in both or neither. |
| `ChainId` | Required. The ID of the chain the store belongs to, up to 450 characters. The chain must already exist on the **Chains** tab. |
| `Status` | `Active` or `Closed`. |
| `StoreType` | `Public` or `Internal`. Only `Public` stores show in the app's store finder. If you leave it empty, the app treats the store as `Public`. |
| `Monday` to `Sunday` | The opening hours for that weekday, written as `08:00:00-20:00:00`. Times run from `00:00:00` to `23:59:59`. |

A day you leave empty gets no opening hours. If the store already has opening hours for that day, the import removes them. When you next edit that store, the form marks the empty day with **Please, fill out the field**, and **Save** stays greyed out until you fill in its hours or switch on **Store is closed all day**.

The import can't create chains. Create a chain first, on the **Chains** tab of the Stores screen. See **[Manage stores and chains](/business-documentation/self-service/manage-stores-and-chains)**.

### Date-specific opening hours

Opening hours for single dates, such as a public holiday, go in a separate file. Each row is one date for one store.

| Column | What to put in it |
| - | - |
| `StoreId` | Required. The ID of the store the date is for. The store must already exist. |
| `AdjustmentDate` | Required. The date, written as `2026-12-24`. It must be today or later. |
| `OpeningHour` and `ClosingHour` | Required. When the store opens and closes on that date, written as `10:00:00`. Times run from `00:00:00` to `23:59:59`. |
| `Label` | A name for the date, such as `Christmas Eve`, up to 256 characters. |

To close the store all day, write the same time in both columns, such as `00:00:00` and `00:00:00`. To keep it open all day, write `00:00:00` and `23:59:59`.

A store can have one entry for each date, so each store and date can appear only once in the file. A row replaces the store's existing entry for that date. The store's other dates stay as they are.

## Open the import screen

1. Open **Store configuration → Stores**.
2. On the **Stores** tab, select **Import**.

You see the **Import Log**, a list of every file imported so far. Each row shows the **File name**, **Date**, **File type**, **Status** and who imported it, with a **View** link at the end. Use the filters above the list to find a file, and **Refresh** to reload it.

![The Import Log for stores, opened with Import on the Stores tab. The Stores and Chains tabs are at the top and Import new info is at the top right. The Import Log panel has Refresh at its top right and the filters File name, Date, File type, Status and Imported by. Five rows show test files with the file type Stores: riverside-2.csv, Verification needed (1/2); riverside-1.csv, Successful (1/1); aqa-148404-invalid.csv, Verification needed (0/3500); and two ten\_stores files, Successful (10/10). Each row shows its date, the initials of who imported it and a View link. Items per page 5 and 1 – 5 of 293 are below the list.](https://mintcdn.com/lobyco-4c9fb3ad/rG971_5ZfS49bcjM/images/administer-24-store-import-log.png?fit=max\&auto=format\&n=rG971_5ZfS49bcjM\&q=85\&s=866b22d64f1374dfabd87126aa051410)

*The Import Log for stores*

## Import the file

1. Select **Import new info**. The **Import new info** dialog opens.
2. Under **Select which data to import**, choose **Stores**. To import a file of **[date-specific opening hours](#date-specific-opening-hours)**, choose **Date specific opening hours** instead.
3. Under **Select file format**, leave **CSV** selected. **JSONL** is the other choice.
4. Under **Add file**, drop your file on the area, or select **select file** and pick it.
5. Select **Import file**.

Once you've chosen the data, **See expected columns in file** appears under **Add file**. Open it to see every column the portal expects for that data. The columns marked with \* are required.

**Import file** stays disabled until you have chosen the data, the format and a file. If you select **Cancel** after filling in the dialog, the portal asks "Leave without importing new file?". Choose **Stay** to go back, or **Leave** to close the dialog.

The dialog says that rows with new IDs are added, and rows with existing IDs replace the existing rows with those IDs.

![The Import new info dialog over the Import Log for stores. It says When you import, the rows in the file with new IDs will be added to the existing data. Rows in the file with existing IDs will replace the existing rows with these IDs. Select which data to import, which is required, is set to Stores. Under Select file format, which is required, CSV is selected and JSONL is not. Add file, which is required, is an upload area reading Drop file here to upload or select file, with Allowed file type is .csv under it. See expected columns in file is closed. Cancel and a greyed-out Import file are at the bottom.](https://mintcdn.com/lobyco-4c9fb3ad/rG971_5ZfS49bcjM/images/administer-25-store-import-dialog.png?fit=max\&auto=format\&n=rG971_5ZfS49bcjM\&q=85\&s=9ae8812f5282aa41d3bc3732fd57712d)

*The Import new info dialog, with Stores chosen*

## Check the result

Your file appears at the top of the **Import Log**. Select **Refresh** if it isn't there yet.

Look at its **Status**:

* **Successful**, with numbers in brackets such as (10/10), means every row went in. The numbers are the rows imported out of the rows in the file.
* **Verification needed**, with numbers such as (1/2), means some rows didn't go in. In this example, one row of two was imported.

Rows that pass are imported even when other rows in the same file fail.

Select **View** on a row to open its **File details**: what was imported, the file, and when the import started and ended. For a file with failed rows, it also lists **Errors**, one for each failed row, with the reason, such as "The Name field is required." The number in square brackets counts rows from 0, so `[1]` is the second store in your file. **File details** says "The file was not imported" whenever any row failed, even though the rows that passed did go in.

Fix the failed rows and import the file again. The stores that already went in are replaced with the same values, so importing them twice does no harm.

To see a store itself, go back to the **Stores** tab and search for its ID. See **[Manage stores and chains](/business-documentation/self-service/manage-stores-and-chains)**.

## Troubleshooting

> **Why did some rows not go in?**
>
> The import checks every row. A row fails when:
>
> * `Id`, `Name` or `ChainId` is empty.
> * `Id` or `ChainId` is longer than 450 characters, `Name` is longer than 256, or `AlternateIds` is longer than 128.
> * `ChainId` doesn't match a chain that exists.
> * The same `Id` appears twice in the file.
> * `Status` isn't `Active` or `Closed`, or `StoreType` isn't `Public` or `Internal`.
> * A weekday isn't written as `08:00:00-20:00:00`, or a time is past `23:59:59`.
>
> In a file of date-specific opening hours, a row also fails when the store doesn't exist, the date is in the past, or the same store and date appear twice.
>
> Fix the rows and import the file again.

> **Why is there no Import button?**
>
> **Import** only shows on the **Stores** tab for admin users who can edit stores, and only when bulk import is switched on for your organisation. If you can edit stores and still don't see it, ask Lobyco support.

> **Why can't I import chains?**
>
> The import screen on the Stores screen takes stores and date-specific opening hours only. Create and edit chains on the **Chains** tab.

## Related

* **[Manage stores and chains](/business-documentation/self-service/manage-stores-and-chains)** covers finding, creating, editing and exporting stores, and looking after chains.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.