# Build a Bottom Up Forecast

This guide shows you how to build a forecast by starting from operational inputs instead of top line financial percentages.

***

## Before you start

Identify:

* The operational levers that drive revenue and costs (for example units, customers, projects, hours).
* Capacity limits and utilisation assumptions.
* Staffing requirements per unit of output.

***

## What you will build

* Operational drivers for units, customers, projects or hours.
* Revenue, COGS, opex and staff variables driven by these inputs.
* Capacity aware forecasts that reflect physical or operational constraints.

***

## Steps

{% stepper %}
{% step %}

### List operational drivers

For your business, examples might include:

* Number of active customers.
* Number of projects delivered.
* Number of store visits.
* Production volume in units or tonnes.
* Billable hours.

Decide which metrics best reflect actual activity.
{% endstep %}

{% step %}

### Create operational drivers in the Data Library

* Open the Data Library.
* For each operational metric create a Driver entry, for example:
  * `Units - Product A`
  * `Projects - Consulting`
  * `Billable Hours - Team A`
* Enter:
  * Current levels.
  * Growth assumptions.
  * Seasonality if relevant.

These drivers will underpin revenue and cost variables.
{% endstep %}

{% step %}

### Build revenue from operational drivers

For each product or service line:

* Create a **Revenue variable**.
* Use formulas such as:
  * `Revenue = Units × Price_per_unit`
  * `Revenue = Billable_hours × Rate_per_hour`
* Where needed, link to:
  * `Rate` or `Price` drivers in the Data Library.
  * Capacity or utilisation modifiers.
    {% endstep %}

{% step %}

### Build costs from operational drivers

Costs often scale with the same units:

* Create **COGS variables** that use:
  * `COGS = Units × Cost_per_unit`
* For **Staff**:
  * Use headcount drivers or hours based staffing ratios.
  * For example:
    * `Headcount_t = Units_t ÷ units_per_FTE`
  * `Staff_cost = Headcount × salary_per_FTE`
* For **Opex**:
  * Model where costs scale by operational intensity (for example logistics or customer care).
    {% endstep %}

{% step %}

### Introduce capacity and utilisation constraints

Avoid unrealistic growth by modelling capacity:

* Create **capacity drivers**, for example:
  * Maximum units per plant.
  * Maximum hours per team.
* Apply simple logic, for example:
  * `Units_t = min(desired_units_t, capacity_t)`
  * `Utilisation = units_t ÷ capacity_t`
* Monitor utilisation using charts.

Even simple capacity logic can prevent obviously impossible forecasts.
{% endstep %}

{% step %}

### Verify outputs and refine drivers

Use P\&L and Cash Waterfall to:

* Confirm revenue and cost patterns match operational expectations.
* Check margins, staff ratios and unit economics.
* Adjust drivers where assumptions are unrealistic.
  {% endstep %}
  {% endstepper %}

***

## Check your work

* Every major financial line is traceable back to an operational driver.
* Headcount and staff costs are linked to actual workload.
* Unit volumes do not exceed realistic capacity.
* Capacity changes (for example new plant or hires) are explicitly modelled.

***

## Troubleshooting

<details>

<summary><strong>Revenue looks fine but capacity is unrealistic</strong></summary>

Check that you have not omitted capacity constraints.

</details>

<details>

<summary><strong>Costs are not scaling with units</strong></summary>

Confirm variables use unit based formulas rather than fixed amounts.

</details>

<details>

<summary><strong>Difficulty managing many drivers</strong></summary>

Group drivers in the Data Library with clear naming and tags.

</details>

***

## Related guides

* [New Product Launch Forecast](/use-cases/consumer-goods-fmcg-and-cpg-manufacturers/new-product-launch-forecast.md)
* [Financing Cashflow](/help/financial-outputs-and-valuation/financing-cashflow.md)
* [Fixing Merged Cells](/help/importing-and-data-inputs/fixing-merged-cells.md)
* [KPI Cards](/syntax/chart-and-table-syntax/kpi-cards.md)


---

# 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://help.modelreef.io/how-tos/core-modelling/build-a-bottom-up-forecast.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.
