# Upload prices by CSV

URL: https://docs.sparklayer.io/help/pricing/csv-upload

Prepare a CSV file of SKUs and prices, upload it to one or several SparkLayer price lists, check the rows before you import, and update or remove prices.

> **Quick summary**
>
> - Upload exact prices to a price list with a CSV file that has a **SKU** and a **Price** column. Add `qty` for quantity pricing, `unit_of_measure` for unit of measure pricing, or `price_list_slug` to update several price lists at once.
> - Upload to one price list with **Upload** next to it at **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app, or to several with **Bulk upload** at the top of the same screen.
> - Before anything changes, **Check your upload** shows how many rows are ready and why any will be skipped. Then click **Import** to set the prices.
> - A file only needs the SKUs you want to change: everything else on the list stays as it is. Prices must be numbers, without a currency symbol.

## How it works

Upload a CSV file to set exact prices on a manual price list, or to set specific prices for some products on an automatic price list. For single changes, the [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md) is quicker.

A CSV (comma-separated values) file is a plain spreadsheet format. Any spreadsheet tool can save a sheet as a CSV file, usually from its **File** menu. In Google Sheets, for example, go to **File > Download > Comma Separated Values (.csv)**.

Uploading prices by CSV:

1. **Prepare the file**: One row per SKU and price
2. **Choose the file**: For one price list, or several with Bulk upload
3. **Check your upload**: See which rows are ready and which will be skipped
4. **Import**: Signed-in customers see the new prices

## Prepare your CSV file

Start from a template:

- [Download the CSV template](https://docs.sparklayer.io/files/price-list-template.csv): SKU and Price columns, ready to fill in
- [Copy our Google Sheet](https://docs.google.com/spreadsheets/d/13gi0W7yZcZ-CtWXYw1nUJN_art-gSbzRjqN8GSLNaig/copy): Makes your own copy in Google Drive

You can also get a template in the upload window: click **Download template**.

The simplest file has 2 columns, **SKU** and **Price**. It has a header row (the column names), then one row per SKU. Prices are per unit, for example `14.99`:

```csv
sku,price
123-abc,14.99
124-abc,12.99
125-abc,15.99
126-abc,99.99
```

The template writes the column names as `SKU` and `Price`. Column names aren't case-sensitive, so `sku` and `price` work too.

Before you upload, check that:

- The **price list exists**. If not, [create a price list](https://docs.sparklayer.io/help/pricing/managing-pricing.md#create-a-price-list) first.
- Every **SKU matches** a product SKU in your store exactly, and the product is active.
- No SKU has **spaces before or after it**. A space stops the SKU matching. In Excel or Google Sheets, the `TRIM` function removes them.
- The **header row** is the first row, and uses the column names shown below.
- **Prices are numbers only**, such as `14.99`, with no currency symbol.
- The file is **saved as CSV**, not as a spreadsheet file such as .xlsx.

### CSV columns

Most uploads need only SKU and Price. Add the other columns for specific features.

| Column | What it contains | Required |
| --- | --- | --- |
| `sku` | The product SKU as set up in your eCommerce platform or backend system. | Yes |
| `price` | The unit price for the SKU, for example `14.99`. Don't include a currency symbol such as $ or £. | Yes |
| `qty` | The quantity this price applies from, for [quantity pricing](https://docs.sparklayer.io/help/pricing/quantity-pricing.md). If you use it, every row needs a quantity, and every SKU needs a row with a quantity of `1`. An empty cell fails the import. Leave the column out and every price applies from a quantity of 1. | No (defaults to 1) |
| `unit_of_measure` | The unit the quantity belongs to, such as `box` or `pallet`, for [unit of measure pricing](https://docs.sparklayer.io/help/pricing/quantity-pricing.md#set-up-unit-of-measure-pricing). Letters and numbers only, with underscores as separators, such as `pallet_box`. | No |
| `price_list_slug` | The handle of the price list to update, for [bulk uploads](#upload-prices-to-several-price-lists-at-once). | Only for bulk uploads |
| `display_tax_rate` | The tax percentage (0 to 100) used to show prices with tax included, for [tax-inclusive price display](https://docs.sparklayer.io/help/pricing/pricing-display.md#show-tax-inclusive-prices). It applies to the whole SKU on the price list, so use the same rate on every row for a SKU: conflicting rates fail the import. A blank cell leaves the SKU's rate as it is, so you can give it on just one of its rows. | No |

For example, a file with price breaks, units and display tax rates:

```csv
sku,price,qty,unit_of_measure,display_tax_rate
ABC-123,10.00,1,each,20
ABC-123,9.00,10,each,20
```

## Upload prices to a price list

1. Go to **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app and click **Upload** next to the price list (or **Upload CSV** in its **⋯** menu). The **Upload prices to** window opens, named after the list.
2. Choose your CSV file, or drop it into the window.
3. Under **Check your upload**, check the number of rows ready, and the reasons for any rows that will be skipped (see [Skipped rows](#skipped-rows)).
4. Click **Import**. The button shows how many prices it imports, for example **Import 240 prices**.

**More detail**

- Importing sets the prices for the SKUs in the file. Everything else on the list stays as it is.
- To fix a problem first, click **Choose another file**.
- If the price list isn't assigned to a customer group yet, [assign it](https://docs.sparklayer.io/help/pricing/managing-pricing.md#assign-a-price-list-to-customers) so customers can see the prices.

## Upload prices to several price lists at once

Use **Bulk upload** to update several price lists from one CSV file, for example the same products in several currencies.

1. Find the handle of each price list you want to update. It's shown under the price list's name at **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app, for example `Handle: base-uk`.

2. Add a `price_list_slug` column to your CSV file and enter the handle on each row. You can add as many rows as you need for each price list:

   ```csv
   sku,price,price_list_slug
   123-abc,7.99,base-uk
   123-abc,10.99,base-us
   789-abc,5.99,base-uk
   789-abc,7.99,base-us
   ```

3. At **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app, click **Bulk upload** at the top of the page. The **Bulk upload prices** window opens.

4. Choose your file, check the rows under **Check your upload**, then click **Import**.

Under **Check your upload**, the ready banner shows how many prices go to each list.

Once the prices are imported, [assign the price list to a customer group](https://docs.sparklayer.io/help/pricing/managing-pricing.md#assign-a-price-list-to-customers) if it isn't already.

## Skipped rows

Rows with a problem are skipped, and the rest still import. **Check your upload** shows your file's name and how many rows are ready, for example "238 of 240 rows ready", and lists each skipped row with a reason.

| Reason | What to do |
| --- | --- |
| **No SKU** | Add the SKU to the row. |
| **SKU … isn't in your catalogue** | Check the SKU exists in your store, matches exactly and the product is active. |
| **Price "…" isn't a number (no currency symbols)** | Enter the price as a number only, such as `14.99`. |
| **No price list with the handle "…"** | In a bulk upload, check the `price_list_slug` matches a list's handle exactly. |

If you see **This file can't be used**, the first row doesn't have the right column names. The first row needs **SKU** and **Price** (or **SKU**, **Price** and **price\_list\_slug** for a bulk upload). Click **Download template** to see the layout, then **Try another file**.

## Update or remove some prices

| To | Do this |
| --- | --- |
| **Update some prices** | Upload a CSV file with only the SKUs and prices you want to change. SparkLayer updates those prices and keeps the rest. |
| **Remove one product's price** | In the [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md), open the variant and click **Remove** next to the price. |
| **Remove every price from a price list** | Open the **⋯** menu next to the price list and click **Clear**, then **Clear prices**. On an automatic list, the automatic rule stays. |
| **Download a price list's prices** | Open the **⋯** menu next to the price list and click **Download CSV**. |

A row with a blank price doesn't remove that SKU's price. To remove a price, use the Price editor, or clear the price list.

## Troubleshooting

**My SKUs aren't found**

SparkLayer matches prices to products by SKU, so each product (variant) needs a unique SKU in your store. Check that:

- The **SKU exists** in your product catalogue and **matches exactly**.
- The SKU is **unique**.
- The product is **active**, not a draft.

See [Pricing FAQs](https://docs.sparklayer.io/help/pricing/faqs.md#why-isnt-my-b2b-pricing-showing-on-my-website).

**The upload worked, but products show as Unavailable**

The SKUs in the file probably don't match your products exactly. Check for:

- **Spaces before or after a SKU.** The upload can still look successful, but nothing matches. Clear the price list (**⋯** > **Clear**), trim the spaces from the SKU column, then upload the file again.
- **SKUs that changed in your store.** If you change a SKU after uploading its price, the price list keeps the old SKU and the product has no price. Upload the prices again against the new SKUs.

For other causes, see [Why a product shows Unavailable](https://docs.sparklayer.io/help/pricing/managing-pricing.md#unavailable).

**My prices aren't importing**

Check the price column contains numbers only, without a currency symbol, and that the header row is the first row of the file.

**Still having issues?**

See the [troubleshooting guide](https://docs.sparklayer.io/help/troubleshooting.md) for ways to solve common issues.

## Next steps

- [Assign a price list to customers](https://docs.sparklayer.io/help/pricing/managing-pricing.md#assign-a-price-list-to-customers): Choose which customer groups see the prices you've uploaded
- [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md): Check or change a single product's prices without a new file
