# How do I Upload Sales Data to Moselle?

{% hint style="info" %}
**Quick Answer:** Export your sales file from your platform (e.g., SPS Commerce), attach it to Mo in the chat and ask Mo to reformat it, review the output file, then upload it to the Data Room under **Upload Data → Sales**.
{% endhint %}

## Overview

Moselle uses your sales history to generate demand forecasts. The recommended workflow is a two-step process:

1. **Reformat with Mo** — Drop your raw export into the Mo chat. Mo maps your file's columns to Moselle's required format and returns a clean, ready-to-upload file.
2. **Upload via Data Room** — Take Mo's output file and upload it to the Data Room, selecting your sales channel and time format.

This means you don't need to manually reformat your exports or match column names — Mo handles the heavy lifting.

***

## Prerequisites

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

Before you begin, make sure you have:

* [ ] Access to the Mo chat in your Moselle account
* [ ] A raw sales export file from your platform (CSV or Excel)
* [ ] Knowledge of which sales channel(s) are in your file (e.g., DTC, Amazon, Wholesale)

***

## Step 1 — Export Your Sales File

Export your historical sales data from your sales platform. **Moselle accepts any CSV or Excel export — your file does not need to be in a specific format.** Mo will read whatever columns you have and map them to the correct fields automatically.

This works for exports from any platform, including SPS Commerce, retailer portals, ERPs, 3PLs, and custom reports. As long as your file contains the relevant sales data — such as quantities, PO or order numbers, delivery or ship dates, unit costs, total costs, or similar fields — Mo can work with it.

**Common export sources:**

* **SPS Commerce** — Run your sales report and export as CSV
* **Retailer portals** — Download your sell-through or POS data export
* **ERP or 3PL systems** — Pull a sales history report in CSV or Excel format
* **Custom spreadsheets** — Any internally built sales report works too

{% hint style="info" %}
Your column names don't need to match Moselle's template. Mo understands common variations — for example, "ship date", "delivery date", or "order date" will all be recognised and mapped to the correct field.
{% endhint %}

{% hint style="warning" %}
Do not modify the export file before uploading to Mo. Mo is designed to work with raw exports, and editing columns or headers before the conversation can cause mismatches.
{% endhint %}

***

## Step 2 — Use Mo to Reformat Your File

{% stepper %}
{% step %}

### Open Mo

Click **Mo** in the left sidebar to open the Mo chat.
{% endstep %}

{% step %}

### Attach Your Sales File

Click the **file clip icon (📎)** in the chat input area and select your exported sales file.

Supported formats: **CSV** and **XLSX**.
{% endstep %}

{% step %}

### Tell Mo What to Do

In the chat message, ask Mo to reformat the file to Moselle's sales template. Be specific about the channel your data relates to.

**Example prompts:**

* *"Please reformat this SPS sales export to Moselle's sales template. This data is for our Amazon channel."*
* *"Reformat this file for upload to Moselle — it's DTC sales data."*
* *"This file has sales across multiple channels. Can you split the reformatted output by channel?"*

{% hint style="info" %}
**Always specify your channel.** Moselle needs to know which sales channel the data belongs to (e.g., Amazon, DTC, Wholesale). If your file contains multiple channels, ask Mo to split the reformatted output by channel so you can upload each one separately.
{% endhint %}
{% endstep %}

{% step %}

### Review Mo's Output

Mo will map your file's columns to the required Moselle fields (`sku`, `date`, `quantity`, `order_#`, `total_sales`) and return a reformatted file for you to download.

**Before moving on, review the output file and check:**

* SKUs look correct and match your Moselle catalog
* Dates are formatted consistently (YYYY-MM-DD)
* Quantities and sales values look accurate
* Channel assignment is correct
* The `order_#` column is populated for every row
* There are no duplicate SKUs across rows

{% hint style="warning" %}
Mo does its best to match your columns automatically, but always review the output before uploading. If something looks off, follow up in the same Mo conversation — for example: *"The SKU column looks incorrect, can you check column B instead?"*
{% endhint %}

