> 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/catalog.md).

# Your catalog

Here you see your products, choose where they come from, and decide what the catalog keeps. Your catalog is the list of products in your project. Your pages, your concierge and your checkout all read it. ShopperOS builds it from one main source and keeps it up to date.

To see your products, open **Catalog** in the top navigation. To change the source or what the catalog keeps, open **Settings → Catalog**.

```mermaid
flowchart LR
  S[Source] -->|Build catalog from| C[Catalog]
  C --> P[Pages]
  C --> Q[Concierge]
  C --> K[Checkout]
  R[Other retailers] -->|Enabled in Channels| W[Where to buy]
```

*One main source fills the catalog. Pages, the concierge and checkout read it. The other retailers that sell your brand become places where shoppers can buy.*

## Three pages cover the catalog

Read this page first. Then open a product, and then set where shoppers can buy.

<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>Your catalog</strong></td><td>The product list, the catalog source, and every tab of <strong>Settings → Catalog</strong>. This page.</td><td><a href="/catalog/catalog.md">Your catalog</a></td></tr><tr><td><strong>Product details</strong></td><td>One product's page: its data, content, matches, research, and how shoppers buy it.</td><td><a href="/catalog/product-details.md">Product details</a></td></tr><tr><td><strong>Where to buy and store locator</strong></td><td>The retailers and stores that shoppers see, for the project and for each product.</td><td><a href="/catalog/where-to-buy.md">Where to buy and store locator</a></td></tr></tbody></table>

## One list of every product

**Catalog** opens on the **Products** list. Click a product title to open its product page. See [Product details](/catalog/product-details.md).

<figure><img src="https://489913050-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FblcXcPwOUg5osGsERflQ%2Fuploads%2Fgit-blob-17413b82647a0098a7c91868aea52f0d83614e6f%2Fcatalog-list.jpg?alt=media" alt="The Products list"><figcaption><p>The Products list. The tabs at the top split products by status. Filter and Export are at the top right.</p></figcaption></figure>

### Tabs split products by status

| Tab             | What it shows                                                        |
| --------------- | -------------------------------------------------------------------- |
| **Available**   | Products that are available from their source. This tab opens first. |
| **Unavailable** | Products that are not available from their source.                   |
| **All**         | Every product in the catalog.                                        |

### Each row shows status, SKU and retailers

| Column            | What it shows                                                          |
| ----------------- | ---------------------------------------------------------------------- |
| Image and title   | The product image and title. Click the title to open the product page. |
| **Status**        | <mark style="color:green;">Available</mark> or Unavailable.            |
| **Stackline SKU** | The product's ID in ShopperOS. Click it to copy it.                    |
| **Retailers**     | A logo for each retailer that sells this product.                      |

Click the arrow at the end of a row to expand it. The expanded row has three parts:

* **Product Details**: **Product Status**, **Stackline SKU**, **Brand Name**, **Category**, **Subcategory**, and **Retail Price**.
* **Product Matches**: the retailer SKU of this product at each retailer. Click a SKU to open the product on that retailer's site.
* **Activations**: **Reward campaigns**, **Reviews**, **Pages**, and **Checkout**. Each link opens the product page.

Use the arrows under the table to go to the next page or the previous page.

### Filter the list

The filter works together with the tab you have open. Go to **Catalog → Products**.

{% stepper %}
{% step %}

### Open the filter

Click **Filter**.
{% endstep %}

{% step %}

### Select values

Select values under **Retailers**, **Categories**, or **Subcategories**. These two lists show values from the products that the list has loaded so far.
{% endstep %}

{% step %}

### Apply

Click **Apply**. The list shows only the products that match.
{% endstep %}
{% endstepper %}

To remove every selection, click **Clear**. Next, export the filtered list if you need a file.

### Export the list

On **Catalog → Products**, click **Export**. ShopperOS downloads an Excel file (`.xlsx`) of the products that match the current tab and filter. The file has two sheets:

* **Catalog**: one row for each product.
* **Catalog Matching Products**: one row for each retailer match of each product.

## One main source fills the catalog

A catalog is built from one main source. The other retailers that sell your brand show as places where shoppers can buy. See [Where to buy and store locator](/catalog/where-to-buy.md).

