ARPU (Average Revenue Per User)

ARPU stands for Average Revenue Per User, which is the average revenue generated from each customer.

It is an essential metric for evaluating profitability and growth, especially for companies adopting SaaS business models or subscription-based business models.

This metric is regularly monitored (usually monthly) by executives, product managers, and marketing personnel to optimize pricing strategies, measure the effectiveness of upselling initiatives, and assess the health of the business.

Note that ARPU may also be referred to as ARPC (Average Revenue Per Customer) or ARPA (Average Revenue Per Account).

How to Calculate ARPU

Data Overview

The sample data we’re using is payment data from a subscription-based business. You can download the data from this page.

In this dataset, each row represents a monthly payment history for one customer, and the columns contain the following information:

  • Customer ID
  • Payment Date
  • Payment Plan
  • Payment Amount

Revenue Aggregation

To calculate ARPU, we need information on MRR (Monthly Recurring Revenue) or ARR (Annual Recurring Revenue).

Generally, ARPU is the average monthly revenue obtained from each customer, calculated based on MRR. However, in some cases, ARPU may refer to the average annual revenue per customer, calculated using ARR.

For this example, we’ll calculate ARPU as the average monthly revenue obtained from each customer.

First, select “Summarize” from the column header menu of the payment date.

In the summarize dialog, select “Payment Date” for the group and choose “Month” as the date unit with truncation. When calculating annual ARPU, you would select “Year” instead.

Next, select “Payment Amount” for the value and choose SUM as the aggregation function.

Finally, change the column name to “MRR” and click the Preview button. When calculating annual ARPU, you would change the column name to “ARR” instead.

This completes the setup for aggregating MRR (or ARR).

Customer Count Aggregation

Next, we’ll aggregate the customer count information needed for ARPU calculation.

In the summarize dialog, select “Customer ID” for the value and choose “Count Unique” as the aggregation function.

Then, click the edit icon to change the new column name to “Customer Count” and click the Execute button.

We have now aggregated the MRR (or ARR) and customer count needed for ARPU calculation.

ARPU Calculation

Finally, to calculate ARPU, select “Create Calculation” > “Standard” from the column header menu of the MRR (or ARR) column.

In the Create Calculation dialog, enter MRR / Customer Count in the calculation editor. When calculating annual ARPU, the formula would be ARR / Customer Count.

Lastly, ensure “Create a new column” is checked, set the column name to “ARPU”, change “Create after this column” to the last column, and execute.

We have successfully calculated ARPU.

Calculate ARPU (Average Revenue Per User/Average Revenue Per Customer) (R Code)

For Payment Data

If you want to calculate ARPU (Average Revenue Per User/Average Revenue Per Customer) using a custom R command with this payment data, please refer to the following R code.

R command to calculate ARPU (Average Revenue Per User/Average Revenue Per Customer/Average Revenue Generated Per Customer)

# Step 1: Change payment date to monthly. When calculating ARPU (Average Revenue Per User/Average Revenue Per Customer/Average Revenue Generated Per Customer) per year (annual/yearly), change the payment date to a monthly basis.
# - When calculating monthly ARPU (Average Revenue Per User/Average Revenue Per Customer/Average Revenue Generated Per Customer), truncate the date by "month"
# - When calculating annual (yearly) ARPU (Average Revenue Per User/Average Revenue Per Customer/Average Revenue Generated Per Customer), truncate the date by "year"
mutate(`Payment Date` = floor_date(`Payment Date`, unit = "month")) %>%

# Step 2: Aggregate monthly MRR and customer count. (When calculating annual (yearly) ARPU (Average Revenue Per User/Average Revenue Per Customer/Average Revenue Generated Per Customer), aggregate ARR and customer count)
# Since we've already truncated the date by "month", we're aggregating the monthly revenue (MRR) and customer count
# If the date is truncated by "year", it becomes annual revenue, so we would aggregate ARR (Annual Recurring Revenue) and customer count
group_by(`Payment Date`) %>%
  summarize(
    MRR = sum(`Payment Amount`, na.rm = TRUE),  # Total revenue for that month (MRR) / Total revenue for the year (ARR)
    `Customer Count` = n_distinct(`Customer ID`) # Unique customer count for that month
  ) %>%  

# Step 3: Calculate monthly ARPU. (When calculating annual (yearly) ARPU (Average Revenue Per User/Average Revenue Per Customer/Average Revenue Generated Per Customer), calculate annual ARPU)
# When calculating monthly ARPU (Average Revenue Per User/Average Revenue Per Customer/Average Revenue Generated Per Customer), divide MRR by customer count to calculate ARPU
# When calculating annual (yearly) ARPU (Average Revenue Per User/Average Revenue Per Customer/Average Revenue Generated Per Customer), divide ARR by customer count to calculate ARPU
 mutate(
    ARPU = MRR / Customer Count,  # For annual ARPU calculation, use ARR/Customer Count
    # Specify the position of the ARPU column
    # If the MRR column exists, place after it; if not, place after the last column
    .after = ifelse(
      "MRR" %in% names(.),  # Check if MRR column exists
      "MRR",                # If it exists, place after MRR
      last_col()            # If it doesn't exist, place after the last column
    )

R command for calculating annual (yearly) Average Revenue Per User.

R command for calculating annual (yearly) ARPU (Average Revenue Per Customer)


# Step 1: Change payment date to annual basis
# - When calculating monthly ARPU (Average Revenue Per Customer), truncate the date by "month"
# - When calculating annual ARPU (Average Revenue Per Customer), truncate the date by "year"
mutate(`Payment Date` = floor_date(`Payment Date`, unit = "year")) %>%

# Step 2: Aggregate annual ARR and customer count
# Since we've already truncated the date by "year", we're aggregating the annual revenue (ARR) and customer count
group_by(`Payment Date`) %>%
 summarize(
   ARR = sum(`Payment Amount`, na.rm = TRUE),  # Total revenue for that year (ARR)
   `Customer Count` = n_distinct(`Customer ID`) # Unique customer count for that year
 ) %>%  

# Step 3: Calculate annual ARPU
# When calculating annual ARPU (Average Revenue Per Customer), divide ARR by customer count to calculate ARPU
mutate(
   ARPU = ARR / Customer Count,  # Calculate annual ARPU
   # Specify the position of the ARPU column
   # If the ARR column exists, place after it; if not, place after the last column
   .after = ifelse(
     "ARR" %in% names(.),  # Check if ARR column exists
     "ARR",                # If it exists, place after ARR
     last_col()            # If it doesn't exist, place after the last column
   )
 )
Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio