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

# Bulk Import Products from CSV or Excel

> Upload CSV, TXT, or Excel files to create or update hundreds of products at once, with automatic category creation and flexible image handling options.

The Site Store Pro Bulk Importer lets you create or update large numbers of products in a single upload. Whether you're migrating from another platform, syncing a supplier feed, or onboarding a new product line, the importer handles category hierarchies, variant pricing, and images automatically — saving you hours of manual data entry.

## Supported File Formats

The importer accepts the following formats:

| Format         | Extension | Notes                                                  |
| -------------- | --------- | ------------------------------------------------------ |
| CSV            | `.csv`    | Standard comma-delimited text. Most compatible format. |
| Text           | `.txt`    | Comma or pipe (`\|`) delimited plain text.             |
| Excel (modern) | `.xlsx`   | Excel 2007 and later workbook format.                  |
| Excel (legacy) | `.xls`    | Excel 97–2003 workbook format.                         |

<Tip>
  Before building your own import file from scratch, run the built-in demo seeder to populate a sample catalog. Export those records to see exactly how headers should be named and how category strings, variant SKUs, and image URLs are formatted in a working file.
</Tip>

***

## Import Process

<Steps>
  <Step title="Prepare Your File">
    Build your spreadsheet with one product (or variant row) per line. Include a header row using the column names listed in the [CSV Column Reference](#csv-column-reference) section below. You can include only the columns you need — unmapped columns are ignored.

    For category assignments, use the `>` hierarchy syntax to nest categories:

    ```text theme={null}
    Apparel > Outerwear > Jackets
    ```

    Site Store Pro parses this string and creates any missing parent or child category records automatically during import. See [Taxonomy Auto-Creation](#taxonomy-auto-creation) for more detail.
  </Step>

  <Step title="Navigate to the Importer">
    Go to **Admin → Shop → Bulk Product Import** (`/admin/ecommerce/import`). Click **Upload File** and select your `.csv`, `.txt`, `.xlsx`, or `.xls` file.
  </Step>

  <Step title="Map Your Columns">
    The importer reads your header row and presents an **Auto-Header Mapping** interface. Each detected column is matched to a system field. Review the mappings and correct any that weren't recognized automatically — for example, if your spreadsheet uses `"Product Name"` instead of `"title"`, map it to the **Title** field here.
  </Step>

  <Step title="Choose Image Handling">
    Select how the importer should handle URLs in your `image_url` column:

    * **Link to external CDN**: Site Store Pro stores the external URL as-is. Images load from your CDN at runtime. No local storage space is consumed, but images depend on the external source remaining available.
    * **Download to local storage**: Site Store Pro fetches each image from the remote URL and saves a local copy. Images remain available even if the source URL changes or expires.
  </Step>

  <Step title="Confirm and Run Import">
    Review the preview table showing the first several rows as they will be imported. If everything looks correct, click **Confirm Import**. Site Store Pro processes the file, creates or updates product and variant records, builds any new categories, and handles images according to your selection. A results summary reports how many records were created, updated, or skipped due to errors.
  </Step>
</Steps>

***

## CSV Column Reference

The following table lists the most common columns recognized by the importer. Column names are case-insensitive.

| Column Name         | Type    | Description                                                                                                       |
| ------------------- | ------- | ----------------------------------------------------------------------------------------------------------------- |
| `title`             | Text    | Product name displayed in the catalog. Required for new products.                                                 |
| `short_description` | Text    | Brief summary shown on catalog cards and search results.                                                          |
| `public_price`      | Numeric | Base retail price (e.g. `29.99`). Do not include currency symbols.                                                |
| `categories`        | Text    | Category path using `>` separator (e.g. `"Apparel > Outerwear"`). Multiple paths can be separated by a semicolon. |
| `variant_sku`       | Text    | Unique SKU string for the variant. Used as the match key on re-imports.                                           |
| `variant_price`     | Numeric | Per-variant price override. Supersedes `public_price` for that variant.                                           |
| `image_url`         | Text    | External URL of the product image. Behavior depends on your image handling selection.                             |
| `featured_item`     | 0 or 1  | Set to `1` to mark the product as featured in shortcode blocks.                                                   |
| `download_item`     | 0 or 1  | Set to `1` to flag the product as a digital download.                                                             |

<Note>
  If your file contains multiple rows with the same `variant_sku`, the importer treats them as rows for the same variant (useful for multi-image rows). If a `variant_sku` already exists in your catalog, the importer updates that variant rather than creating a duplicate.
</Note>

***

## Taxonomy Auto-Creation

You don't need to pre-build your category tree before importing. The importer parses every string in the `categories` column and creates any missing records on the fly.

**Example:** If your file contains the value `Electronics > Computers > Laptops` and none of those categories exist yet, the importer creates:

1. `Electronics` (top-level category)
2. `Computers` (child of Electronics)
3. `Laptops` (child of Computers)

Then it assigns the imported product to the `Laptops` category.

If `Electronics` already exists but `Computers` does not, the importer creates only the missing levels — it never duplicates existing categories. This means you can safely re-import updated files without creating duplicate taxonomy entries.

### Multi-Category Assignment

Assign a product to multiple categories by placing multiple `>` paths in the `categories` column, separated by a semicolon:

```text theme={null}
Apparel > Outerwear > Jackets; Sale Items > Clearance
```

***

## Image Handling Options

<Tabs>
  <Tab title="Link External CDN">
    Choose this option when your images are hosted on a reliable CDN (such as AWS CloudFront, Cloudflare Images, or your supplier's media server) and you want to avoid using local storage.

    **Pros:** Fast setup, no storage overhead, no download time during import.

    **Cons:** If the external URL changes or the source goes offline, images break on your storefront. Best used when you control the CDN.
  </Tab>

  <Tab title="Download to Local Storage">
    Choose this option when you want Site Store Pro to own a local copy of every image, independent of the original source.

    **Pros:** Images remain available regardless of changes to external URLs. Better for long-term catalog stability.

    **Cons:** Import takes longer while images download. Consumes local or cloud storage on your server.

    Large imports with many images are best run during off-peak hours to avoid timeout issues on shared hosting environments.
  </Tab>
</Tabs>