A new project has no products. **Catalog** then shows **Configure your catalog to get started**. To choose a source, go to **Settings → Catalog → Source → Add source**. Then follow the tab for your source.

{% tabs %}
{% tab title="Retailers we track" %}
Stackline already tracks your brand on major retailers. You build the catalog from one of them. There is nothing to install.

1. Choose **Retailers we track**.
2. If your catalog has no brand yet, ShopperOS asks **Which brand should we import?** Click **Add brand**.
3. Search for your brand, and select it. Then click **Continue**.
4. Select the retailer to build your catalog from. Each row shows how many of your products we track there.
5. Click **Build catalog from** and the retailer name. The import starts.

The other retailers in the list become places where shoppers can buy. Next, see [While the import runs](#while-the-import-runs).
{% endtab %}

{% tab title="Shopify" %}
ShopperOS syncs your live Shopify catalog through your project's Shopify app. See [Connect your Shopify store](/selling-and-checkout/shopify-integration.md).
{% endtab %}

{% tab title="Magento" %}
ShopperOS connects your Magento store through a read-only integration that you create. You need these values:

| Field                                                                            | What to enter                                                                                        |
| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **Store URL**                                                                    | Your Magento store address, for example `store.example.com`.                                         |
| **Consumer key**, **Consumer secret**, **Access token**, **Access token secret** | The four keys from your Magento integration.                                                         |
| **Public store domain**                                                          | The domain where shoppers see your products. ShopperOS uses it to build product links.               |
| **Source retailer ID**                                                           | <mark style="color:purple;">Stackline team</mark> Your Stackline contact gives you this number.      |
| **Brand attribute code**                                                         | The Magento attribute that identifies your brand. The import includes only products with your brand. |
| **Brand attribute value**                                                        | The value of that attribute for your brand.                                                          |

1. In your Magento admin, open **System → Extensions → Integrations → Add New Integration**.
2. Give the integration **Catalog → Products (read)** access.
3. Click **Save & Activate**.
4. In ShopperOS, choose **Magento**, and fill in each field of the table.
5. Click **Connect Magento**. The import starts.

Next, see [While the import runs](#while-the-import-runs).
{% endtab %}

{% tab title="Upload a spreadsheet" %}
This source is not available yet. Contact your Stackline onboarding team to set up your catalog from a file.
{% endtab %}
{% endtabs %}

### While the import runs

The import usually takes a few minutes, and you can continue to work. ShopperOS shows **Building your catalog…** and a count, for example **120 of 450 products**. For some sources, it first shows **Analyzing your website…** while it picks your product categories. Your products appear when it finishes.

If the import fails or finds no products, the setup screen shows a warning and a **Retry import** button.

## Source: what the catalog keeps

**Settings → Catalog → Source** controls what is in your catalog.

<figure><img src="https://489913050-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FblcXcPwOUg5osGsERflQ%2Fuploads%2Fgit-blob-d80224b7f9525e4b3664bb7e4fa42b4260ae6071%2Fsettings-catalog-source.jpg?alt=media" alt="Settings → Catalog → Source"><figcaption><p>Settings → Catalog → Source. The source card is at the top. Brands and Categories decide which products stay.</p></figcaption></figure>

| Section             | What it does                                                                                                                                                                                      |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Source**          | Shows how many products are in your catalog, and the source they come from.                                                                                                                       |
| **Variant display** | **Show single available variant axis** keeps the variant selector visible on product pages when only one in-stock option remains.                                                                 |
| **Brands**          | Your catalog includes products from these brands. Each brand shows its name and its brand ID, for example **Acme (12345)**. Click **Add brand** to add one, or the **×** on a brand to remove it. |
| **Categories**      | Each category in your catalog, with its product count and an **Enabled** switch. The catalog keeps only enabled categories.                                                                       |

### Save your changes

When you change a setting, a bar shows **Unsaved changes** and what changed.

* Click **Discard** to undo your changes.
* Click **Save** to save changes to **Variant display**.
* Click **Save & rebuild** when you change **Brands** or **Categories**. ShopperOS saves the change and rebuilds the catalog.

{% hint style="warning" %}
**Save & rebuild** removes the products in each category that you turned off. Turn off only categories that do not belong to your brand.
{% endhint %}

### Fix the category list

* To refresh the category list, click **Re-analyze site**. It reads your site again.
* To drop a category that is tagged to your brand by mistake, turn it off. Then click **Save & rebuild**.

### Change the store icon

Retailer lists, where to buy and product cards show this icon for your store. A Shopify source shows **Change icon** under its name. When the store has no icon, project setup gives it your brand's favicon.

{% stepper %}
{% step %}

### Open the icon dialog

Click **Change icon**.
{% endstep %}

{% step %}

### Choose the image

Select **Use brand favicon**. Or select **Upload an image**, and choose a PNG, JPG, WebP, GIF, or SVG file of 2 MB or less. You cannot use an `.ico` file. Save the icon as a PNG first.
{% endstep %}

{% step %}

### Save

Click **Save**. ShopperOS makes a square WebP icon from the image.
{% endstep %}
{% endstepper %}

Done. Retailer lists, where to buy and product cards now show the new icon.

### Source actions

The buttons on the source card rebuild or enrich the catalog. They are on **Settings → Catalog → Source**.

| Button                  | What it does                                                                                                                                                 |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Reimport**            | Opens **Start catalog import?** It imports products from your source with the current settings.                                                              |
| **Classify**            | Shopify sources only. Opens **Classify catalog products?** It puts products without a category into Stackline categories and subcategories.                  |
| **Fill product fields** | Brands with product fields only. Opens **Fill product fields from store pages?** The AI reads the store page of every product and fills your product fields. |
| **Add source**          | Shows only when the catalog has no source. Opens **Add a product source**, where you choose one.                                                             |

{% tabs %}
{% tab title="Reimport" %}

1. Click **Reimport**.
2. Optional: to delete the current catalog before the import, turn on **Replace existing catalog first**.
3. If you turned it on, type the ID that the dialog shows to confirm.
4. Click **Start import**. The import starts. See [While the import runs](#while-the-import-runs).
   {% endtab %}

{% tab title="Classify" %}
When **Overwrite existing taxonomy** is off, products keep the category and subcategory that they already have.

1. Click **Classify**.
2. Optional: to classify products that already have a category again, turn on **Overwrite existing taxonomy**.
3. If you turned it on, type the ID that the dialog shows to confirm.
4. Click **Classify**. The **Source** section shows the progress.

Done. The **Source** section shows a line such as **Catalog classified · 40 updated · 12 already classified**.
{% endtab %}

{% tab title="Fill product fields" %}
New values wait for your review. Values that you approved, denied or edited do not change.

1. Click **Fill product fields**.
2. Under **Groups**, each group shows its product count. Untick the groups to skip. **Products in no group** get only the base fields.
3. Optional: to fill only some fields, such as a new one, tick **Only some fields** and tick the fields. The AI reads the store page either way.
4. Check the number of products to read, and click **Fill product fields**.

The AI reads each product's store page, with its images. It takes about a minute for each product. You can leave the page. The **Source** section shows the progress.

Done. The **Source** section shows a line such as **Product fields filled · 12 products · 120 values saved as pending**. Next, review the new values. See [Review values](#review-values).
{% endtab %}
{% endtabs %}

## Channels: the retailers shoppers can buy from

Turn a channel on to show that retailer to shoppers as a place where they can buy. **Settings → Catalog → Channels** lists the retailers that we track your brand on.

| Column           | What it shows                                                                                                                                                                                                                                                         |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Channel**      | The retailer.                                                                                                                                                                                                                                                         |
| **Products**     | How many of your products we track at that retailer.                                                                                                                                                                                                                  |
| **Offer import** | **Source** for your main source. For other retailers: Not imported, <mark style="color:orange;">Queued</mark>, <mark style="color:blue;">Importing</mark>, <mark style="color:blue;">Matching</mark>, the number imported, or <mark style="color:red;">Failed</mark>. |
| **Enabled**      | Whether the retailer counts as a place to buy. You cannot turn off your main source.                                                                                                                                                                                  |

### Change the channels

1. Turn each channel on or off. To undo, click **Discard**.
2. Click **Save channels**.

Done. A channel that you turn off here does not show in **Settings → Where to buy**. Next, refresh the offers.

### Refresh the offers from your channels

{% stepper %}
{% step %}

### Save your channel changes

Click **Save channels** first. A refresh does not start while changes are unsaved.
{% endstep %}

{% step %}

### Open the refresh dialog

Click **Refresh offers**. The **Refresh retailer offers** dialog opens.
{% endstep %}

{% step %}

### Select the retailers

Select the retailers to refresh.
{% endstep %}

{% step %}

### Start the refresh

Click **Start refresh**. The **Offer import** column shows the progress.
{% endstep %}
{% endstepper %}

Done. When the import ends, **Offer import** shows the number imported. Next, set how each retailer shows in [Where to buy and store locator](/catalog/where-to-buy.md).

## Product copy: how ShopperOS writes descriptions

ShopperOS writes each product's description and feature bullets from the instructions in **Settings → Catalog → Product copy**.

* The text box holds the full instructions.
* The reply must stay JSON with `description` and `featureBullets`. Do not remove that part of the instructions.
* Your changes apply on the next reimport or the next product change.
* To go back to the default instructions, click **Reset**.

When you change the instructions, a bar shows **Unsaved changes**.

* To undo your changes, click **Discard**.
* To keep them, click **Save**. The catalog does not rebuild.

## Product fields: the facts each product carries

Product fields are the facts your products carry, such as dosage, dimensions or ingredients. They are on **Settings → Catalog → Product fields**. The Brandclub team sets them up for you. You can read them here, review their values under **Review**, and fill them on every product under **Fill**. **Fill product fields** works as it does on **Source**. See [Source actions](#source-actions).

<mark style="color:purple;">Brandclub team</mark> For a brand with no fields yet, the team sees **Generate fields with AI**. The AI reads the store pages of a few products in each category and drafts the fields. The team reviews the draft on this tab. It keeps or drops each field, edits it, and moves it between groups. Then it saves.

Fields sit in groups:

* **Base**: every product gets these fields.
* **Named groups**: a product joins the first group that matches its category, product type or tag. It gets that group's fields too. Groups show in priority order.

| Column         | What it shows                                                                                |
| -------------- | -------------------------------------------------------------------------------------------- |
| **Field**      | The field's name and its key. A field that is off shows **Off**.                             |
| **Shape**      | What the field holds, such as a list, a measurement in inches, or a table.                   |
| **Applies to** | **Whole product**, or one value for each variant option, such as **Each Size**.              |
| **Review**     | **Always review**, or the confidence at which ShopperOS approves an AI value without review. |

Groups match products by catalog category, so classify the catalog first. Until then, a banner sends you to **Source**.

### Edit the fields (Brandclub team)

Only the Brandclub team edits fields. Go to **Settings → Catalog → Product fields**.

1. Click **Edit fields**.
2. Change what you need:
   * Click **Add field** on Base or on a group. Or open a field's **⋯** menu to edit it or move it to another group.
   * Change a group's name, and the categories, subcategories, product types and tags it matches.
   * Click **Add group**. Or use a group's **⋯** menu to move it up or down or to remove it.
3. Read the problems above the fields, if any, and fix them.
4. Optional: test the edits under **Test on a product**. The test shows the group the product joins.
5. Click **Save fields**.

Done. Next, run **Fill product fields** to fill the new fields. See [Source actions](#source-actions).

Rules for a saved field:

* You cannot remove a saved field. Turn it off instead.
* Its key and the kind of its shape cannot change.
* When you change its hint or shape, the values it already has stay.
* The next **Fill product fields** replaces the values that wait for review. Approved values stay until someone reviews them again.

### Turn off or delete a field (Brandclub team)

Turn off a field to stop it without losing its values. To delete it, turn it off first.

1. Open a field's **⋯** menu, and click **Turn off** or **Turn on**.
2. Confirm in the dialog.

A field that is off keeps its values. ShopperOS does not fill it, it does not show in reviews, and the concierge does not read it.

To delete a field that is off in every group:

1. Open its **⋯** menu, and click **Delete**.
2. Type the field's key to confirm.
3. Click **Delete field and values**.

{% hint style="danger" %}
The delete removes the field's values on every product, approved values too. Then it removes the field. You cannot undo it.
{% endhint %}

A banner shows the progress. A value that changed during the delete stays. A value that belongs to another app stays.

### Review values

Each value that the AI fills waits for review until someone approves or denies it. Any operator of the project can review values on **Settings → Catalog → Product fields**.

```mermaid
stateDiagram-v2
  [*] --> Pending: Fill product fields
  Pending --> Approved: Approve
  Pending --> Denied: Deny
  Pending --> Approved: Approve by confidence
```

*A new value starts as Pending. Only Approve, Deny or Approve by confidence moves it on. A value with no confidence never moves by confidence.*

**Review** counts the values that wait for review, for each field.

{% stepper %}
{% step %}

### Open the review

Click a field, or click **Review values**. **Review product field values** opens.
{% endstep %}

{% step %}

### Choose what to see

Choose the **Field**. To narrow the list, choose a **Group**, a **Status**, or a lowest **Confidence at least**. The statuses are <mark style="color:orange;">Pending</mark>, <mark style="color:green;">Approved</mark> and <mark style="color:red;">Denied</mark>.
{% endstep %}

{% step %}

### Select values

Tick the values. Or tick the box in the header to select every value shown.
{% endstep %}

{% step %}

### Decide

Click **Approve** or **Deny**.
{% endstep %}
{% endstepper %}

Done. A value that changed after you loaded the list stays as it is. The banner counts it as changed. To edit one value, open its product's **Assets** → **Meta Fields** tab.

### Approve by confidence

{% hint style="warning" %}
The AI rates its own confidence. The rating tells how well the page supports a value. It does not prove that the value is right. Read the samples before you approve.
{% endhint %}

1. Under **Review**, click **Approve by confidence**.
2. Enter a confidence from 0 to 1 in **Confidence at least**.
3. Read the count and the samples for each field.
4. Click **Approve** with the number of values.

Done. The values at or above that confidence move to <mark style="color:green;">Approved</mark>.

### Test on a product

A test shows what the AI finds for one product, and saves nothing.

1. Under **Test on a product**, search for a product by name or SKU, and click it.
2. Click **Test on** and the product name. A test takes 30 to 60 seconds.
3. Read what the AI found for each field, where it found it, and how sure it is. ShopperOS saves nothing.

## What if…?

<details>

<summary>What if someone else saved the fields while I edited them?</summary>

Click **Load the saved fields**. Then make your edits again.

</details>

<details>

<summary>What if a field delete stops before it ends?</summary>

The field stays off. Delete it again to continue.

</details>

<details>

<summary>What if a category belongs to another brand?</summary>

Open **Settings → Catalog → Source**. Turn off the category, and click **Save & rebuild**. ShopperOS removes the products of that category.

</details>

<details>

<summary>What if I edit a value that the AI filled?</summary>

ShopperOS keeps your text. Later AI runs do not change it. See [Product details](/catalog/product-details.md).

</details>

## Troubleshooting

| Message                                                                                                 | What to do                                                                       |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **We don't have crawled coverage for your brand yet. Connect a store or upload a spreadsheet instead.** | Choose another source, or contact your Stackline team.                           |
| **We couldn't load your retailers just now. Try again in a moment.**                                    | Wait a moment, then open the step again.                                         |
| **The import from … failed: …**                                                                         | Read the reason, fix it, then click **Retry import**.                            |
| **The import from … finished, but it found no products to add.**                                        | Check that your source has products for your brand. Then click **Retry import**. |
| **… products were skipped because they are drafts or archived in Shopify.**                             | Set those products to **Active** in Shopify, then click **Retry import**.        |
| **Couldn't connect: …** (Magento)                                                                       | Check each key and the **Source retailer ID**, then try again.                   |
| **Classification failed: …**                                                                            | Click **Classify** again. If it fails again, contact your Stackline team.        |
| **Save channel changes before refreshing retailer offers.**                                             | Click **Save channels**, then click **Refresh offers**.                          |
| **Something went wrong with your export. Please try again.**                                            | Click **Export** again.                                                          |

## Next step

{% content-ref url="/pages/1KbP7hOCRijCqqmcc21X" %}
[Product details](/catalog/product-details.md)
{% endcontent-ref %}
