> For the complete documentation index, see [llms.txt](https://learn.moselle.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.moselle.io/operations/suppliers/supplier-catalog.md).

# Supplier Catalog

A supplier catalog records what a vendor makes for you, what they charge, and their order terms — MOQ, case pack, and lead time. Update one with Mo in minutes.

{% hint style="info" %}
**Quick Answer:** A supplier catalog is Moselle's record of what one supplier makes for you, with their price and order terms for each item. To update one, open the supplier, go to the **Catalog** tab, click **Upload catalog**, and attach the vendor's file — Mo reads whatever layout it comes in and previews every change before anything saves. Takes about 2 minutes.
{% endhint %}

## Watch: Updating a Supplier Catalog with Mo

New to catalog uploads? This walkthrough runs the whole thing end to end — attaching the vendor's file, reading Mo's preview, and confirming the prices and order terms it writes.

{% embed url="<https://youtu.be/YaCTAVFP5c4>" %}
Update Supplier Catalog with Mo
{% endembed %}

## What is a supplier catalog in Moselle?

**A supplier catalog is** the list of items a supplier can make or supply for you, holding one row per item with that vendor's own product code, their price, and the terms they will accept an order on.

It answers three questions that planning can't work without:

* **What do they carry?** Which of your SKUs this vendor can actually supply, and the code they call each one by.
* **What do they charge?** Price per unit, in their currency.
* **How will they take an order?** Minimum order quantity, case pack, order cap, and how long production takes.

This is live data inside Moselle, not a spreadsheet kept alongside it. Replenishment reads it directly: prices decide which supplier is cheapest for an item when several can supply it, and order terms decide the size of the order Moselle suggests.

{% hint style="info" %}
Every supplier has their own catalog. The same SKU can sit in several catalogs at different prices and different MOQs — that's how Moselle compares vendors.
{% endhint %}

### Where the catalog appears

| Location                                  | What you see                                                                              |
| ----------------------------------------- | ----------------------------------------------------------------------------------------- |
| **Suppliers > \[supplier] > Catalog**     | The full catalog, and the place to update it                                              |
| **Suppliers** list                        | A **Catalog Last Updated** column, so stale vendors stand out                             |
| **Items > \[item] > Suppliers**           | A **Supplier catalog** panel: every vendor who carries that one item, editable row by row |
| **Operations > Inventory > Supply Chain** | Select a supplier node, then **Edit catalog** under Catalog                               |

## What's in the catalog table?

| Column               | Description                                                        |
| -------------------- | ------------------------------------------------------------------ |
| **SKU**              | Your internal Moselle SKU                                          |
| **Name**             | Product name                                                       |
| **Supplier SKU**     | The vendor's own product code or barcode for the item              |
| **Price**            | What this supplier charges per unit, in their currency             |
| **Tolerance**        | How much more you'll accept from a preferred supplier (see below)  |
| **Normalized Price** | The price converted to your operating currency, so vendors compare |
| **MOQ**              | Minimum order quantity — the fewest units the vendor will take     |
| **Order Multiple**   | Case pack or pallet size that orders round up to                   |
| **Order Max**        | The most this vendor will take in a single order                   |
| **Lead Time (days)** | Production time, from placing the order to goods ready             |
| **Last Updated**     | When the row last changed                                          |

Use the search bar to find a SKU. The refresh icon beside it pulls in the latest rows — useful right after an upload finishes processing.

{% hint style="info" %}
**A dash (—) means the term isn't set**, not that it's zero. Order terms are optional per item, and a blank one falls back to the default on that supplier's connection in the Supply Chain canvas. A term set here wins over that default.
{% endhint %}

{% hint style="warning" %}
**Order terms belong here, not in an item's custom attributes.** An MOQ or lead time typed into an item's **Attributes** table is only ever used for grouping and filtering — supply planning won't read it, so the order sizes it suggests will ignore it. If you have order terms saved as custom attributes today, move them to the supplier catalog and delete the attribute so there's one source of truth.
{% endhint %}

{% hint style="warning" %}
**Tolerance is not a charge.** It's a per-unit allowance used only when Moselle compares suppliers, so a vendor you prefer keeps winning against a rival that is only marginally cheaper. It never changes what you actually pay.
{% endhint %}

## How do I add or update a supplier catalog?

| Method                                       | Best for                                                               | Where                                    |
| -------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------- |
| **Upload catalog** (with Mo) — *recommended* | Any vendor file, in whatever layout it arrived                         | The supplier's **Catalog** tab           |
| **Ask Mo in chat**                           | One file covering several suppliers, or a few prices from a phone call | Any Mo chat                              |
| **Upload with template (Legacy)**            | A file you've already shaped to Moselle's three-column template        | Catalog tab > dropdown beside the button |
| **Add to catalog** (by hand)                 | A single item — one new vendor price, or a correction                  | An item's **Suppliers** tab              |

### Update a catalog from the supplier page

**Time Required:** 2 minutes\
**Difficulty:** Beginner

{% stepper %}
{% step %}

#### Open the supplier's Catalog tab

Go to **Suppliers**, click the vendor, then the **Catalog** tab.
{% endstep %}

{% step %}

#### Click Upload catalog, then attach the file

A dialog opens. Click the **paperclip icon** inside it and choose the vendor's file (CSV or Excel). It appears as a chip above the text box.

**One file at a time**, and **any column layout works** — you don't need to rearrange it or rename headers first.
{% endstep %}

{% step %}

#### Say what changed, in the same dialog

Type a sentence in the **What changed?** box, e.g. *"New 2027 price list from the vendor; most SKUs up 4%, MOQs unchanged."* This is context for the confirmation card, not instructions — every number Mo reports comes from the file itself.

{% hint style="info" %}
This box is **required**. The submit button stays greyed out until you've both attached a file and written something here.
{% endhint %}
{% endstep %}

{% step %}

#### Click Upload with Mo

The dialog closes and **Mo opens in a new chat**, already working on your file. Everything from here happens in that chat.
{% endstep %}

{% step %}

#### Review Mo's confirmation card

In the chat, Mo maps the columns, matches each row to your products, and shows how many prices will be **replaced**, how many items are **newly priced**, and how many rows were **skipped**. Click **View rows** on the card to see the detail, including the price each row replaces.

**Expected Result:** Counts that match what you expect from the file. If they don't, cancel and check the file rather than confirming.
{% endstep %}

{% step %}

#### Click Update prices on the card

Nothing is written until you confirm. A row that fails validation doesn't hold up the rest — Mo saves what it can and tells you which rows were skipped and why.

{% hint style="success" %}
Go back to the **Catalog** tab and refresh: it now shows the new prices and terms, and the supplier's **Catalog updated** date moves to today.
{% endhint %}
{% endstep %}
{% endstepper %}

### Update several suppliers at once in Mo chat

If one file covers a whole vendor list, don't upload it supplier by supplier. Open Mo, click the **paperclip icon** in the message box to attach the file, and send it with a sentence saying what it is — *"Here's our updated catalog for this year, all vendors."* Every row needs a **supplier** column and a **SKU** (or the supplier's own code) so Mo knows which vendor and which product each row belongs to.

{% content-ref url="/pages/bhnbOdyzHJU16Tc1oHKc" %}
[Upload Your Files to Mo](/mo/tips/upload-your-files-to-mo.md)
{% endcontent-ref %}

Mo groups the rows by vendor and shows a per-supplier breakdown on the confirmation card, so you can see which catalogs change and by how much before you save.

{% hint style="warning" %}
**If the file contains vendors you haven't set up yet**, create them first in a separate message — see [Set up new suppliers and their catalogs](#set-up-new-suppliers-and-their-catalogs) below. Rows naming a supplier that doesn't exist are skipped.
{% endhint %}

You don't need a file at all. Prices from a call work the same way — *"Acme quoted us $1.34 on CTN-12 and $2.05 on CTN-24"* — and Mo reads them back to you before writing.

### What can the file include?

Mo maps whatever headers the vendor used onto these fields. Column order doesn't matter, and columns Moselle has no home for are reported rather than silently dropped.

| Category                      | Fields                                                                             |
| ----------------------------- | ---------------------------------------------------------------------------------- |
| Identity **(required)**       | Supplier name, and SKU or the supplier's own product code                          |
| Pricing                       | Price, currency, tolerance                                                         |
| Order terms **(recommended)** | Minimum order quantity, order multiple, order maximum, production lead time (days) |

{% hint style="info" %}
**A catalog update doesn't need prices at all.** A vendor's MOQ-and-lead-time sheet uploads fine on its own and leaves stored prices untouched. The reverse is also true: a plain price list leaves your MOQs alone.
{% endhint %}

Give each order term its **own column with a clear header** rather than burying it in a notes field — a term Mo has to guess at is a term that may not land.

### Add or edit one entry by hand

For a single item you don't need a file at all. Open the item, go to its **Suppliers** tab, and use the **Supplier catalog** panel:

* **Add to catalog** — add a vendor to this item, with their price and order terms
* **Edit catalog entry** — correct one vendor's row
* **Remove** — take a vendor off this item

This is the quickest route for a one-off correction. For anything bigger than a handful of rows, use one of the upload routes above.

### Upload with the legacy template

The template route is still there for files you've already shaped to it. On the **Catalog** tab, click the chevron beside **Upload catalog** and choose **Upload with template (Legacy)**. A dialog opens with everything below in it.

1. Click **Download template** in the dialog's description text
2. Fill it in: **EAN Code** (the supplier's code), **SKU** (yours), and **Price**
3. Drop the finished file on the dashed panel, or click it to browse
4. Set the **Currency** and **Price buffer** beneath — both are required, and both apply to every row in the file
5. Click **Upload**

This route doesn't go through Mo, so there's no preview: the file is processed as soon as you upload it.

This route sets prices only — it can't carry MOQ, order multiple, order cap, or lead time, and one currency and buffer apply to every row. Use the Mo upload if you need any of those.

### Delete a catalog

On the supplier's **Catalog** tab, click the chevron beside **Upload catalog** and choose **Delete catalog**. This clears every row for that supplier and can't be undone, so re-upload rather than delete-then-upload if you're only refreshing prices.

## Can Mo create suppliers too?

Yes — and this is the fastest way to set up vendors you don't have yet. Mo can create the suppliers and then fill their catalogs, **using the same file for both**.

{% hint style="warning" %}
**Ask for one thing per message.** Creating suppliers and updating catalogs are two separate requests to Mo. Don't combine them into a single message like *"create these suppliers and add their prices"* — send the first request, confirm it, then send the second.
{% endhint %}

### Set up new suppliers and their catalogs

**Time Required:** 5 minutes\
**Difficulty:** Beginner

You need **one file** for this, and you do **not** need to clean it up or split it in two. The same sheet works for both steps — Mo reads the vendor details for step one and the pricing for step two, ignoring the columns each step doesn't need.

{% stepper %}
{% step %}

#### Attach the file and ask Mo to create the suppliers

Open Mo, click the **paperclip icon** in the message box to attach your file, and send a message about **suppliers only**:

*"Create the suppliers in this file."*

Review the preview Mo returns in the chat, then click **Add suppliers** on it. Mo imports them in the background and notifies you when it lands.
{% endstep %}

{% step %}

#### Wait for the import to finish

Mo tells you in chat, and notifies you in-app and by email, when the suppliers are in. Don't start step two before this — the catalog upload can only match rows to suppliers that already exist.
{% endstep %}

{% step %}

#### Send a second message asking for the catalog

Same chat, same file — you don't need to re-attach it or edit it. Send a new message about **prices only**:

*"Now upload the catalog from that same file."*

Review the confirmation card in the chat and click **Update prices** on it.

**Expected Result:** The per-supplier breakdown names the vendors you just created, with rows counted against each.
{% endstep %}

{% step %}

#### Refresh to see the result

If the Suppliers list or the **Catalog** tab still looks unchanged, **refresh the page**. The data is already saved — the screen just hasn't caught up.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
**Already have the suppliers?** Skip straight to the catalog upload. You only need step one for vendors that don't exist in Moselle yet.
{% endhint %}

{% content-ref url="/pages/kbxKrHke9edm4UH5Ttnl" %}
[Add a Supplier](/operations/suppliers/add-a-supplier.md)
{% endcontent-ref %}

## Frequently Asked Questions

### Why does Mo say it doesn't recognize my supplier?

**Answer:** Either the spelling doesn't match, or the supplier doesn't exist yet. Names are matched exactly, ignoring only capitalization — *"Acme Pkg"* won't find *"Acme Packaging Ltd"*. Fix the spelling, or send Mo a separate message asking it to create the suppliers from that same file first, then ask for the catalog upload in a second message.

### Can I update MOQs and lead times without touching prices?

**Answer:** Yes — through Mo. Upload a file with a SKU column and the order-term columns and no price column, either from the **Catalog** tab or in a Mo chat. Stored prices are left exactly as they are. The legacy template can't do this; it carries prices only.

### What happens if the same item and supplier appear twice in one file?

**Answer:** The last row in the file wins, and Mo reports the earlier ones on the confirmation card. Deduplicate first if that isn't what you want.

### My vendor quotes tiered pricing — which tier gets stored?

**Answer:** A catalog holds one price per supplier and item, so Mo will ask which tier to use rather than picking for you. Decide the volume band you actually order at before uploading.

### Why wasn't my currency converted?

**Answer:** No exchange rate is on file for that currency. The price still saves as given, but its normalized value reads 1:1. Convert the column before uploading if you need vendors to compare correctly.

### Can I upload a very large catalog in one go?

**Answer:** Yes. If the file is too long to send at once, Mo splits it and confirms each part separately, so you review every batch before it saves.

### Mo says it's done, but I don't see the new suppliers or prices.

**Answer:** **Refresh the page.** The data is saved — the screen is showing what it loaded before the upload. On the Catalog tab you can also click the refresh icon beside the search bar. Large uploads process in the background, and the button reads **Processing catalog…** while that's happening.

## Troubleshooting

| Problem                                          | Solution                                                                                | Time to Fix |
| ------------------------------------------------ | --------------------------------------------------------------------------------------- | ----------- |
| Nothing changed after Mo confirmed the upload    | Refresh the page — the save already happened                                            | 5 seconds   |
| Rows skipped for an unrecognized supplier        | Ask Mo to create the suppliers in a separate message, then re-run the catalog upload    | 5 minutes   |
| Mo only did half of what you asked               | Creating suppliers and updating catalogs need one message each — send the missing one   | 2 minutes   |
| Rows skipped for an unrecognized SKU             | Check the SKU against your catalog; add the missing items, then re-upload               | 5 minutes   |
| Mo flags a row as an archived item               | Expected on wind-down SKUs — usually a sign the vendor sent a stale file                | 1 minute    |
| MOQ or lead time didn't change                   | The file had no column for it. Add one with a clear header and re-upload                | 2 minutes   |
| Suggested order sizes look wrong after an upload | Check MOQ and Order Multiple on the Catalog tab — these override the connection default | 2 minutes   |

## Related Guides

{% content-ref url="/pages/kbxKrHke9edm4UH5Ttnl" %}
[Add a Supplier](/operations/suppliers/add-a-supplier.md)
{% endcontent-ref %}

{% content-ref url="/pages/RPnjxVQVrygjJyKHTe43" %}
[Supplier Types](/operations/suppliers/supplier-types.md)
{% endcontent-ref %}

{% content-ref url="/pages/kwz42KRZ3r6QG3PqvnnS" %}
[Update Inventory with Mo](/operations/inventory/update-inventory-with-mo.md)
{% endcontent-ref %}
