> For the complete documentation index, see [llms.txt](https://docs.shopperos.stackline.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.shopperos.stackline.com/catalog/where-to-buy.md).

# Where to buy and store locator

**Where to buy** shows shoppers the retailers that sell your products. Each retailer can show **Online**, as a link to the product on the retailer's site. It can also show **In-store**, as a store finder with the retailer's stores near the shopper. You set this for the whole project in **Settings → Where to buy**. You can change it for one product on its [product page](#product-settings).

```mermaid
flowchart LR
  CH[Channels] -->|Enabled| R[Retailers]
  R -->|Online| L[Link to the retailer's site]
  R -->|In-store| F[Store finder]
  SL[Store lists] --> F
  YL[Your locations] -->|Show my locations| F
```

*A retailer reaches shoppers only when its channel is on. In-store needs a store list. Your own locations join the store finder while **Show my locations** is on.*

## The parts you set

Each part below is one area of **Settings → Where to buy**, plus the per-product tabs.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Retailers</strong></td><td>How each retailer shows to shoppers: <strong>Display mode</strong>.</td><td><a href="#set-up-where-to-buy-in-four-steps">#set-up-where-to-buy-in-four-steps</a></td></tr><tr><td><strong>Link out</strong></td><td>Other retailers' offers for shoppers who cannot check out.</td><td><a href="#set-up-where-to-buy-in-four-steps">#set-up-where-to-buy-in-four-steps</a></td></tr><tr><td><strong>Store lists</strong></td><td>The stores behind the store finder, one list for each retailer.</td><td><a href="#store-lists-feed-the-store-finder">#store-lists-feed-the-store-finder</a></td></tr><tr><td><strong>Your locations</strong></td><td>Your own stores, dealers and clinics.</td><td><a href="#your-locations-sit-beside-retailer-stores">#your-locations-sit-beside-retailer-stores</a></td></tr><tr><td><strong>Product settings</strong></td><td>Changes for one product, on its <strong>Checkout</strong> section.</td><td><a href="#product-settings">#product-settings</a></td></tr></tbody></table>

## Before you start

* Your catalog has products. See [Your catalog](/catalog/catalog.md).
* The retailers you want are on in **Settings → Catalog → Channels**. A channel that is off does not show in **Where to buy**.

When you choose your catalog source, the **Where to buy** onboarding step turns on the retailers that carry your brand. It also turns on the store locator for retailers with store lists. See [Onboarding checklist](/getting-started/onboarding-checklist.md).

## Set up where to buy in four steps

Go to **Settings → Where to buy**. Steps 2 and 4 are optional.

{% stepper %}
{% step %}

### Choose how each retailer shows

1. Under **Retailers**, find the retailer.
2. In **Display mode**, choose how it shows to shoppers. The change saves at once.

<figure><img src="https://489913050-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FblcXcPwOUg5osGsERflQ%2Fuploads%2Fgit-blob-76c25d99b55250602602548bec4b5a7fa12b8325%2Fsettings-where-to-buy.jpg?alt=media" alt="Settings → Where to buy"><figcaption><p>Settings → Where to buy. The primary retailer is the first row. Each other row has a Display mode.</p></figcaption></figure>

| Display mode          | What shoppers see                             |
| --------------------- | --------------------------------------------- |
| **Hidden**            | Nothing. The retailer does not show.          |
| **Online**            | A link to the product on the retailer's site. |
| **In-store**          | The retailer's stores in the store finder.    |
| **Online + In-store** | Both the link and the stores.                 |

**In-store** and **Online + In-store** are available only for retailers with physical stores and a store list. If a retailer shows **(upload a store list to enable In-store)**, upload a list in step 3.
{% endstep %}

{% step %}

### Turn on Link out (optional)

With **Link out** on, shoppers who cannot check out see a **View** button with other retailers' offers. It is off by default. It shows only while in-app checkout is on. A product's own **Link out** setting takes priority.

1. Find **Link out**.
2. Turn on the switch.
   {% endstep %}

{% step %}

### Check your store lists

Under **Store lists**, check the status of each retailer. Upload a list for each retailer that shows **No list** and needs **In-store**. See [Store lists feed the store finder](#store-lists-feed-the-store-finder).
{% endstep %}

{% step %}

### Add your own locations (optional)

Under **Your locations**, upload your own stores, dealers and clinics. Then turn on **Show my locations**. See [Your locations sit beside retailer stores](#your-locations-sit-beside-retailer-stores).
{% endstep %}
{% endstepper %}

Done. Shoppers see each retailer as its **Display mode** sets. Next, change a single product in [Product settings](#product-settings) if it needs to differ.

## The primary retailer follows checkout

The first row of **Retailers** is your primary retailer, marked **· Primary**. Its **Display mode** shows one of these values:

* **Checkout**: shoppers buy from you in your app.
* **Where to buy**: this retailer is your main Where-to-buy link.

You cannot change this row here. It follows your checkout settings. See [Turn on checkout and payments](/selling-and-checkout/checkout-and-payments.md).

## Store lists feed the store finder

**Store lists** hold the stores behind the store finder. This section shows only retailers with physical stores. Its summary line reads, for example, **2 uploaded · 3 using our list · 1 need a list**.

| Status                                        | What it means                                                          |
| --------------------------------------------- | ---------------------------------------------------------------------- |
| <mark style="color:blue;">Managed list</mark> | We keep a store list for this retailer. You do not need to upload one. |
| <mark style="color:green;">Your list</mark>   | You uploaded a list. It replaces our list for this retailer.           |
| <mark style="color:red;">No list</mark>       | There is no store list. The retailer cannot show **In-store**.         |

Click the number in the **Stores** column to see the stores. The dialog lists each store's name, address, city, state, and zip code. Click **Download CSV** to download the list.

### Upload your own store list

Your list replaces our list for that retailer. To start from the stores we already have, open the store count, and click **Download CSV**. Edit the file, and upload it.

{% stepper %}
{% step %}

### Get the template

Click **Download template**. You get `store-list-template.csv` with these columns: `storename`, `address`, `city`, `state`, `zipcode`.
{% endstep %}

{% step %}

### Fill it in

Add one row for each store.
{% endstep %}

{% step %}

### Upload the file

Click **Upload** on the retailer's row, and select your file. You can upload a `.csv`, `.xls`, `.xlsx`, or `.json` file.
{% endstep %}

{% step %}

### Review the file

Check the file in **Review this file**. See [Review a store file](#review-a-store-file).
{% endstep %}

{% step %}

### Save the list

Click **Upload list**. If the retailer already has your list, click **Replace list**.
{% endstep %}

{% step %}

### Wait for the list

The status shows <mark style="color:blue;">Processing…</mark>. When it shows <mark style="color:green;">Your list</mark>, the upload is done.
{% endstep %}
{% endstepper %}

Done. The retailer can now show **In-store**. Next, set the retailer's **Display mode** to **In-store** or **Online + In-store**.

To change an uploaded list, click **Replace**. To remove it, click **Delete**, then click **Delete** in the dialog. Your stores then leave the store finder. We use our managed list for that retailer if we have one.

## Your locations sit beside retailer stores

Shoppers see your own stores, dealers and clinics beside the retailer stores. They see them, for example, in the concierge chat and on product pages. **Your locations** holds them. These locations belong to no retailer. Your project has one list of its own locations. Go to **Settings → Where to buy → Your locations**.

{% stepper %}
{% step %}

### Get the template

Click **Download template**. You get `your-locations-template.csv`. It has the store list columns, and these columns too: `kind`, `tags`, `phone`, `website`, `email`, `description`. Separate two tags with `|`.
{% endstep %}

{% step %}

### Fill it in

Add one row for each location.
{% endstep %}

{% step %}

### Upload the file

Click **Upload**, and select your file. You can upload a `.csv`, `.xls`, `.xlsx`, or `.json` file.
{% endstep %}

{% step %}

### Review and save

Check the file in **Review this file**, then click **Upload list**. See [Review a store file](#review-a-store-file).
{% endstep %}

{% step %}

### Wait for the list

The status shows <mark style="color:blue;">Processing…</mark>. When it shows <mark style="color:green;">Your list</mark>, the upload is done.
{% endstep %}

{% step %}

### Show your locations

Turn on **Show my locations**. Shoppers see your locations only while this is on.
{% endstep %}
{% endstepper %}

Done. Shoppers see your locations beside the retailer stores.

| Status                                        | What it means                                             |
| --------------------------------------------- | --------------------------------------------------------- |
| <mark style="color:green;">Your list</mark>   | Your list is ready.                                       |
| <mark style="color:blue;">Processing…</mark>  | ShopperOS is saving the file.                             |
| <mark style="color:red;">Upload failed</mark> | The file did not save. The reason shows below the status. |
| <mark style="color:red;">No list</mark>       | There is no list, or the list has no stores.              |

While a new file saves, or after it fails, shoppers continue to see the last list that saved.

Click the number in the **Stores** column to see your locations. Click **Download CSV** to download them. To change the list, click **Replace**. To remove it, turn off **Show my locations** first, then click **Delete**.

## Review a store file

Before a file replaces a list, **Review this file** shows what the file holds. Nothing is saved until you confirm.

* The first line tells how many stores are ready, for example **120 stores ready.**
* **rows rejected** tells how many rows cannot be saved. The first rejected rows show with their row number and the reason.
* **have no map point** tells how many stores have no latitude and longitude. A search by distance does not find them.
* A table shows the first stores in the file.

Click **Upload list** or **Replace list** to save the file. Click **Cancel** to keep the list as it is. When no store in the file can be saved, the save button is greyed out.

A row is rejected when:

* it has no location ID and no address,
* it repeats the location ID of an earlier row (the first row stays),
* on a retailer's list, it names another retailer.

## Product settings

Each product can override the project settings. Open **Catalog**, click a product, and click **Checkout** in the product menu.

{% tabs %}
{% tab title="Where-to-Buy tab" %}

| Setting                  | What it does                                                                   |
| ------------------------ | ------------------------------------------------------------------------------ |
| **Where-to-Buy enabled** | Shows retailer links to shoppers for this product.                             |
| **Link out**             | Shows Where-to-Buy links when the product cannot be bought and checkout is on. |

**Where-to-Buy Retailer Settings** lists the retailers for this product. It includes other items with the same match ID.

| Column            | What it shows                                                                                          |
| ----------------- | ------------------------------------------------------------------------------------------------------ |
| **Retailer**      | The retailer.                                                                                          |
| **Buy Box Order** | The retailer's position in the buy box. It is empty when the retailer does not sell this product.      |
| **Availability**  | <mark style="color:green;">Available</mark> if the retailer sells this product. Otherwise Unavailable. |
| **Enabled**       | Turn off a retailer to hide it for this product only.                                                  |

You cannot turn on a retailer that does not sell the product. When **Where-to-Buy enabled** is off, the retailer table is greyed out.
{% endtab %}

{% tab title="Store Locator tab" %}

| Setting                   | What it does                                        |
| ------------------------- | --------------------------------------------------- |
| **Store Locator enabled** | Shows physical store availability for this product. |

**Store Locator Retailer Settings** lists only retailers with physical stores.

| Column               | What it shows                                               |
| -------------------- | ----------------------------------------------------------- |
| **Retailer**         | The retailer.                                               |
| **Stores**           | The number of stores. Click it to open **Store Locations**. |
| **Store Visibility** | **All Stores** or **Specific Stores**.                      |
| **Status**           | <mark style="color:green;">Eligible</mark> or Not eligible. |
| **Enabled**          | Turn off a retailer to hide its stores for this product.    |

To show this product in some stores only:

1. In **Store Visibility**, choose **Specific Stores**. **Store Locations** opens.
2. Turn off **Enabled** for each store that does not carry the product. Each change saves at once.
3. Close the dialog.

Done. The product shows only in the stores that stay on. To check which stores are on, click the number in the **Stores** column.
{% endtab %}
{% endtabs %}

## What if…?

<details>

<summary>What if I delete my store list for a retailer?</summary>

Your stores leave the store finder. We use our managed list for that retailer if we have one.

</details>

<details>

<summary>What if a new file fails to save?</summary>

Shoppers continue to see the last list that saved. The reason shows below the status. Fix the file, and upload it again.

</details>

<details>

<summary>What if some stores have no map point?</summary>

They have no latitude and longitude, so a search by distance does not find them. **Review this file** counts them under **have no map point** before you save.

</details>

## Troubleshooting

| Message                                                 | What to do                                                                                                                                         |
| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| **No retailers to configure yet**                       | Connect your catalog first. See [Your catalog](/catalog/catalog.md). If you have a catalog, turn on channels in **Settings → Catalog → Channels**. |
| **(upload a store list to enable In-store)**            | Upload a store list for that retailer. See [Store lists feed the store finder](#store-lists-feed-the-store-finder).                                |
| **Upload failed (HTTP …)**                              | Check the file, then click **Upload** again.                                                                                                       |
| The status stays **No list** after an upload            | Check that the file has the template's columns and one row for each store. Then upload it again.                                                   |
| **Row …: …** in **Review this file**                    | Fix that row in your file, then upload the file again.                                                                                             |
| The upload button in **Review this file** is greyed out | No store in the file can be saved. Check the columns against the template.                                                                         |
| **Show my locations** is greyed out                     | Upload a list of your own locations first.                                                                                                         |
| **Turn off Show my locations first.**                   | Turn off **Show my locations**, then click **Delete**.                                                                                             |
| **Link out** is missing                                 | Turn on in-app checkout first. See [Turn on checkout and payments](/selling-and-checkout/checkout-and-payments.md).                                |
| A product's **Enabled** switch is greyed out            | The retailer does not sell this product, or the product is not eligible there.                                                                     |

## Next step

{% content-ref url="/pages/lF2rehaIqtG80GDxx8Gx" %}
[Turn on checkout and payments](/selling-and-checkout/checkout-and-payments.md)
{% endcontent-ref %}
