> 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/catalog/product-setup/custom-attributes.md).

# Adding Custom Attributes

{% hint style="info" %}
**Quick Answer:** Custom attributes let you store any extra data on a product — including planning constraints like MOQ, lead times, and safety stock. Create an attribute on one product, export your catalog to fill in values for all SKUs via CSV, then re-import with overwrite enabled. Your next replenishment plan uses those per-product values automatically.
{% endhint %}

Custom attributes let you add structured data to your products beyond the standard fields. Use attributes to organize your catalog, filter items on the planning page, and — most importantly — store per-product planning constraints that improve replenishment accuracy.

**Time Required:** 15–30 minutes (depending on catalog size)\
**Difficulty:** Beginner\
**Who can do this:** Admin or Manager role

## How attributes work

{% hint style="warning" %}
**Attributes are account-wide.** When you create an attribute on any product, that attribute becomes available for all products in your Moselle account. You only need to create each attribute once.
{% endhint %}

### Planning attributes (special meaning in Moselle)

These four attributes are recognized by the replenishment engine. Per-product values override the global defaults set when creating a plan — if no value is set on a product, Moselle falls back to the plan-level defaults.

| Attribute                | Attribute name to use  | What it controls                                                                      |
| ------------------------ | ---------------------- | ------------------------------------------------------------------------------------- |
| **MOQ**                  | `moq`                  | Minimum order quantity — Moselle won't recommend ordering fewer units than this value |
| **Transit Lead Time**    | `transit_lead_time`    | Days from order placement to warehouse arrival — shifts reorder timing forward        |
| **Production Lead Time** | `production_lead_time` | Days your supplier needs to manufacture the order before it ships                     |
| **Safety Stock**         | `safety_stock`         | Days of inventory buffer to maintain above your demand forecast                       |

### Other common attributes

| Attribute    | Example values                     | Use case                       |
| ------------ | ---------------------------------- | ------------------------------ |
| Product Line | "Summer 2024", "Core Collection"   | Filter forecasts by collection |
| Product Type | "T-Shirt", "Hoodie", "Accessories" | Group similar items            |
| Material     | "Cotton", "Polyester", "Blend"     | Production planning grouping   |
| Grade        | "A", "B", "C"                      | SKU tier segmentation          |

## Add an attribute to a product

1. Open the item details page for any product
2. Scroll to the **Custom Attributes** section
3. Click **+ Add**
4. In the dropdown, either:
   * Select an existing attribute from the list
   * Type a new attribute name and click **Add New**
5. Enter the value for this product
6. Click **Save**

<figure><img src="/files/Fb3sUYCVp88a97Bl2Crt" alt=""><figcaption><p>Adding a custom attribute to a product</p></figcaption></figure>

{% hint style="info" %}
Once you create a new attribute on one product, it becomes available to assign on any other product in your catalog.
{% endhint %}

## Set up planning attributes across your whole catalog (bulk workflow)

Adding MOQ, lead times, and safety stock one product at a time isn't practical for large catalogs. Use the export → fill → re-import workflow to set values for all your SKUs at once.

### Step 1: Create the attributes on one product

You only need to do this once per attribute — as soon as it exists on one product, it's available account-wide.

1. Open any product in your catalog
2. Scroll to **Custom Attributes** and click **+ Add**
3. Type `moq` and select **Add New**
4. Enter any placeholder value (e.g., `100`) and click **Save**
5. Repeat for each remaining planning attribute:
   * `transit_lead_time`
   * `production_lead_time`
   * `safety_stock`

{% hint style="success" %}
All four attributes are now available for every product. The bulk import in the next steps will populate the actual values — you don't need to visit each product individually.
{% endhint %}

### Step 2: Export your product catalog

Exporting after creating the attributes generates a CSV with your new attribute names as column headers, pre-formatted and ready to fill in.

1. Go to **Catalog** in the left nav
2. Select the **Products** tab
3. Click **Export** (top right)
4. Open the downloaded CSV

You'll see `moq`, `transit_lead_time`, `production_lead_time`, and `safety_stock` as column headers alongside your standard product fields.

### Step 3: Fill in values for your products

Add the appropriate value for each product row in the CSV:

| Attribute              | Example values       | Unit            |
| ---------------------- | -------------------- | --------------- |
| `moq`                  | `100`, `500`, `1000` | Number of units |
| `transit_lead_time`    | `7`, `14`, `21`      | Days            |
| `production_lead_time` | `30`, `45`, `60`     | Days            |
| `safety_stock`         | `14`, `30`, `45`     | Days of cover   |

Leave a cell blank for any product where you want to fall back to the plan-level default for that field.

{% hint style="warning" %}
**Attribute names are case-sensitive.** Do not rename the column headers — they must exactly match the attribute names you created in Step 1.
{% endhint %}

### Step 4: Re-import with overwrite enabled

1. Go to **Catalog > Products > Import**
2. Upload your completed CSV
3. Check **Overwrite Products with Matching SKUs**
4. Click **Import Products**
5. Spot-check a few items after import to confirm values saved correctly

See [Import Items via CSV](/operations/catalog/adding-products/import-your-items.md) for full import instructions and troubleshooting.

### Step 5: Re-run your replenishment plan

With per-product constraints in place, your next plan will use the individual values you just set.

{% content-ref url="/pages/8QlNv4eTnXy8INtmWeyS" %}
[Create a Replenishment or Allocation Plan](/planning-and-execution/replenishment/core-workflow/create-a-production-plan.md)
{% endcontent-ref %}

When creating or rebuilding the plan, the **Transit Lead Times** and **Safety Stock** fields in plan settings still act as fallbacks for any products without an attribute value set.

## View all attributes in your account

To see every attribute currently defined:

1. Go to any item details page
2. Click **+ Add** under Custom Attributes
3. The dropdown lists all available attributes

## Attributes in forecasting and reports

Attributes appear as filter options on:

* The Planning page forecast views
* Custom reports in Analytics
* Export files when downloading your catalog

Use consistent attribute naming to get the most value from filtering and reporting.

## Attributes and CSV import

{% hint style="danger" %}
**Create attributes in Moselle before importing a CSV that includes them.** The import validates attribute columns against existing attributes in your account. Columns that don't match an existing attribute will cause the upload to fail silently.
{% endhint %}

## Frequently Asked Questions

### What if I only want to set MOQ for some products?

Leave the `moq` cell blank for any products where you want no minimum — Moselle will treat those as having no MOQ constraint.

### Can I update these values later?

Yes. Export your catalog again, update the values in the CSV, and re-import with overwrite. Then rebuild your replenishment plan to apply the changes.

### Do planning attributes affect my forecast?

No — MOQ, lead times, and safety stock are planning constraints only. They influence reorder recommendations in your replenishment plan but do not change your demand forecast.

### What's the difference between transit and production lead time?

**Production lead time** is how long your supplier takes to manufacture the order. **Transit lead time** is how long shipping takes after the order is ready. Moselle factors both into reorder timing.

### Why isn't my attribute column being imported?

Attribute names are case-sensitive and must match exactly. Check for extra spaces, and note that spaces in attribute names become underscores (e.g., "Lead Time" → `lead_time`).
