> 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/how-tos/core-modelling/build-a-recurring-revenue-forecast.md).

# Build a Recurring Revenue Forecast

This guide describes how to model recurring revenue such as subscriptions, retainers or contracts using Model Reef’s timing and driver engine.

## Before you start

You should understand:

* The types of recurring revenue you have (monthly subscriptions, annual licences, retainers).
* Expected churn, retention and expansion patterns.
* Billing frequency and payment terms.

## What you will build

* Variables and drivers for subscribers, price and churn.
* Recurring revenue profiles with appropriate timing.
* Cash behaviour based on billing cycles and delays.
* Visibility of recurring revenue in statements and the Cash Waterfall.

***

## Steps

{% stepper %}
{% step %}

### Define your subscription structure

Decide how you want to segment recurring revenue:

* By product tier (Basic, Pro, Enterprise).
* By customer segment (SMB, Mid market, Enterprise).
* By region.

Create a separate revenue variable per segment if needed.
{% endstep %}

{% step %}

### Create subscriber and ARPU drivers

In the Data Library:

* Create a subscriber count driver for each segment (e.g., `Subs - Basic`, `Subs - Pro`).
  * Enter starting subscriber numbers.
  * Enter monthly net adds or growth rates.
* Create an ARPU driver (Average Revenue Per User) per segment (e.g., `ARPU - Basic`, `ARPU - Pro`).
  * Enter current prices and any planned price increases.
    {% endstep %}

{% step %}

### Build recurring revenue variables

For each segment:

* Create a Revenue variable named clearly, for example `Revenue - Subscriptions - Basic`.
* In the revenue modal:
  * Use a formula: `Revenue = Subscribers × ARPU`.
  * Link to the subscriber and ARPU drivers from the Data Library.
  * Set frequency to monthly (or your billing cycle).
  * Set start date and end date as appropriate.
* For annual subscriptions:
  * Use a schedule that triggers revenue recognition annually.
  * Or model accrual monthly and billing annually via separate cash timing logic.
    {% endstep %}

{% step %}

### Add churn, retention and expansion

Churn and retention can be represented as drivers:

* Create churn rate drivers (e.g., `Churn - Basic`, `Churn - Pro`).
* Incorporate churn into subscriber drivers, for example:
  * Subscribers\_t = Subscribers\_t\_minus\_1 × (1 minus churn\_rate) + new\_subscribers\_t.
* For expansion:
  * Create drivers for ARPU uplift or seat expansion.
  * Factor them into ARPU or subscriber counts.

This can be implemented either inside the driver definitions or through custom formulas referencing multiple drivers.
{% endstep %}

{% step %}

### Configure cash timing

Billing and cash timing are handled by delays:

* In each subscription revenue variable:
  * Set Delay based on billing terms:
    * For monthly billing with immediate payment, delay might be 0 to 7 days.
    * For annual billing paid in advance, revenue may accrue over the year but cash arrives at the start.
* Model these explicitly:
  * Accrual pattern via schedule and formula.
  * Cash timing via delay settings.

This will automatically generate AR where accrual and cash timing differ.
{% endstep %}

{% step %}

### Layer in subscription specific costs

To understand unit economics:

* Create COGS variables for hosting, payment processing or direct support.
* Create Staff variables for success and support teams.
* Link these costs to drivers:
  * Cost per subscriber.
  * Cost per active user.
  * Cost per seat.

This allows you to see gross margin and contribution per segment.
{% endstep %}

{% step %}

### Review outputs and unit economics

Use:

* P\&L to review recurring revenue, COGS and margins.
* Cashflow Statement and Cash Waterfall to understand cash generation.
* Custom charts to track:
  * Subscribers.
  * ARR and MRR.
  * Churn and retention trends.
  * Contribution margin per segment.
    {% endstep %}
    {% endstepper %}

***

## Check your work

* Recurring revenue levels follow subscriber and ARPU patterns.
* Churn and retention have the expected effect on subscriber counts.
* Cash timing reflects actual billing terms.
* COGS and staff costs are correctly linked to subscriber activity.

***

## Troubleshooting

<details>

<summary><strong>Revenue does not match expected ARR or MRR</strong></summary>

Recheck formulas and the relationship between subscribers and ARPU.

</details>

<details>

<summary><strong>Cash pattern is weird</strong></summary>

Inspect delays. A mismatch between accrual and cash delays can create large AR swings.

</details>

<details>

<summary><strong>Churn logic looks wrong</strong></summary>

Confirm that growth and churn drivers are applied in the right order and scale.

</details>

***

## Related guides

* [Recurring Services Revenue Model](/use-cases/telecommunications-and-it-services/recurring-services-revenue-model.md)
* [Revenue Mapping](/help/financial-outputs-and-valuation/revenue-mapping.md)
* [Revenue Variables: what is, rules, what it affects](/help/drivers-variables-and-timing/revenue-variables.md)
* [How to Enter Values](/syntax/how-input-fields-work/how-to-enter-values.md)
