Skip to main content

How Revenue is Calculated

Understanding how Rize calculates revenue is essential for accurate billing and profitability tracking. This guide explains the revenue calculation logic for each billing type and how time entries contribute to revenue.

Revenue Components

Revenue in Rize comes from two sources:

  1. Hourly Revenue: Calculated from billable time entries with hourly rates
  2. Retainer Revenue: Calculated from active retainers' daily allocations

Total revenue for any period = Hourly Revenue + Retainer Revenue

Time Entry Rate Logic

How Rize sets hourly rates on time entries depends on the client's billing type and whether the entry is billable.

Billable Entries

For billable time entries, the hourly rate is determined as follows:

Hourly Billing (or no billing type set):

  • Hourly rate is set from (in priority order):
    1. Project hourly rate
    2. Client hourly rate
    3. Team member hourly rate
  • Revenue = hours × hourly_rate

Retainer Billing:

  • Hourly rate = nil (no hourly rate)
  • Revenue comes only from retainer daily allocation
  • Time still contributes to costs

Hybrid Billing:

  • Hourly rate = nil (no hourly rate)
  • Revenue comes from retainer base + overage calculation
  • Overage is calculated at period end, not per entry

Non-Billable Entries

Non-billable entries always have hourly_rate = nil and contribute $0 to revenue, regardless of billing type.

Flowchart diagram showing how hourly rates are determined for time entries

Image placeholder description: A flowchart or decision tree diagram showing the rate logic. The image should show:

  • Start: "New Time Entry"
  • Decision: "Is entry billable?" (Yes/No branches)
  • If No: "hourly_rate = nil, Revenue = $0"
  • If Yes: Decision: "Client billing type?"
  • Three branches:
    • Hourly/None: "Set hourly_rate from project/client/member → Revenue = hours × rate"
    • Retainer: "hourly_rate = nil → Revenue from retainer only"
    • Hybrid: "hourly_rate = nil → Revenue from retainer + overage"
  • Visual flow with clear decision points and outcomes

Hourly Billing Revenue

For hourly billing clients, revenue is straightforward:

Revenue = Sum of (hours × hourly_rate) for all billable entries

Rate Priority

When multiple rates are available, Rize uses this priority:

  1. Project Rate: If the project has an hourly rate set, use it
  2. Client Rate: If no project rate, use the client's hourly rate
  3. Member Rate: If neither project nor client rate exists, use the team member's hourly rate

Example

You have three billable entries:

  • Entry 1: 2 hours at $150/hour (project rate) = $300
  • Entry 2: 3 hours at $100/hour (client rate) = $300
  • Entry 3: 1 hour at $120/hour (member rate) = $120

Total Revenue = $300 + $300 + $120 = $720

Screenshot showing hourly revenue calculation with multiple entries and rate sources

Image placeholder description: A detailed view showing hourly revenue calculation. The image should show:

  • A table or list of time entries with columns:
    • Date/Time
    • Hours
    • Rate source (Project/Client/Member)
    • Hourly rate
    • Revenue (hours × rate)
  • A summary showing total revenue
  • Visual indicators showing which rate source was used for each entry
  • Maybe color coding or icons for different rate sources

Retainer Billing Revenue

For retainer billing clients, revenue comes entirely from the retainer's daily allocation:

Daily Revenue = Retainer Budget Amount ÷ Days in Billing Period
Total Revenue = Sum of Daily Revenue for all days in period

Key Points

  • Time entries have hourly_rate = nil
  • Revenue is recognized daily, even on days with no time entries
  • Each day gets an equal share of the retainer budget
  • Time entries still contribute to costs and profitability

Example

A client has a $3,000 monthly retainer (30-day month):

  • Daily Revenue = $3,000 ÷ 30 = $100/day
  • If you work 40 hours or 0 hours, daily revenue is still $100
  • Total monthly revenue = $3,000 (regardless of hours worked)
Screenshot showing retainer revenue calculation with daily allocation

Image placeholder description: A calendar or daily breakdown view showing retainer revenue. The image should show:

  • A calendar view or daily list showing:
    • Each day of the month
    • Daily retainer revenue ($100/day in this example)
    • Time entries (if any) showing no hourly rates
  • A summary showing:
    • Retainer budget amount
    • Number of days
    • Daily revenue calculation
    • Total revenue
  • Visual consistency showing the same revenue amount each day
  • Maybe highlight days with time entries vs days without

Hybrid Billing Revenue

Hybrid billing combines retainer base revenue with overage revenue:

Total Revenue = Base Retainer Revenue + Overage Revenue

Base Retainer Revenue

Calculated the same as pure retainer billing:

Daily Base Revenue = Retainer Budget Amount ÷ Days in Period

Overage Revenue

Calculated at the end of the billing period:

  1. Sum total billable hours for the period
  2. Calculate overage hours = max(total_hours - hours_included, 0)
  3. Calculate overage revenue = overage_hours × overage_hourly_rate
  4. Allocate overage revenue proportionally across days based on hours worked each day

