Revenue recognition
Generally accepted accounting principles (GAAP) require that businesses recognize revenue when it’s earned (accrual accounting) rather than when payment is received (cash accounting). This article explains how to build a revenue recognition model in Runway for recurring contracts.
Step 1: Prepare your integrations and databases
First, connect the data sources you plan to use model revenue recognition. Runway has CRM, data warehouse, and google sheet integrations available.
You can also manually copy data into a Runway database. You will need to follow database configuration directions.
The Runway team can help you write a query that will bring in the fields that you will need for revenue recognition modeling from your integration source.
Typically, for a revenue recognition model the contract or deal databases are segmented by a unique ID and Customer Name, depending on the fields your business uses to track contracts.
The following items brought into Runway as number and date drivers are standard for a revenue recognition model:
- Contract Amount
- Contract Term length
- Contract Start Date
- Contract End Date
Note the example of a simple contract database below:
- Contract ID and Customer Name dimensions are set as Segments
- Contract Start Date, Contract Value and Contract Term (Months) are Drivers
- Payment Cadence is an Other column, meaning it is metadata tied to each Contract ID and Customer Name segment
Step 2: Set up contract start date, end date and term length
To recognize revenue over the length of a contract, you will need Start Date, Contract Term and Contract End Date drivers.
Calculate contract end date using start date and term (months)
-
Add a date driver column by clicking the + at the right hand side of the database and selecting date driver
-
Name the date driver Contract End Date
-
Click on the driver column name and select
Add Default Formula
. Default formulas allow you to set a formula for every segment of the driver. -
Use
DateAdd()
to calculate the Contract End Date based on Contract Start Date and Contract Term Length.Note that the units must be wrapped in single-quotes, e.g. months as ‘m’
Calculate contract term (months) from contract start date and end date
-
Add a number driver column by clicking the
+
at the right hand side of the database and selecting number driver -
Edit the name for the number driver column
-
Clicking on the driver column name, select Add Default Formula to set a formula for every segment of data (in this example, a formula for Contract Term Length will be propagated to each intersection of Contract ID and Customer Name)
-
Use
DateDiff()
function to calculate a Contract Term Length based on contract start date and Contract End Date.
Step 3: Build logic to recognize revenue over length of contract
Here’s how to create a formula that will spread your revenue over the period that services get delivered.
- Add a number driver column to the database by clicking the
+
to the right of the last database column.
- Name this driver Monthly Recognized Revenue.
- Click into the driver name and select
Add default formula
to open the default formula editor for the driver column. - Begin typing Contract Value to surface the Contract Value driver.
- You will see two options to reference the Contract Value driver.
- A database column reference with the naming convention
Database Name.Driver Column
.- This option gives you the affordance to apply date filters and filters for dimensions you have not set as database Segments. For revenue recognition purposes, you will want to choose the database reference option so you have access to date filters.
- Direct Driver reference option, which appears as Contract Value This Segment.
- This option offers cleaner name format and the ability to filter based on database segments.
- A database column reference with the naming convention
- Click the driver pill to open the formula editor options.
- Click **+ Add Rule **to add filters to the formula. These will make sure the contract value hits your model only between Contract start and End dates.
- Set Contract Start Date.Month
is on or before
This month - Set Contract End Date.Month
is after
This month - Segment
is
This Segment will ensure the rules you set get applied across all segments of the driver, which in this example, means across all slices ofContract ID
xCustomer Name
. You can review how to **create dynamic formulas **using This Segment here
- Set Contract Start Date.Month
- Finally, divide by
Contract Term Length (Months)
to calculate a monthly value. Each driver will be populated from Contract Start to Contract End date.
To check if the formula is calculating correctly, select all months of values and check whether count and sum in the calculation preview match the Contract Term Length and Contract Value
Step 4: Drive revenue forecast formulas by referencing Contracts data
Finally, you will need to wire up the Contract database to drive Revenue forecasts upstream in your model. This is the last step required to ensure that your topline is actively driven by the Monthly Revenue Recognition
driver you’ve built.
-
Navigate to a
Revenue
driver if it already exists in your Runway instance or create a new driver in a Model or on a Page -
Click into the forecast formula of the driver and type
sum()
- You can create a
sum()
two ways:- Using a driver reference that directly references Monthly Recognized Revenue
All Customer Names All Contract IDs
- Using a driver reference that directly references Monthly Recognized Revenue
- You may also create a sum over the**database column reference ** which gives you the affordance to apply filters based on non-Segment dimensions
- You can create a
- Click the carat to the left of the Revenue driver to drill into inputs in-line
- This lets us quickly check that
Monthly Recognized Revenue
drivers for eachCustomer x Contract ID
segment pull into the aggregation as expected - Based on the drill-in, you will be able to see whether
Monthly Recognized Revenue
values begin and end on the correct dates - Each
Monthly Recognized Revenue
driver has a Runway arrow that will open up a detail pane that will let you investigate the drivers formulas, inputs and Plans
- This lets us quickly check that