# COGS Report

{% hint style="info" %}
**Quick Answer:** A COGS report breaks your total Cost of Goods Sold into individual SKUs, cost components, channels, and time periods — so you can see exactly what drove your gross margin. In Moselle, Mo can build one from your live data using plain-language prompts in under 10 minutes.
{% endhint %}

## What is a COGS Report?

**A COGS (Cost of Goods Sold) report** is the supporting financial schedule behind the single COGS line on your P\&L. Rather than showing one blended number, it breaks your total product cost into individual SKUs, cost components, channels, and time periods — so you can see exactly what drove your gross margin.

For ecommerce businesses, COGS is far broader than just the factory invoice. Your **true landed cost per unit** includes multiple layers tracked at the per-SKU level:

* Wholesale or manufactured product cost (FOB/ex-works)
* Inbound freight — ocean, air, and drayage
* Customs duties and tariffs
* Primary and secondary packaging
* Labeling, prep, and inspection
* Warehousing allocation
* Return processing

> **Where the P\&L answers "what was our margin?", the COGS report answers "why, and which SKUs caused it?"**

### The DTC P\&L Structure

The standard DTC ecommerce P\&L is structured as a waterfall — and your COGS report is the engine behind it:

| P\&L Line                 | What It Represents                                 |
| ------------------------- | -------------------------------------------------- |
| Net Revenue               | Total sales after discounts and returns            |
| − COGS                    | Product cost to source and land inventory          |
| **= Gross Profit**        | **Margin before delivery and marketing**           |
| − Fulfillment             | Pick & pack, outbound shipping, payment processing |
| **= Contribution Profit** | **Cash generated per sale before marketing**       |
| − Marketing               | Paid acquisition, influencer, promotions           |
| **= Operating Income**    | **True business profitability**                    |

{% hint style="warning" %}
Pick-and-pack fees, outbound shipping, and payment processing belong *below* Gross Margin in a "Cost to Deliver" block — not inside COGS. Including them in COGS inflates product cost and obscures true unit economics.
{% endhint %}

## Why It Matters — By Team

A great COGS report isn't a finance vanity project — every functional team uses it differently.

### Finance

* Calculate true gross margin and value inventory on the balance sheet
* Run variance analysis and prepare board and investor reporting
* Track inventory turns — a brand turning inventory 6× per year has dramatically healthier cash than one turning 2×

### Operations & Supply Chain

* Detect cost creep — recalculate landed cost per SKU quarterly using actual invoices
* Investigate any SKU whose landed cost moved more than 5%
* A $1.50 reduction in COGS on a 2,000-unit/month product equals $36,000 in annual margin

### Merchandising

* Make product mix and markdown decisions based on per-SKU contribution margin
* Identify which SKUs are subsidizing others — sometimes the right move is to de-prioritize a bestseller

### Marketing

* The CAC:LTV equation is meaningless without accurate COGS
* An LTV of $240 with 60% gross margin is actually $144 in contribution — a reported 2.4:1 LTV:CAC becomes a marginal 1.44:1
* Teams setting product-level ROAS targets off headline Shopify margin are flying blind

### Founders & Executives

* Unit economics, pricing strategy, and fundraising all depend on accurate COGS
* GAAP-ready financials with accurate COGS are table stakes for any institutional funding round

## Core Report Structure

A best-in-class COGS report is organized at the SKU/product level. Every SKU needs a two-stage cost build:

* **Landed Cost** — what hits the balance sheet as inventory and flows through COGS at sale
* **Fulfilled Cost** — variable delivery costs layered on top, flowing through Contribution Margin

### Product Identifiers

Every row in your report is anchored to a specific product. Required fields:

* SKU Code
* Product Name
* Product Category / Product Line
* Variant (size, color, etc.)
* Supplier / Country of Origin

### Unit Economics

| Metric              | Formula                      | What It Tells You                             |
| ------------------- | ---------------------------- | --------------------------------------------- |
| Unit Cost           | COGS per unit (fully landed) | True cost to produce or acquire one unit      |
| Unit Price          | Selling price per unit       | ASP by channel (DTC vs. wholesale)            |
| Gross Margin / Unit | Unit Price − Unit Cost       | Absolute dollar profit per unit sold          |
| Gross Margin %      | (Price − Cost) / Price × 100 | Efficiency of margin; benchmark ≥ 50% for DTC |

### Volume Metrics

* **Units Sold** — number of units sold during the reporting period
* **Units on Hand** — current inventory units as of the report date

