> For the complete documentation index, see [llms.txt](https://help.modelreef.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.modelreef.io/use-cases/saas-and-subscription-businesses/multi-product-saas-p-and-l.md).

# Multi-Product SaaS P\&L

This use case describes how to design a SaaS P\&L in Model Reef that supports multiple products or lines of business. The aim is to see both:

* Product level performance and unit economics.
* Consolidated SaaS P\&L for the whole company.

You will use branches, categories and variables to separate product streams while maintaining a clean group view.

## When to use this pattern

Use this pattern when:

* You sell more than one product or price tier and want separate P\&L visibility.
* You intend to allocate shared costs across products for contribution margin analysis.
* You need to understand which product lines drive growth, margin and cash.

If you only have one core product, you may still use this structure to prepare for future expansion.

## Architecture overview

The multi product P\&L structure has three main elements:

1. Branch structure
   * Branch per product or product family.
   * Optional head office or shared services branch.
2. Product specific variables
   * Revenue, COGS and product specific costs per branch.
   * Product specific drivers such as customer counts or usage metrics.
3. Shared costs and allocations
   * Central costs (for example general and administrative, platform engineering).
   * Allocation logic where you want to see product level contribution after shared costs.

Branches roll up into a consolidated group view automatically.

## Steps to implement

{% stepper %}
{% step %}

### Design the branch and category structure

Create a Model Reef model with branches, for example:

* `Group`
  * `Product A`
  * `Product B`
  * `Product C`
  * `Shared` (optional, for central functions)

Within each branch, use the same category structure for P\&L:

* Revenue
* COGS
* Gross profit
* Opex (sales and marketing, research and development, general and administrative)
* EBITDA and below

This consistency makes product-to-product comparison straightforward.
{% endstep %}

{% step %}

### Create product level revenue and COGS variables

In each product branch:

* Define Revenue variables such as:
  * `Revenue - MRR - Product A`
  * `Revenue - Add Ons - Product A`
* Link them to product specific drivers:
  * Customer counts for that product
  * ARPA or pricing for that product
  * Conversion or attach rates for add ons
* Define COGS variables such as:
  * `COGS - Hosting - Product A`
  * `COGS - Payment Fees - Product A`
  * `COGS - Third Party Licences - Product A`

Use the same naming pattern across branches so you can easily see how costs differ by product.
{% endstep %}

{% step %}

### Separate shared and product specific costs

Decide which costs are:

* Directly attributable to a product (for example product specific advertising, dedicated customer success)
* Shared across products (for example platform engineering, finance, HR)

Implement this by:

* Placing product specific Opex and Staff variables inside the relevant product branch
* Placing shared Opex and Staff variables inside the `Shared` or `Group` branch

This separation is important when computing contribution margin by product.
{% endstep %}

{% step %}

### Add optional cost allocation logic

If you want to see product level results after some or all shared costs are allocated:

* Decide on allocation keys, for example:
  * Revenue share
  * Gross profit share
  * Active customer share
* Create drivers in the Data Library for these keys, such as:
  * `Driver - Shared Cost Allocation - Revenue Share`
* In each product branch, create allocation variables such as:
  * `Allocated Shared Opex - Product A`
* Use formulas that:
  * Take the total shared cost variable
  * Multiply by the allocation key for that product

You can decide whether to leave the original shared cost in the `Shared` branch for transparency or treat allocations as the only view for decision making.

For more detail, see **Build Cross Branch Drivers and Dependencies**.
{% endstep %}

{% step %}

### Build product level and consolidated P\&L views

Use reports and dashboards to provide:

* Product level P\&L:
  * Revenue, COGS, gross margin
  * Product specific Opex
  * Optional allocated shared costs
  * Product contribution margin
* Consolidated SaaS P\&L at `Group` level:
  * Total revenue and gross profit
  * Total Opex, EBITDA and below

Create custom reports or dashboards grouped by branch to show product comparisons side by side.
{% endstep %}

{% step %}

### Integrate with SaaS metrics and valuation

Finally, connect the multi product P\&L to:

* MRR and ARR metrics per product, from your ARR/MRR forecasting structure
* CAC and LTV analysis by product where acquisition costs and retention differ
* Valuation models that either:
  * Use consolidated cashflows, or
  * Model product specific cashflows where required

Keep product specific drivers in the Data Library and ensure naming makes it easy to see which product each driver relates to.
{% endstep %}
{% endstepper %}

## Check your work

<details>

<summary>Checklist</summary>

* Product branches contain only variables relevant to that product.
* Shared costs are clearly identified and, if allocated, allocation logic is documented.
* Product level and group level P and L views reconcile to each other.
* Product comparisons help answer questions about growth, margin and investment priorities.

</details>

## Troubleshooting

<details>

<summary>Branches become cluttered</summary>

Introduce a consistent naming and subcategory pattern, and archive or merge rarely used variables.

</details>

<details>

<summary>Allocations make product results hard to interpret</summary>

Provide both pre-allocation and post-allocation views so stakeholders can see raw contribution and fully loaded results.

</details>

<details>

<summary>Difficult to align SaaS metrics to product P&#x26;L</summary>

Make sure customer, ARR and MRR drivers are segmented by product in the same way as revenue variables.

</details>

## Related guides

* [Build a Multi Division Model](/how-tos/core-modelling/build-a-multi-division-model.md)
* [Build a Multi Period Comparison Dashboard](/how-tos/dashboards-and-reporting/build-a-multi-period-comparison-dashboard.md)
* [P\&L Overview](/help/financial-outputs-and-valuation/p-and-l-overview.md)
* [Common Size Mode](/syntax/chart-and-table-syntax/common-size-mode.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://help.modelreef.io/use-cases/saas-and-subscription-businesses/multi-product-saas-p-and-l.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
