# Monthly Sales Performance Report

{% hint style="info" %}
**Quick Answer:** A monthly sales performance report is an ecommerce rollup that combines revenue, profit, and customer behavior in one view so you can see what changed, why it changed, and whether growth is healthy. In Moselle, you can generate one instantly by asking Mo.
{% endhint %}

## What is a Monthly Sales Performance Report?

**A monthly sales performance report** is a recurring rollup that summarizes an ecommerce brand's sales results for a given month across revenue, profitability, customer behavior, and operations — broken down by channel, category, and SKU.

Unlike a single topline revenue number, a proper monthly report combines:

* **Topline performance** — net revenue, orders, units, and AOV
* **Profitability** — gross margin, discount rate, returns rate
* **Customer behavior** — new vs. returning revenue, repeat purchase rate
* **Channel and product mix** — Shopify, Amazon, wholesale, paid social, by category and SKU
* **Operational signals** — refunds, stockouts, shipping delays

It's the report a founder, ops lead, or planner uses to close the month with a clear picture of what worked, what didn't, and what to do next.

## Why is a Monthly Sales Performance Report Important?

For an ecommerce brand, a strong monthly rollup is the single most-used artifact for decision-making. It connects marketing spend, inventory, and finance with one shared source of truth.

### Key Benefits

* **See what actually changed.** Separate price, mix, channel, and volume effects instead of guessing why revenue moved.
* **Catch unhealthy growth early.** Revenue can climb while margin, repeat rate, or stockouts quietly erode the business.
* **Plan next month with confidence.** Compare actuals against forecast to adjust buys, promos, and ad spend before the next cycle.
* **Align the team.** One rollup that finance, marketing, ops, and planning all read from prevents conflicting numbers.

### Use Cases by Team

| Team                      | How They Use It                                                                       |
| ------------------------- | ------------------------------------------------------------------------------------- |
| **Founders / Leadership** | Month-end performance summary, board updates, fundraising narratives                  |
| **Planning & Inventory**  | Compare actuals vs. forecast, flag stockouts and lost sales, adjust replenishment     |
| **Marketing**             | Identify underselling categories, prioritize promos and paid spend before month-end   |
| **Finance**               | Track gross and contribution margin, discount and return rates, channel profitability |
| **Operations**            | Spot refund spikes, shipping delays, and fulfillment issues affecting repeat behavior |

## What Makes a Good Monthly Sales Performance Report?

A strong rollup is consistent, layered, and operationally honest. Topline numbers stay simple; detail lives in drilldowns that use the same definitions every month.

### Key Sections and Fields

Structure the report so each layer answers a different question.

| Section                  | Metrics to Include                                                                           |
| ------------------------ | -------------------------------------------------------------------------------------------- |
| **Topline**              | Net revenue, gross sales, orders, units sold, AOV                                            |
| **Profitability**        | Gross margin, contribution margin, discount %, returns %                                     |
| **Customer**             | New vs. returning revenue, repeat purchase rate, cohort retention by first-purchase month    |
| **Channel & Product**    | Revenue by channel (Shopify, Amazon, wholesale, paid social), by category, by SKU, by region |
| **Operations**           | Refunds, stockouts, lost sales from out-of-stock, fulfillment/shipping delays                |
| **Forecast vs. Actuals** | Projected vs. actual units and revenue, gap by category, on-pace status                      |

### Formatting Best Practices

* **Lead with a 3–5 bullet executive summary** — the metrics that moved most, plus the one action for next month.
* **Keep the top layer to 6–8 KPIs.** Push everything else into drilldowns.
* **Show comparisons, not just numbers.** Every metric should be paired with last month, last year, and forecast.
* **Use consistent definitions month over month.** Net revenue, returning customer, and stockout should mean the same thing in every report.
* **Rank categories and SKUs by gap, not alphabetically.** Surface what needs action first.

### Common Gotchas

These are the issues that quietly break monthly rollups for ecommerce brands:

* **Timezones.** Shopify, Amazon, and ad platforms each report in different timezones. Pick one (usually the brand's HQ timezone) and convert everything to it before rolling up — otherwise month-end orders land in the wrong month.
* **Bundles and kits.** A bundle is one order line but contains multiple SKUs. Decide upfront whether unit counts roll up to the bundle SKU or to the component SKUs, and apply it consistently.
* **Refunds and cancellations.** Refunds issued in May for April orders need to be attributed to the original order month, not the refund month, for net revenue and margin to be accurate.
* **Mixing raw and normalized metrics.** Don't put gross sales and net revenue side-by-side without labeling clearly — it leads to wrong conclusions.
* **Gift cards and store credit.** These often inflate gross sales when issued and again when redeemed. Pick one recognition point.
* **Channel double-counting.** Orders that flow from Amazon into a Shopify reporting tool can appear in both channels if not deduped.
* **Stockouts that hide demand.** Sales of zero on an out-of-stock SKU isn't low demand — it's lost sales. Flag stockout days separately.

## How to Build a Monthly Sales Performance Report

A complete rollup pulls from several systems, then summarizes by month first and allows drilldowns by channel, category, and cohort using the same definitions.

### Data You Need

| Source                                     | What It Provides                                           |
| ------------------------------------------ | ---------------------------------------------------------- |
| **Sales platform** (Shopify, Amazon, etc.) | Orders, units, gross sales, discounts, refunds             |
| **Product catalog**                        | SKU, category, bundle composition, cost of goods           |
| **Customer data**                          | First-purchase date for cohort and new-vs-returning splits |
| **Inventory system**                       | Stockout days, on-hand by SKU, lost-sales estimates        |
| **Forecast / plan**                        | Monthly projected units and revenue by category            |
| **Ad & marketing platforms** (optional)    | Spend by channel for contribution margin                   |

### Build Approach

1. **Define your metrics once** — net revenue, returning customer, stockout — and reuse the definitions every month.
2. **Roll up to the month first** at the order or order-line level, normalizing for timezone and bundles.
3. **Layer drilldowns** by channel, category, SKU, and cohort using those same definitions.
4. **Compare against forecast and prior periods** so every KPI has context.
5. **Close with a written summary** of what moved, why, and the recommended action.

Building this manually each month in a spreadsheet or SQL is doable but slow. Most ecommerce teams spend a full day or more closing the month — which is what Moselle's Mo automates.

## How to Get a Monthly Sales Performance Report Instantly in Moselle with Mo

Mo generates your full monthly sales performance report in one prompt — topline, category breakdown, forecast vs. actuals, and marketing recommendations to close gaps before month-end.

### Before You Start

| Requirement                               | Why It Matters                                            |
| ----------------------------------------- | --------------------------------------------------------- |
| A confirmed forecast is loaded in Moselle | Mo needs a monthly projection to compare actuals against  |
| Sales data is synced and up to date       | Ensures month-to-date actuals reflect current performance |
| Products are organized by category        | Required for the category-level breakdown                 |

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

### The Report Prompt

Copy and send this prompt to Mo. It generates the complete report in one response.

```
Generate my Monthly Sales Performance Report for [current month].

Include the following in one report:

1. Top-Level Monthly Sales Summary
   - My total projected vs. actual sales units month-to-date
   - The unit gap (raw number and % variance)
   - Whether I am on track to hit my monthly projection by end of month based on current sales pace

2. Category Breakdown
   - Projected vs. actual sales units for [current month] broken down by product category
   - Which categories are underselling vs. projection, ranked by unit gap
   - Which categories are overselling vs. projection

3. Mo's Marketing Recommendations
   - Based on the underselling categories identified above, what marketing actions do you recommend to close the gap before end of month?
   - For each recommendation, indicate which category it targets and the estimated unit impact if actuals are available
   - Close with a 3–5 bullet summary of this month's performance and top actions for a leadership update
```

### Save and Re-Run Every Month

Once Mo generates your report, save it so you can re-run it in seconds every month.

{% stepper %}
{% step %}

### Ask Mo to Consolidate the Report into a Single Prompt

At the end of your report session, send this to Mo:

```
Can you take everything you just ran — the top-level monthly sales summary, category breakdown, and marketing recommendations — and consolidate it into a single reusable prompt I can save and run every month?
```

Mo will return one clean, consolidated prompt that captures the full report.
{% endstep %}

{% step %}

### Save it as a Favourite Prompt

1. Click **Save as Favourite** on Mo's response
2. Give it a clear name — for example: `Monthly Sales Performance Report`
3. It will now appear in your Favourite Prompts for one-click access
   {% endstep %}

{% step %}

### Re-Run it Each Month

1. Open your **Favourite Prompts** in Mo
2. Select **Monthly Sales Performance Report**
3. Update `[current month]` to the relevant month
4. Send — Mo will generate the full report instantly

{% hint style="success" %}
Your complete report — topline summary, category breakdown, and marketing recommendations — is ready to review and share.
{% endhint %}
{% endstep %}
{% endstepper %}

### Recommended Check-In Cadence

| Timing             | What to Focus On                                                              |
| ------------------ | ----------------------------------------------------------------------------- |
| **Start of month** | Confirm your forecast is loaded and establish your baseline projection        |
| **Mid-month**      | Run the full report — identify gaps early enough to act                       |
| **Final week**     | Re-run to prioritize last-minute marketing pushes before month close          |
| **Month close**    | Run the final report for leadership and feed learnings into next month's plan |

### Frequently Asked Questions

<details>

<summary>What data does Mo use to calculate the unit gap?</summary>

Mo compares your cumulative month-to-date actual sales units against the monthly projection loaded in your Moselle forecast. The gap is the difference between where you are and where your projection says you should be at this point in the month.

</details>

<details>

<summary>How does Mo handle bundles and kits in the rollup?</summary>

Mo follows your product catalog setup in Moselle. If your bundles are configured to roll up to component SKUs, unit counts will reflect components; if they roll up to the bundle SKU, counts will reflect bundles. Confirm your bundle configuration before running the report to avoid double-counting.

</details>

<details>

<summary>What timezone does the report use?</summary>

The report uses the timezone configured for your Moselle workspace. Make sure your sales integrations are aligned to the same timezone so month-end orders aren't misattributed.

</details>

<details>

<summary>Why is my category breakdown missing some categories?</summary>

Mo can only break down categories that are set up in your product catalog. If a category is missing, check that your products are correctly categorized in Moselle before running the report.

</details>

<details>

<summary>How specific are Mo's marketing recommendations?</summary>

Recommendations are based on the unit gaps Mo identifies in your data. The more complete your sales and forecast data, the more targeted the recommendations. Mo will indicate which category each recommendation targets and estimated unit impact where data is available.

</details>

<details>

<summary>Can I run this report for a past month?</summary>

Yes — replace \`\[current month]\` in the prompt with the month you want to analyze. Mo will pull historical actuals and compare them against the forecast projection for that period.

</details>

<details>

<summary>Can I add channel or customer cohort breakdowns?</summary>

Yes — extend the prompt to ask for revenue by channel or new-vs-returning customer splits. Mo will include any cuts your connected data supports.

</details>

## Related Guides

{% content-ref url="/pages/DAsnRIRTbbjM6bgR0RLM" %}
[Save Your Favourite Prompts](/mo/tips/save-favourite-prompts.md)
{% endcontent-ref %}

{% content-ref url="/pages/aYMGZMjVZa0NMZNaCeKo" %}
[Forecast vs Actuals](/analytics/reporting/mo-reports/mo-standard-reports/forecast-vs-actuals.md)
{% endcontent-ref %}

{% content-ref url="/pages/BBgIudJQTmGGMuALbllS" %}
[Monthly Rollup](/analytics/reporting/moselle-reports/sales-reports/monthly-rollup.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/analytics/reporting/mo-reports/mo-standard-reports/monthly-sales-performance-report.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.