### Financial Metrics

| Metric                            | Formula                    | What It Tells You                            |
| --------------------------------- | -------------------------- | -------------------------------------------- |
| Total COGS                        | Units Sold × Unit Cost     | Total cost of goods sold in the period       |
| Total Revenue                     | Units Sold × Unit Price    | Total sales revenue for the period           |
| Total Gross Profit                | Total Revenue − Total COGS | Realized profit from units sold              |
| **TIV** (Total Inventory Value)   | Units on Hand × Unit Cost  | Capital tied up in inventory at cost         |
| **TRV** (Total Retail Value)      | Units on Hand × Unit Price | Potential revenue value of current inventory |
| **Potential Margin in Inventory** | TRV − TIV                  | Unrealized profit locked in inventory        |

{% hint style="info" %}
**TIV and TRV together give you a powerful lens on cash efficiency.** TIV shows how much capital is locked up in your warehouse today. TRV shows what that inventory could generate if sold at full price. The gap between them is your inventory's unrealized earning potential.
{% endhint %}

### Optional Context Metrics

* **Sell-Through Rate %** — percentage of available inventory sold in the period
* **Days of Supply / Inventory Turns** — how quickly inventory moves through the warehouse
* **Channel / Customer Breakdown** — segmentation by sales channel (DTC, wholesale, marketplace)
* **Date Range** — reporting period (e.g., Q4 2024, January 2025)

## Example Report Layout

Below is a simplified example showing how the data is structured at the SKU level:

| SKU       | Product Name     | Unit Cost | Unit Price | Units Sold | Units on Hand | TIV         | TRV         | GM %      |
| --------- | ---------------- | --------- | ---------- | ---------- | ------------- | ----------- | ----------- | --------- |
| SKU-001   | Moisturizer 50ml | $8.50     | $24.00     | 450        | 1,200         | $10,200     | $28,800     | 64.6%     |
| SKU-002   | Serum 30ml       | $12.00    | $38.00     | 320        | 800           | $9,600      | $30,400     | 68.4%     |
| SKU-003   | Toner 150ml      | $5.20     | $18.00     | 610        | 2,100         | $10,920     | $37,800     | 71.1%     |
| **TOTAL** |                  |           |            | **1,380**  | **4,100**     | **$30,720** | **$97,000** | **68.0%** |

## Common Pitfalls to Avoid

COGS errors are almost never about the formula — they are almost always about timing, allocation, and data mismatches.

### 1. Forgetting the Full Landed Cost Stack

Most brands start with just the factory invoice. Your true landed cost per unit includes all of the following — missing any one layer will systematically understate COGS:

* FOB unit cost (what you paid the supplier)
* Inbound freight (ocean, air, drayage) — allocate by weight for dense goods, by cube for bulky goods
* Customs duties and tariffs
* Brokerage and port fees
* 3PL inbound receiving fee
* Primary packaging that travels with the unit

### 2. Bundles and Kits

Bundles are a common source of COGS inaccuracy. When a bundle sells, component SKUs need to be decremented and their costs summed correctly.

* Always use a Bill of Materials (BOM) approach: sum component landed costs into the bundle SKU
* Discount allocation on bundles must be split proportionally across components, or per-SKU margin becomes meaningless

{% content-ref url="/pages/0sowm0sWUyaI8H6H5qea" %}
[Bills of Materials (BOMs)](/operations/catalog/bill-of-materials.md)
{% endcontent-ref %}

### 3. Returns and Refunds

Returns require different accounting treatment depending on the condition of the unit returned:

* **Resellable returns** → reverse COGS at original cost
* **Damaged / unsellable returns** → do not reverse COGS; recognize a write-off to a spoilage account
* **B-stock / refurb** → add back at Net Realizable Value; book the cost-to-NRV gap as a write-down
* **Best practice:** accrue a returns reserve at the time of sale (typically 2–8% of revenue for apparel, 1–3% for beauty/CPG)

### 4. Costing Method Consistency

The method you choose matters less than applying it consistently across all systems. Common problem: your storefront uses last-cost, your 3PL uses FIFO, and your accounting system uses Weighted Average — producing irreconcilable margins.

* **FIFO** — global default; mirrors physical flow; inflates reported margin in rising-cost environments
* **Weighted Average (WAC)** — smooths volatility; preferred for high-velocity brands with frequent small POs

### 5. Blending Channels

