What is lifetime value or LTV? (And why bother to calculate it?) The most basic reason is knowing the value of a customer. Lifetime value simply adds together the value of all the purchases a user has made in their “lifetime” with you.
Once you have that information in hand, you can do things like improve your Return on Ad Spend (ROAS) or do more precise budgeting around Cost Per Acquisition (CPA) for new leads.
You don’t need to be a mega-corporation to gain valuable insights from your customer data. Even a list of a few thousand subscribers becomes more valuable when you can assign a dollar value to each one.
How do you calculate lifetime value?
Yep, it’s as simple as you think:
SUM(Purchase1, Purchase2, Purchase3) = LTV
The difficult part is defining your parameters and making sure your tracking is set up correctly. The first step is to determine when exactly your customer’s lifetime begins.
When does a lifetime begin?
A tough question for most lifeforms, but for us it’s a little easier. A lifetime for a user begins when we start tracking them with a unique identifier. This might be a cookie or a UserID that’s been assigned on your site or app, or it might be when they become a new subscriber on your e-mail marketing tool or get added to your CRM.
Here’s a couple of examples of customer lifetimes:
#1 – Joe browses Skate Shop’s website a couple of times before he starts the purchase process for a new skateboard. When he enters his e-mail address, he’s assigned a unique UserID by the system. He gets distracted picking out trucks and wheels for his new board and his session expires. The next day he gets a cart abandonment e-mail reminder and returns to Skate Shop to complete his transaction.
Joe purchases his new board, along with some vinyl stickers, for a total value of $125. 6 weeks later, he returns to the site when he gets an e-mail about a sale on Supreme hoodies and t-shirts and decides to buy a couple. His total comes to $60. Joe’s lifetime value is now $185.
#2 – Kate is researching food subscription boxes. She comes across Organic Meat Box when reading a comparative review round up on a third party site. While browsing Organic Meat Box’s offerings, she gets a prompt to sign up for a free 7 day meal plan. Kate opts-in and is added to Organic Meat Box’s CRM. She receives the 7 day meal plan, along with a series of follow up e-mails encouraging her to try an Organic Meat Box subscription with an offer of 50% off her first month.
Kate accepts, signing up for $25 for the first month. A custom field that tracks her lifetime value in the CRM is updated via API. She continues to receive Organic Meat Box for another 6 months at the standard price of $50 a month. In the 8th month of her Organic Meat Box membership, Kate pauses her subscription while she’s on vacation and doesn’t reactivate it. Kate’s lifetime value is now $325.
How do you track lifetime value?
As noted in the example above, there are a couple of ways to track lifetime value once your customer’s “lifetime” begins.
Tracking lifetime value via UserID
For UserID tracking, I recommend using Google Tag Manager and Google Analytics. If you allow users to create accounts, your backend likely already has a unique identifier for each user. All you need to do is “push” that information into Google Tag Manager’s data layer.
Begin in Google Analytics by enabling UserID tracking at the Property level and created a UserID view. Important: remember that you cannot pass Personal Identity Information (PII) to Google Analytics via UserID–this should be a random series of numbers and letters, not an e-mail address.
Next, you’ll be creating a “variable” in Tag Manager called UserId. This is a “data layer variable”, and in the Data Layer Variable Name you’ll want to enter the ID you gave this variable when you pushed it to the data layer.
dataLayer.push({‘YourVariableName’: ‘<dynamic user id here>’});
Note: If you are using a single page application (AKA the URL doesn’t change regardless of what action the user takes), you’ll want to set UserID via a Javascript event AND you’ll want to use a dedicated “tracker” name. Let’s start with setting the tracker name. This will happen on your built-in All Pages/Pageview trigger, as soon as the GA tag launches. Enable override settings for the Universal Analytics tag. Then, go to Advanced Configuration, “Set Tracker Name” to True, and enter your custom tracker name: “MyTracker”.
The Javascript event below would be defined as a “Custom Event” trigger in GTM (event name is ‘uidAvailable’).
dataLayer.push({event: ‘uidAvailable’, uid:<dynamic user id here>});
Now, create a Data Layer variable in GTM called “UserID” and set the Data Layer Variable name to uid (which we defined in our Data Layer push).
Next, you’ll set the tag your Javascript event triggers to a Universal Analytics tag with an Event hit. Make sure to set the tracker to “MyTracker” as you did in the above step. Also, under “Fields to Set”, set UserID as the variable you created.
You can also set the UserID within the Google Analytics tracking tag itself and circumvent Google Tag Manager, but I recommend using GTM if at all possible. This is the snippet you use to set UserID within the GA tag:
ga(‘set’, ‘userId’, ‘<dynamic user id here>’);
Tracking lifetime value via API and custom fields
For API based tracking, you’ll need a few things in place. First, you’ll need to be using an eCommerce or payment processing platform that allows you to send information about transactions to other systems in a format that can be “read”. I recommend using an application called Zapier to do this. It takes a lot of the guess work out of the process, and it works with over 1000 different applications.
For example, if you were using Shopify for your eCommerce platform and Infusionsoft for your CRM, you could setup a “Zap” in Zapier to update a custom field in your customer’s profile each time they made a purchase. The logic of this sequence would be something like this:
Trigger: New order in Shopify
Action# 1: Create or Update contact in Infusionsoft
Check for the existence of a contact record using e-mail address
Update a custom field called “Recent Purchase” with the latest purchase amount
If you are creating a new contact, set the lifetime value to 0
Action #2: Add the latest purchase to the lifetime value amount
Using the Formatter app by Zapier, conduct a spreadsheet function: SUM(Recent Purchase, Lifetime Value)
Action #3: Update the lifetime value with the result of the second step
Once this “Zap” is up and running, your customers’ lifetime values will update automatically any time they make a purchase.
How do you use lifetime value (LTV) to improve your return on ad spend (ROAS)?
This takes a small additional step, but can be super useful for anyone doing display or pay per click advertising. For example, let’s say we have a mailing list with 2,000 e-mails on it. Out of all the e-mails on that list, we’ve earned $1,500 in sales.
$1,500 (Total Sales)/2,000 (Total E-mails) = $0.75 average lifetime value per subscriber
This tells us that we can spend up to $0.75 per subscriber and still break even. Anything less and we start to generate a return on investment (ROI). Anything more, and we can stand the potential to start losing money, unless we can improve our average lifetime value.
Knowing a figure like this can help you creating bidding guidelines in tools like Adwords or Facebook and a establish a target cost per acquisition (CPA).
These days we have an almost unlimited volume of data on our customers. The key is to make that information easy to digest and analyze, so you can maximize its value when planning and forecasting your business activities.