{% hint style="danger" %}
**Check for empty `order_#` values and duplicate SKUs** — both will cause the upload to fail. See [File Requirements](#file-requirements-moselle-template) below for details and example prompts to fix them with Mo.
{% endhint %}
{% endstep %}
{% endstepper %}

***

## Step 3 — Upload to the Data Room

Once you have your reformatted file from Mo, upload it to the Data Room.

{% stepper %}
{% step %}

### Open the Data Room

Click your **avatar** in the top-right corner of the screen, then select **Data Room** from the menu.
{% endstep %}

{% step %}

### Start a New Upload

Click **Upload Data**. A list of data types will appear — select **Sales**.
{% endstep %}

{% step %}

### Upload Your File

Click to upload and select the reformatted file Mo provided.
{% endstep %}

{% step %}

### Select Your Channel

Choose the **sales channel** this file belongs to from the dropdown (e.g., Amazon, DTC, Wholesale).

{% hint style="info" %}
If Mo split your file by channel in Step 2, upload each channel file separately and select the matching channel here each time.
{% endhint %}
{% endstep %}

{% step %}

### Select Your Time Format

Choose how your sales data is aggregated:

* **Weekly** — Each row represents a week of sales
* **Monthly** — Each row represents a month of sales

{% hint style="warning" %}
**Daily format is strongly recommended for the best forecast accuracy.** When Moselle receives weekly or monthly data, it distributes sales across individual days, which can reduce the accuracy of AI-generated forecasts. If you have daily data available, use it.
{% endhint %}
{% endstep %}

{% step %}

### Submit

Click **Upload** to submit. Uploaded data can take up to 24 hours to propagate into your forecasts.
{% endstep %}
{% endstepper %}

***

## File Requirements (Moselle Template)

Mo handles the reformatting for you, but for reference, Moselle's required sales template uses these columns:

| Column        | Required | Description                                      | Example      |
| ------------- | -------- | ------------------------------------------------ | ------------ |
| `sku`         | Yes      | Product SKU matching your Moselle catalog        | `ABC-001`    |
| `date`        | Yes      | Sale date in YYYY-MM-DD format                   | `2025-01-15` |
| `quantity`    | Yes      | Units sold                                       | `5`          |
| `order_#`     | **Yes**  | Order or PO reference number — must not be blank | `10234`      |
| `total_sales` | Yes      | Revenue for the line in your currency            | `125.00`     |

Ensure all column headers are lowercase exactly as shown. SKUs must match your Moselle catalog for automatic linking.

{% hint style="danger" %}
**Two rules that will cause the upload to fail if not met:**

1. **`order_#` must be populated for every row.** If your source file has no PO or order number, ask Mo to prefill sequential values before you download the output.
2. **Each SKU must appear only once.** If the same SKU appears on multiple rows the upload will be rejected. Ask Mo to combine duplicate SKU rows by summing their quantities and sales values.
   {% endhint %}

***

## Frequently Asked Questions

### My file doesn't have a PO or order number — what do I do?

**Answer:** Ask Mo to generate placeholder values before you download the output. For example: *"The order\_# column is empty — can you prefill it with sequential PO numbers for each row?"*

### The upload failed because of duplicate SKUs — how do I fix it?

**Answer:** Ask Mo to consolidate duplicate rows before you download. For example: *"Please check for any duplicate SKUs and combine them into a single row per SKU, summing the quantities and total sales."*

### What if my file has multiple channels mixed together?

**Answer:** Ask Mo to split the reformatted output by channel — for example: *"This file has Amazon and DTC sales mixed together, please split them into separate files by channel."* Upload each file to the Data Room separately, selecting the correct channel each time.

### Do I need to clean my export before giving it to Mo?

**Answer:** No. Mo is designed to work with raw exports. Just attach the file as-is and describe what it contains. Editing the file before uploading can sometimes cause Mo to misidentify columns.

### My SKUs in the export don't match my Moselle catalog — will Mo fix that?

**Answer:** Mo won't remap SKUs on its own, but you can give Mo a mapping file to do it for you. If you have a spreadsheet that maps your retailer's item numbers to your internal Moselle SKUs, attach both files in the Mo chat and ask Mo to remap the SKUs in the output — for example: *"Here's my sales export and a mapping file. Please reformat the sales file and replace the retailer item numbers with the matching Moselle SKUs from the mapping file."* If you don't have a mapping file, let Mo know which identifiers the export uses and you may need to contact support for a bulk SKU mapping.

### How long does uploaded data take to appear?

**Answer:** Uploaded sales data can take up to 24 hours to propagate into your forecasts and planning views.

### Can I upload multiple channels in one session?

**Answer:** Yes. Ask Mo to split your file by channel, then upload each output file to the Data Room one at a time, selecting the correct channel for each.

### What if I don't have daily data?

**Answer:** Upload weekly or monthly data using the matching time format option in the Data Room. For the most accurate forecasts, contact <support@moselle.io> so the team can adjust your forecasting configuration.

***

## Troubleshooting

| Problem                                        | Solution                                                                                                                               | Time to Fix  |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| Mo misidentifies a column                      | Follow up in the Mo chat describing the correct column (e.g., *"The date column is column C, not B"*)                                  | 2 minutes    |
| SKUs in the output don't match Moselle catalog | Check your catalog for matching SKUs; contact support for a bulk SKU mapping                                                           | 5–10 minutes |
| Upload fails — `order_#` column is empty       | Ask Mo to prefill the column: *"Prefill the order\_# column with sequential PO numbers"*, then re-download and upload                  | 2 minutes    |
| Upload fails — duplicate SKUs in file          | Ask Mo to consolidate rows: *"Combine duplicate SKUs into one row per SKU, summing quantities and sales"*, then re-download and upload | 2 minutes    |
| Upload fails in Data Room                      | Ensure the file is CSV or XLSX and under the size limit; re-export from Mo if needed                                                   | 2 minutes    |
| Data not appearing after upload                | Wait up to 24 hours; if still missing after that, contact support                                                                      | —            |
| Unsure which channel to select                 | Check your export source — it should indicate the retailer or channel the sales came from                                              | 1 minute     |

***

## Related Guides

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

{% content-ref url="/pages/ja1XQcZPneh77RB6KNv3" %}
[Build your forecast with Mo](/planning-and-execution/forecasting/build-your-forecast-with-mo.md)
{% endcontent-ref %}

{% content-ref url="/pages/ZqW13VR5LMwgmjbdhqwg" %}
[How to Upload Inventory](/getting-started/onboarding/manual-data-uploads/how-to-upload-inventory.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.moselle.io/getting-started/onboarding/manual-data-uploads/how-to-upload-sales-data.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