DTC and wholesale have fundamentally different margin profiles (DTC \~75% gross vs. wholesale \~30%). Blending them produces a meaningless average that hides underperforming channels. Always segment your COGS report by channel.

## Building Your COGS Report with Mo

**Time Required:** 10–15 minutes **Difficulty:** Beginner

Mo is Moselle's AI assistant, connected directly to your live data. Once you understand the structure above, Mo can generate, interrogate, and adjust your COGS report through natural language.

{% stepper %}
{% step %}

### Generate Your Initial Report

Open Mo and start with a prompt that specifies your date range and the fields you need:

> "Generate a COGS report for \[date range] at the SKU level, including unit cost, unit price, units sold, units on hand, total COGS, total revenue, gross profit, TIV, TRV, and gross margin %."

Mo will return a structured table with all core fields populated from your live data.
{% endstep %}

{% step %}

### Review and Validate

Before using the report for decisions, validate the key figures against your known sources. Mo can help you spot anomalies.

> "Flag any SKUs where gross margin % falls below 40% or where units on hand have not moved in 60+ days."

Cross-check total COGS against your accounting system (QBO/Xero COGS account) to confirm the numbers align.
{% endstep %}

{% step %}

### Adjust for Fully Landed Cost

If your unit cost reflects only FOB cost, ask Mo to apply landed cost adjustments. Provide your freight and duty rates and Mo will recalculate.

> "Recalculate unit cost for all SKUs in \[category] by adding $0.65 inbound freight per unit, 7.5% duty, and $0.20 brokerage. Show me the updated gross margin % alongside the original."
> {% endstep %}

{% step %}

### Segment by Channel or Category

Once the base report is validated, use Mo to slice the data in the ways that matter most for your decisions.

> "Break down the COGS report by sales channel (DTC vs. wholesale). Show total revenue, total COGS, gross margin %, TIV, and TRV for each channel."
> {% endstep %}

{% step %}

### Identify Margin Opportunities

With a validated report in hand, Mo can help you identify your highest-leverage actions.

> "Show me the top 10 SKUs by total gross profit and the bottom 10 by gross margin %. For the bottom 10, calculate what unit cost reduction would be needed to bring them above a 50% margin threshold."
> {% endstep %}

{% step %}

### Export and Schedule

Once your report is set up, Mo can help you export to your preferred format and set up a recurring refresh cadence.

> "Export this COGS report as a CSV with all SKU-level fields. Then set this up to refresh automatically on the 5th of each month using the prior month's data."

{% hint style="success" %}
A monthly automated COGS refresh, reviewed on Day 5, gives you a consistent rhythm for pricing, buying, and ad allocation decisions.
{% endhint %}
{% endstep %}
{% endstepper %}

## Adjustments and Advanced Use Cases

### Applying a Returns Reserve

Build a returns reserve into your per-unit cost at the time of sale, rather than waiting for returns to occur.

* Typical reserve rates: 2–8% of revenue for apparel, 1–3% for beauty/CPG, 20–30% for swimwear
* Add this to Fulfilled Cost (not Landed Cost) so it flows through Contribution Margin

> "Apply a 5% returns reserve to all SKUs in the Apparel category. Show me the adjusted contribution margin before and after the reserve."

***

### Tariff and Duty Recalculation

When duty rates change, you may need to update your COGS report mid-year.

* Identify all relevant SKUs using the Country of Origin field in your product catalog
* Update the duty rate for affected product categories
* Note: existing inventory in your warehouse retains its original landed cost under FIFO — only new POs use the updated rate

> "Show me all SKUs with country of origin = China. For each, simulate the landed cost impact if duty increases by 15 percentage points. What is the gross margin % under the new rate?"

***

### Period Comparisons and Variance Analysis

One of the most powerful uses of your COGS report is tracking how costs have changed over time.

> "Compare COGS by SKU for Q4 2024 vs. Q1 2025. Flag any SKU where unit cost increased by more than 5% and show me the total margin impact in dollars."

***

### Inventory Health Scoring

Combine your COGS data with inventory aging to identify at-risk stock before it becomes a write-down problem.

> "Show me all SKUs with more than 90 days of supply on hand based on current sell rate. For each, show TIV, TRV, and what the inventory would need to sell at to recover full cost."

## Industry Benchmarks

Use these benchmarks to validate your report and assess the health of your margins. These figures represent typical ranges across DTC ecommerce brands with 3PL fulfillment.

