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

# Import products via CSV

> Add or update many products at once by uploading a CSV file.

<Info>
  **Who is this article for?**

  * Merchants setting up a menu for the first time
  * Anyone who needs to add or update many products at once
</Info>

## What this does

Upload a CSV file to create or update products in bulk. Atlas matches each row to a product by its **SKU**.

* If the SKU already exists, Atlas updates that product.
* If the SKU is new, Atlas creates a new product.

Atlas shows you a preview before anything changes, so you can check the import first.

## When to use this

* Setting up a menu for the first time, instead of adding products one by one.
* Updating many products at once, such as prices, names, categories, tags, or archived state.
* Only changing prices? See [Update item prices](/menu-builder/draft-update-prices) for a quicker flow.
* Changing one product? Edit it on the **Products** page instead.

<Info>
  **Read this before you start.**

  * **Do not change SKUs unless you mean to.** A changed SKU creates a new product instead of updating the old one. You end up with duplicates.
  * **Always download the latest template.** Atlas checks the column order. An old or edited header row fails the import.
  * **Create modifier groups first.** The CSV can attach modifier groups, but they must already exist on the **Modifier groups** page.
</Info>

## Steps

<Steps>
  <Step title="Get the CSV file">
    Go to **Menu builder** > **Products**. Tap the three dots in the top-right corner.

    * Tap **Download CSV template** for a blank file with the correct columns.
    * Or tap **Export products to CSV** for a file prefilled with your current products. Atlas emails you a download link when it is ready.

    <Frame caption="CSV options under the Products three-dot menu.">
      <img src="https://mintcdn.com/atlaskitchen/NdsjtzCq0SQfCn7o/images/menu-builder/products-csv-menu.webp?fit=max&auto=format&n=NdsjtzCq0SQfCn7o&q=85&s=49eba1a61ff48a7fcd1a5237d661295e" alt="Products page with the three-dot menu open, showing Import CSV, Download CSV template, and Export products to CSV." width="1440" height="900" data-path="images/menu-builder/products-csv-menu.webp" />
    </Frame>
  </Step>

  <Step title="Fill in the file">
    Open the file in Excel or Google Sheets. Fill in one row per product.

    See [Template columns](#template-columns) below for what each column does.

    <Frame caption="The product CSV template in a spreadsheet.">
      <img src="https://mintcdn.com/atlaskitchen/NdsjtzCq0SQfCn7o/images/menu-builder/products-csv-template.webp?fit=max&auto=format&n=NdsjtzCq0SQfCn7o&q=85&s=e51622302531ed067ffa42e75d7f7b04" alt="The product CSV template open in a spreadsheet, showing the header row and example rows for a product and a component." width="1568" height="224" data-path="images/menu-builder/products-csv-template.webp" />
    </Frame>

    <Tip>
      Some exported cells start with a single quote, such as `'size/spiciness`. Leave the quote in place. It stops your spreadsheet turning the value into a date. Atlas removes it during import.
    </Tip>
  </Step>

  <Step title="Import the CSV">
    Save the file as a CSV. Go to **Menu builder** > **Products**, tap the three dots, then tap **Import CSV** and select your file.
  </Step>

  <Step title="Check the preview">
    Atlas runs a preview before changing anything. The header shows what will happen, for example "Adding 1 product and updating 1 product".

    * **New products** — rows with SKUs that do not exist yet.
    * **Updated products** — rows matched to existing products by SKU.
    * **Errors** — rows Atlas could not process, shown at the top of the modal.

    <Frame caption="The import preview, split into New products and Updated products.">
      <img src="https://mintcdn.com/atlaskitchen/NdsjtzCq0SQfCn7o/images/menu-builder/products-csv-preview.webp?fit=max&auto=format&n=NdsjtzCq0SQfCn7o&q=85&s=abd3b6023df9ea0ac27dfc9e3b59e443" alt="Import preview modal titled Adding 1 product and updating 1 product, with New products and Updated products tabs and a Confirm import button." width="1565" height="980" data-path="images/menu-builder/products-csv-preview.webp" />
    </Frame>
  </Step>

  <Step title="Fix errors, then confirm">
    If the **Errors** list shows problems, the **Confirm import** button stays disabled. Fix the file and import again.

    When the preview looks right, tap **Confirm import**.

    <Frame caption="Errors block the import until they are fixed.">
      <img src="https://mintcdn.com/atlaskitchen/NdsjtzCq0SQfCn7o/images/menu-builder/products-csv-errors.webp?fit=max&auto=format&n=NdsjtzCq0SQfCn7o&q=85&s=37b0f997db811caedf2e8192fe4f92a4" alt="Import preview modal with a red Errors list at the top and the Confirm import button greyed out." width="1565" height="980" data-path="images/menu-builder/products-csv-errors.webp" />
    </Frame>
  </Step>
</Steps>

## Template columns

The template has 20 columns. Keep every column and keep them in order.

<AccordionGroup>
  <Accordion title="Product identity — S/N, Brand ID, Type, Name, SKU, Internal name">
    * **S/N** — the row number. Keep it sequential: 1, 2, 3, and so on.
    * **Brand ID** — the number of the brand the product belongs to. Find it in the **Brand ID** column on the Products page or in an exported file.
    * **Type** — `Product` for a normal sellable item, or `Component` for an item used inside a bundle. Components appear under the **Components** tab on the Products page.
    * **Name** — the product name customers see on menus and receipts.
    * **SKU** — the product's unique code. Atlas uses it to match each row to a product. SKUs are saved in lowercase with hyphens, so `Latte L` becomes `latte-l`.
    * **Internal name** — the name staff see on kitchen dockets and internal lists. Customers never see it.
  </Accordion>

  <Accordion title="Product content — Description, Story">
    * **Description** — a short description shown on menus.
    * **Story** — longer product text. Supports simple formatting.
  </Accordion>

  <Accordion title="Pricing — Price, Cost, Currency">
    * **Price** — the selling price as a decimal, such as `12.95`.
    * **Cost** — what one unit costs you, used for margin reporting. Optional. Numbers only, or leave it blank.
    * **Currency** — a three-letter currency code, such as `SGD`. Blank cells default to `SGD`.
  </Accordion>

  <Accordion title="Reporting — Report category, Report subcategory">
    * **Report category** — the category this product reports under. Atlas creates the category if it does not exist yet.
    * **Report subcategory** — a category nested under the report category. Also created if new.

    See [Reporting categories](/menu-builder/reporting-categories) for how categories work.
  </Accordion>

  <Accordion title="Operations — Daily default stock, Printer tags, Product tags">
    * **Daily default stock** — how many units are available each day. Leave blank for unlimited stock.
    * **Printer tags** — tags that route the product to a printer. Separate multiple tags with a forward slash, such as `kitchen/bar`.
    * **Product tags** — tags for grouping products on the Products page. Separate multiple tags with a forward slash.
  </Accordion>

  <Accordion title="Menu links — Section identifier, Modifier group identifiers">
    * **Section identifier** — the identifier of the menu section to add the product to. Products join the end of the section. Find section identifiers in an exported file.
    * **Modifier group identifiers** — the modifier groups to attach, in the order they should appear. Separate identifiers with a forward slash, such as `'size/spiciness`. Each one must match the **Identifier** of an existing modifier group.
  </Accordion>

  <Accordion title="Status — Archived, BCRS">
    * **Archived** — `TRUE` archives the product and removes it from menus and POS layouts. `FALSE` keeps it active or unarchives it. Leave blank for no change.
    * **BCRS** — `TRUE` marks the product for the container deposit scheme. `FALSE` removes the marking. Leave blank for no change. Only relevant if your outlet uses BCRS. See [BCRS](/merchant-portal/bcrs).
  </Accordion>
</AccordionGroup>

## What should happen

* Atlas shows an "Import successful" message.
* New products appear on the **Products** page. Updated products show their new values.
* Products with a **Section identifier** appear at the end of that section in your menu.

## If it doesn't work

<AccordionGroup>
  <Accordion title="&#x22;Please download the latest version of the template&#x22;">
    The header row does not match the current template. Download a fresh template and move your data into it. Do not rename, reorder, or delete columns.
  </Accordion>

  <Accordion title="&#x22;Invalid character (may be an apostrophe) found in row N&#x22;">
    The file contains a character Atlas cannot read. Re-save the file as a UTF-8 CSV, then import again. In Excel, choose **CSV UTF-8** when saving.
  </Accordion>

  <Accordion title="&#x22;Duplicate identifiers found&#x22;">
    The same SKU appears on more than one row. Each SKU can only appear once. Remove or fix the duplicate rows.
  </Accordion>

  <Accordion title="&#x22;Invalid modifier group identifiers&#x22;">
    A modifier group identifier in the file does not exist in Atlas. Check the exact **Identifier** on the **Modifier groups** page, then fix the cell.
  </Accordion>

  <Accordion title="Rows show errors in the preview">
    The Errors list names the row and the problem, such as a missing name or a bad price. Fix those rows in the file and import again. Valid rows still cannot be confirmed until every error is resolved.
  </Accordion>

  <Accordion title="The import created duplicate products">
    A SKU was changed in the file, so Atlas created new products instead of updating the existing ones. Archive the duplicates, then re-import with the original SKUs in place.
  </Accordion>
</AccordionGroup>

If the issue persists, contact support at [hello@atlas.kitchen](mailto:hello@atlas.kitchen) with your outlet name and the file you tried to import.

## Next steps

* [Update item prices](/menu-builder/draft-update-prices): bulk price changes with an export-edit-import flow.
* [Create and configure menus](/menu-builder/create-menus): add your imported products to menus.
* [Reporting categories](/menu-builder/reporting-categories): organise products for reporting.
