3 min read

Free to Paid Conversion Rates

In this analysis we’ll try to estimate the proportion of Free users that convert to a paid plan in Buffer Publish.

Summary

Around 30% of Subscription Started events come from users that either haven’t been on a trial or started one more than 30 days prior to the conversion event.

The free-to-paid conversion rate was estimated by looking at the number of Subscription Started events that came from users without an associated trial and dividing it by the total number of users that signed up that month less the number that converted with an associated trial.

With the deprecation of Buffer Classic, which was perhaps the main source of users subscribing without a trial, the estimated proportion of users that purchase a paid subscription after having been on a Free plan for multiple weeks is around 0.85% to 1%.

# connect to bigquery
con <- dbConnect(
  bigrquery::bigquery(),
  project = "buffer-data"
)

# to make bigquery work
options(scipen = 20)

# define sql query
sql <- "
  select distinct
    u.id as user_id
    , u.account_id
    , u.created_at as signup_at
    , ps.client_name
    , ps.signup_with_trial
    , ps.source
    , t.id as trial_id
    , t.trial_start_at
    , t.trial_end_at
    , t.converted
    , s.id as sub_start_id
    , s.original_timestamp as converted_at
    , s.plan_id
    , s.subscription_id
    , s.trial_start_date as sub_trial_start
    , s.trial_end_date as sub_trial_end
  from dbt_buffer.publish_users u
  left join dbt_buffer.segment_product_signups ps
    on ps.user_id = u.account_id
    and ps.product = 'publish'
  left join dbt_buffer.stripe_trials t
    on u.stripe_customer_id = t.customer_id
  left join segment_publish_server.subscription_started s
    on s.user_id = u.account_id
  where u.created_at between '2020-01-01' and '2020-09-01'
"
  
# query BQ
users <- dbGetQuery(con, sql)

# save data
saveRDS(users, "free_to_paid_conversion.rds")

There are around 661 thousand users that signed up between January 1 and September 1, 2020.

Diagnostic Plots

Let’s plot the number of events that occur over time to spot check the data.

We started putting all new signups on Trial around August 2019.

The number of users starting subscriptions each weeks seems to have been increasing since the low point at the beginning of the Covid pandemic in the US.

This plot seems to indicate that most Subscription Started events have a trial associated with them. Still, there seem to be a significant number of conversions that come from users that aren’t on a trial or have never had a trial.

Around 25% of conversion events come from users that hadn’t had a trial or started one more than 30 days prior to the conversion event.

For those without trials, where did they sign up?

Most signed up from the client bufferWeb, which I believe refers to Buffer Classic. It has now been sunsetted.

Conversion Rates

Next we will come up with a conversion rate for Free -> Paid. If the conversion event occurrs more than 30 days after the trial started (~16 days after the trial ends), we’ll assume that the user was on the Free plan for a sufficient amount of time.

What should the denominator be? We want the total number of users that were on the Free plan.

The conversion rate is lowest in the most recent months because those users have had the least amount of time to convert, and the COVID-19 pandemic. With the deprecation of Buffer Classic, which was perhaps the main source of users subscribing without a trial, the estimated proportion of users that purchase a paid subscription after having been on a Free plan for multiple weeks is around 0.85% to 1%.

Users Who End Trials Within 2 Days

Let’s look at the conversion rates of users that end their trials within two days of starting them.