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

# Managing Inventory

## Inventory Updates

Keeping your inventory accurate in Moselle is crucial for reliable forecasting and production planning. How you update inventory depends on your warehouse type.

### Synced Warehouses

For warehouses connected via integrations (e.g., Shopify, Amazon), inventory updates automatically every day. No manual action is required unless a sync fails.

### Manual Warehouses (Moselle Managed)

For manual warehouses, you must upload inventory snapshots regularly.

**To upload an inventory snapshot:**

1. Navigate to the **Inventory** page and click the **Warehouses** tab.
2. Open the manual warehouse you want to update.
3. On the **Stock Levels** tab, click **Update Inventory**.
4. Prepare a CSV with your counts. **Required columns:** `sku`, `available` (a column named `amount` works too).
5. Drag your file in, or click **Upload a file** (CSV, up to 10MB).
6. Add a reason for the inventory change so the update is easy to trace later, then confirm.

{% hint style="warning" %}
**Important:** Ensure your CSV `sku` values match the SKUs in Moselle exactly (case-sensitive). Mismatched SKUs will be ignored.
{% endhint %}

{% hint style="warning" %}
**A snapshot replaces the warehouse's levels — it doesn't merge with them.** Items missing from the file lose their levels. Always upload a complete count for the warehouse, or merge your partial file into the current levels first.
{% endhint %}

### Let Mo Prepare the Update

If your count didn't arrive in the right shape — a 3PL export, a cycle-count spreadsheet, several files — you can attach it to Mo on the warehouse page and let Mo map it, check the SKUs, and show you the update before anything is written.

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

### What Happens After You Upload

* Uploads for a warehouse are applied **in the order you submit them**, so a newer count can never be overtaken by an older one that was still processing.
* You get a **notification when processing finishes**, and another one — with the reason — if the file was rejected.
* A file Moselle can't read is **rejected rather than partially applied**. A malformed or unmatched file leaves your existing levels alone instead of emptying the warehouse.
* Every upload is recorded on the warehouse's **History** tab, along with the note you entered.

## Carry Forward Logic

Moselle uses a "Carry Forward" system to ensure your planning never breaks due to missing data.

* **How it works:** If an inventory update (sync or manual upload) does not happen for a specific day, Moselle automatically uses the **last known available quantity** for that item at that location.
* **Example:** If you upload a snapshot on Monday showing 100 units, and don't upload again until Friday, Moselle assumes you have 100 units (minus any forecasted sales if applicable) for Tuesday, Wednesday, and Thursday.

## Preventing Data Drift

"Data Drift" occurs when Moselle's inventory numbers diverge from your physical stock reality over time.

**Best Practices to avoid Drift:**

* **Regular Uploads:** For manual warehouses, upload a new snapshot at least **weekly**, or whenever a significant stock movement (receiving a shipment, large wholesale order) occurs.
* **Check Sync Status:** For synced warehouses, periodically verify that the "Last Updated" date is current. If a sync is stuck, try re-authenticating the integration or contacting support.
* **Audit "Carry Forward" Data:** If you see flat inventory lines in your reports, it often means data is being carried forward. Verify if this is accurate or if a new upload is needed.

## Troubleshooting Upload Errors

| Error Message                                                                    | Common Cause                                                                         | Solution                                                                                                                |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| `SKU not found`                                                                  | The SKU in your CSV doesn't match any item in Moselle.                               | Check for typos, extra spaces, or case sensitivity in your CSV.                                                         |
| `Invalid file format`                                                            | Uploading an Excel (.xlsx) file instead of CSV.                                      | Save your file as **CSV (Comma delimited)** before uploading.                                                           |
| `Zero stock`                                                                     | Uploading a file with blank "Available" columns.                                     | Ensure every row has a number (use 0 for out of stock).                                                                 |
| `The file contains rows with more columns than headers`                          | Unescaped commas in data, causing rows to have more columns than headers.            | Ensure all fields containing commas (e.g., numbers like `1,000` or names) are enclosed in quotes, or remove the commas. |
| `This location is synced from an external source and cannot be updated manually` | The warehouse is fed by an integration, which is the source of truth for its levels. | Make the change in the connected system — it arrives on Moselle's next sync.                                            |
| No error, but nothing changed                                                    | The file was rejected because no rows matched existing items.                        | Check the `sku` column against your catalog, then re-upload.                                                            |