| Metric                               | Typical Range               | Best-in-Class |
| ------------------------------------ | --------------------------- | ------------- |
| Gross Margin % (DTC)                 | 55–70%                      | > 70%         |
| Gross Margin % (Wholesale)           | 25–35%                      | > 40%         |
| Contribution Margin (CM3)            | 15–25%                      | 25–35%        |
| Per-unit COGS vs. manufacturing cost | 15–25% higher               | < 15% premium |
| Return Rate — Beauty/CPG             | 1–3%                        | < 2%          |
| Return Rate — Apparel                | 20–30%                      | < 20%         |
| Inventory Shrinkage                  | 0.5–1.0% of inventory value | < 0.5%        |

{% hint style="info" %}
**A healthy DTC contribution margin (CM3) is ≥ 20%.** Best-in-class brands achieve 25–35%. If you are below 20% after fully loading COGS, fulfillment, and returns — your unit economics need attention before scaling ad spend.
{% endhint %}

## Getting Started: Action Plan

| Step | Action                                                                                              |
| ---- | --------------------------------------------------------------------------------------------------- |
| 1    | Audit your product catalog — confirm every SKU has a fully landed unit cost, not just FOB           |
| 2    | Run your first Mo prompt to generate a base COGS report for the last completed month                |
| 3    | Validate the output against your accounting system (QBO/Xero COGS account)                          |
| 4    | Flag SKUs below 40% gross margin and SKUs with > 90 days of supply on hand                          |
| 5    | Set up a monthly refresh cadence — target Day 5 of each month using prior month data                |
| 6    | Review with your founder/CFO and use findings to drive pricing, buying, and ad allocation decisions |

## Frequently Asked Questions

<details>

<summary>What is the difference between COGS and fulfillment cost?</summary>

COGS covers the cost to source and land inventory — from supplier invoice through to your warehouse door. Fulfillment covers the cost to deliver a sold unit to the customer: pick and pack, outbound shipping, and payment processing. The distinction matters because it separates product economics from delivery economics, giving you cleaner visibility into both.

</details>

<details>

<summary>What is TIV and TRV?</summary>

TIV (Total Inventory Value) is the cost value of your on-hand inventory — how much capital is locked in your warehouse. TRV (Total Retail Value) is what that inventory could generate if sold at full price. The gap between TRV and TIV is your unrealized earning potential. Together they give you a clear picture of cash efficiency and markdown risk.

</details>

<details>

<summary>Should I include return costs in COGS or Contribution Margin?</summary>

Returns reserve belongs in Contribution Margin (fulfilled cost), not Landed Cost / COGS. This keeps your product economics clean and separates the cost to source inventory from the cost to deliver and recover it. Only apply a COGS adjustment for units that are permanently written off as damaged or unsellable.

</details>

<details>

<summary>How often should I refresh my COGS report?</summary>

Monthly is the standard cadence for most brands. Run the report on Day 5 of the month using the prior month's data, once all orders have closed and synced. For high-velocity SKUs or periods with significant cost changes (new POs, tariff updates), a mid-month spot check is worthwhile.

</details>

<details>

<summary>What costing method does Moselle use?</summary>

Moselle supports Weighted Average Cost (WAC) and FIFO. WAC smooths cost volatility across POs and is preferred for brands with high order frequency. FIFO mirrors physical inventory flow and is the global accounting default. Whichever you choose, apply it consistently across all connected systems to avoid margin reconciliation issues.

</details>

## Related Guides

{% content-ref url="/pages/BLYuS7JNKRRnLCvAu8sJ" %}
[Weekly Sales Summary](/analytics/reporting/mo-reports/mo-standard-reports/weekly-sales-summary.md)
{% endcontent-ref %}

{% content-ref url="/pages/QFOlRTMFC2YgsdzX5qji" %}
[Inventory Coverage](/analytics/reporting/mo-reports/mo-standard-reports/inventory-coverage.md)
{% endcontent-ref %}

{% content-ref url="/pages/ZiMAO4xUpdTQI2yoZWu5" %}
[Weeks of Supply (WOS) Report](/analytics/reporting/mo-reports/mo-standard-reports/wos-report.md)
{% endcontent-ref %}

{% content-ref url="/pages/0sowm0sWUyaI8H6H5qea" %}
[Bills of Materials (BOMs)](/operations/catalog/bill-of-materials.md)
{% endcontent-ref %}

{% content-ref url="/pages/DAsnRIRTbbjM6bgR0RLM" %}
[Save Your Favourite Prompts](/mo/tips/save-favourite-prompts.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/cogs-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.