Example

A client has:

  • $2,000/month retainer
  • 20 hours included
  • $150/hour overage rate
  • 30 hours worked in the month

Base Revenue:

  • Daily base = $2,000 ÷ 30 = $66.67/day
  • Total base = $2,000

Overage Calculation:

  • Overage hours = 30 - 20 = 10 hours
  • Overage revenue = 10 × $150 = $1,500
  • Daily overage allocation = proportional to hours worked each day

Total Revenue:

  • Total = $2,000 + $1,500 = $3,500
Screenshot showing hybrid billing revenue calculation with base and overage breakdown

Image placeholder description: A detailed breakdown showing hybrid revenue calculation. The image should show:

  • A billing period summary with:
    • Retainer base amount
    • Hours included vs hours worked
    • Overage hours calculation
    • Overage rate
    • Overage revenue
  • Daily breakdown showing:
    • Base daily revenue (consistent)
    • Hours worked each day
    • Overage allocation per day (proportional)
    • Total daily revenue (base + overage)
  • Visual indicators showing which days contributed to overage
  • A summary showing total base + total overage = total revenue

Daily Statistics Calculation

Rize calculates revenue daily through statistics models. Here's how it works:

Step 1: Fetch Day Entries

day_entries = time_entries.active.where(start_time: day range)

Step 2: Calculate Hourly Revenue

Only billable entries with hourly rates contribute:

hourly_billable_entries = day_entries.where(billable: true).where.not(hourly_rate: nil)
billable_amount = Σ(hours × hourly_rate)

Note: Retainer and hybrid entries have hourly_rate = nil, so they don't appear in hourly revenue.

Step 3: Calculate Retainer Revenue

retainer_amount = team.retainers.active.covering_date(day)
.sum { |r| r.daily_revenue_for(day:) }

For hybrid retainers, daily_revenue_for includes both base and overage allocation.

Step 4: Total Revenue

total_revenue = billable_amount + retainer_amount
Screenshot showing daily statistics calculation process

Image placeholder description: A visual representation of the daily stats calculation process. The image should show:

  • A day's time entries listed
  • Two sections:
    • Hourly Revenue: Entries with rates showing hours × rate
    • Retainer Revenue: Daily retainer allocation
  • A calculation showing: Hourly Revenue + Retainer Revenue = Total Revenue
  • Visual separation between the two revenue sources
  • Maybe a breakdown showing which entries contributed to which revenue type

Revenue Recognition Timeline

Hourly Billing

  • Revenue is recognized when time entries are created
  • Each entry contributes revenue immediately
  • No revenue on days without entries

Retainer Billing

  • Revenue is recognized daily, regardless of time entries
  • Daily background jobs ensure revenue is recorded even on days without work
  • Consistent daily revenue throughout the billing period

Hybrid Billing

  • Base revenue is recognized daily (like retainer)
  • Overage revenue is calculated at period end and allocated retroactively
  • Daily stats are updated when overage is calculated
Timeline diagram showing when revenue is recognized for each billing type

Image placeholder description: A timeline or calendar view showing revenue recognition patterns. The image should show:

  • A calendar or timeline view
  • Three sections or examples:
    • Hourly: Revenue only on days with entries (sparse, variable amounts)
    • Retainer: Consistent revenue every day (even days without entries)
    • Hybrid: Consistent base revenue daily + overage allocation at period end
  • Visual indicators showing when revenue is recognized
  • Maybe different colors or patterns for each billing type

Project and Member Revenue Allocation

For retainer revenue, Rize allocates the client's daily retainer amount to projects and members based on their share of billable time:

Project Share = Project Billable Seconds ÷ Client Total Billable Seconds
Project Retainer Revenue = Client Daily Retainer × Project Share

This ensures that retainer revenue is distributed proportionally based on actual work performed.

Screenshot showing how retainer revenue is allocated to projects and members

Image placeholder description: A visual breakdown showing revenue allocation. The image should show:

  • Client-level retainer revenue (e.g., $100/day)
  • Breakdown by project showing:
    • Project name
    • Billable hours/seconds
    • Percentage share
    • Allocated revenue
  • Breakdown by member showing similar information
  • Visual representation (pie chart or bar chart) showing the allocation
  • Total should sum to the client's retainer amount

Common Scenarios

Scenario 1: Hourly Client with Multiple Rates

  • Client has $100/hour rate
  • Project A has $150/hour rate
  • Project B uses client rate ($100/hour)
  • Revenue = (Project A hours × $150) + (Project B hours × $100)

Scenario 2: Retainer Client with Variable Hours

  • $3,000/month retainer = $100/day
  • Work 40 hours one week, 10 hours the next
  • Revenue = $100/day every day (consistent)
  • Profit varies based on costs

Scenario 3: Hybrid Client Going Over Included Hours

  • $2,000/month retainer, 20 hours included, $150/hour overage
  • Work 25 hours total
  • Base revenue = $2,000
  • Overage = 5 hours × $150 = $750
  • Total revenue = $2,750

Next Steps