As advertisers slowly veer away from last-click methods of attribution, the popularity of lift testing keeps growing. For all its popularity, however, there are some common misunderstandings that can lead to inaccuracies when measuring costs associated with lift testing.
Some people might call lift testing the marketing equivalent of a randomized controlled trial. The idea is to show your ads to a small segment of your target audience, prevent the rest of the audience from seeing the ads, and then measure the long-term difference in conversions between the two groups.
This difference between the two groups reflects the success of your ads. When we divide the cost of the ads by the difference in conversions between the groups, we end up with a cost per incremental conversion metric.
This metric shows the true cost of driving one incremental conversion in the lift tested campaign.
Lift testing is more powerful than the standard cost per conversion (CPC) metric on Google Ads or Facebook Ads; these platforms simply tell you the cost for every conversion attributed to your ads — they don’t make any attempt to determine incrementality. That’s where lift testing comes in clutch.
Despite their benefits, lift tests are far more complicated than many advertisers expect. That’s why we’re going to focus on one key misstep marketers make when lift testing — and how to correct it.
The generic formula for cost per action (CPA) is:
In this equation, “conversions” is usually understood as “conversions that have been attributed to a channel.”.
You can think of ift testing as a way to modify the denominator (the bottom half) of the equation. That is, instead of only looking at attributed conversions and getting an attributed CPA, lift testing looks at incremental conversions and gives you an incremental CPA.
This is a good start to breaking down the lift test, but the equation doesn’t tell the whole story. To understand why, we must first define what “cost” means in the context of a lift test.
Typically “cost” represents the media cost of running ads that are part of the lift test. For example, if our lift test involved running $5,000 worth of ads to a certain audience, then most people would assume that $5,000 is the cost.
The problem with that assumption is that it oversimplifies how channels interact with one another. If our lift test is run on an upper-funnel channel like display or Facebook, it’s important to recognize that these ads will also affect our lower-funnel channels.
There are two ways this can happen:
The takeaway here is that both of these examples of lower-funnel channels will incur extra costs because of the upper-funnel activity.
Typical lift testing doesn’t account for these extra costs — it only looks at the cost of ads on the channel being lift tested. This is because a lift test only measures whether users convert at all during the duration of the test; it doesn’t matter which channel the conversion happened on. This makes it an attractive way to track long-term conversions.
If we refer back to our earlier equation, we can see that this leaves us in a tricky situation.
Typical lift test approaches underestimate costs by not considering the incremental cost accrued on other channels. This, in turn, causes an underestimate of our incremental CPA. Ultimately, most lift tests give an overly optimistic picture of efficiency.
The easiest way to incorporate the extra costs into our calculations is to measure the incremental costs incurred on other channels as part of the lift test.
This can get a little technical, but it’s worth it to measure the true efficiency of your lift test.
Let’s say we want to measure how much extra we have to spend on brand search due to running a lift-tested campaign on Facebook Ads. Just as we choose which conversion events we want to measure as part of our lift test, we can also choose to measure events like brand search visits.
To do this, we set an event to fire on our website each time someone starts a session from a brand search ad (as determined by a UTM parameter, for example). Once this event is established, we then include it in our lift test measurement. We use the lift test to measure how many incremental brand search visits we get by running ads on Facebook.
From here, we multiply this number by the average brand search CPC during the lift test, which gives us an incremental cost figure — the extra money we spent on brand search because of the Facebook ads.
Now, when we go back to our original equation, we get a more accurate representation of our lift test’s incremental CPA:
This is a more accurate picture of our true incremental CPA from running our Facebook campaign because it also incorporates the incremental spend accrued on brand search.
The best part about this is you don’t need to stop here. You can easily add in events for any other channels influenced by your Facebook campaigns.
For brands just starting with lift tests, the typical approaches can suffice in the beginning. However, as advertisers begin to scale and run larger, more complex tests, these methods become necessary to accurately measure incremental CPA. Without considering these extra costs during the lift test, any measurement of efficiency is going to be inaccurate.
Want to talk more about incremental CPA, lift tests or Performance Branding? Get in touch with us any time.
Get industry insights and news directly to your inbox.
Thank you. Check your email for details on your request.
Cookie | Duration | Description |
---|---|---|
__hssrc | session | This cookie is set by Hubspot whenever it changes the session cookie. The __hssrc cookie set to 1 indicates that the user has restarted the browser, and if the cookie does not exist, it is assumed to be a new session. |
checkForPermission | 10 minutes | This cookie is set by Beeswax to determine whether the user has accepted the cookie consent box. |
cookielawinfo-checkbox-advertisement | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category . |
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
CookieLawInfoConsent | 1 year | Records the default button state of the corresponding category & the status of CCPA. It works only in coordination with the primary cookie. |
elementor | never | This cookie is used by the website's WordPress theme. It allows the website owner to implement or change the website's content in real-time. |
JSESSIONID | session | The JSESSIONID cookie is used by New Relic to store a session identifier so that New Relic can monitor session counts for an application. |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
Cookie | Duration | Description |
---|---|---|
__cf_bm | 30 minutes | This cookie, set by Cloudflare, is used to support Cloudflare Bot Management. |
__hssc | 30 minutes | HubSpot sets this cookie to keep track of sessions and to determine if HubSpot should increment the session number and timestamps in the __hstc cookie. |
bcookie | 2 years | LinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognize browser ID. |
bscookie | 2 years | LinkedIn sets this cookie to store performed actions on the website. |
lang | session | LinkedIn sets this cookie to remember a user's language setting. |
lidc | 1 day | LinkedIn sets the lidc cookie to facilitate data center selection. |
UserMatchHistory | 1 month | LinkedIn sets this cookie for LinkedIn Ads ID syncing. |
Cookie | Duration | Description |
---|---|---|
_uetsid | 1 day | Bing Ads sets this cookie to engage with a user that has previously visited the website. |
_uetvid | 1 year 24 days | Bing Ads sets this cookie to engage with a user that has previously visited the website. |
Cookie | Duration | Description |
---|---|---|
__hstc | 1 year 24 days | This is the main cookie set by Hubspot, for tracking visitors. It contains the domain, initial timestamp (first visit), last timestamp (last visit), current timestamp (this visit), and session number (increments for each subsequent session). |
__lotl | 5 months 27 days | This cookie is set by Lucky Orange to identify the traffic source URL of the visitor's orginal referrer, if any. |
_ga | 2 years | The _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors. |
_gcl_au | 3 months | Provided by Google Tag Manager to experiment advertisement efficiency of websites using their services. |
_gd_session | 4 hours | This cookie is used for collecting information on users visit to the website. It collects data such as total number of visits, average time spent on the website and the pages loaded. |
_gd_svisitor | 2 years | This cookie is set by the Google Analytics. This cookie is used for tracking the signup commissions via affiliate program. |
_gd_visitor | 2 years | This cookie is used for collecting information on the users visit such as number of visits, average time spent on the website and the pages loaded for displaying targeted ads. |
_gid | 1 day | Installed by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously. |
_hjAbsoluteSessionInProgress | 30 minutes | Hotjar sets this cookie to detect the first pageview session of a user. This is a True/False flag set by the cookie. |
_hjFirstSeen | 30 minutes | Hotjar sets this cookie to identify a new user’s first session. It stores a true/false value, indicating whether it was the first time Hotjar saw this user. |
_hjIncludedInPageviewSample | 2 minutes | Hotjar sets this cookie to know whether a user is included in the data sampling defined by the site's pageview limit. |
_lo_uid | 2 years | This cookie is set by Lucky Orange as a unique identifier for the visitor. |
_lo_v | 1 year | This cookie is set by Lucky Orange to show the total number of visitor's visits. |
_lorid | 10 minutes | This cookie is set by Lucky Orange to identify the ID of the visitors current recording. |
hubspotutk | 1 year 24 days | HubSpot sets this cookie to keep track of the visitors to the website. This cookie is passed to HubSpot on form submission and used when deduplicating contacts. |
IR_gbd | session | Impact Radius sets this cookie to store a unique ID which is used to identify the user's device, when they return to the websites that used the same network. |
Cookie | Duration | Description |
---|---|---|
__qca | 1 year 26 days | The __qca cookie is associated with Quantcast. This anonymous data helps us to better understand users' needs and customize the website accordingly. |
_fbp | 3 months | This cookie is set by Facebook to display advertisements when either on Facebook or on a digital platform powered by Facebook advertising, after visiting the website. |
_mkto_trk | 2 years | This cookie, provided by Marketo, has information (such as a unique user ID) that is used to track the user's site usage. The cookies set by Marketo are readable only by Marketo. |
B | 1 year | This Cookie is used by Yahoo to anonymously store data related to user's visits, such as the number of visits, average time spent on the website and what pages have been loaded. This data helps to customize website content to enhance user experience. |
bito | 1 year 1 month | This cookie is set by Beeswax for advertisement purposes. |
bitoIsSecure | 1 year 1 month | Beeswax sets this cookie for targeting and advertising. The cookie is used to serve the user with relevant advertisements based on real time bidding. |
fr | 3 months | Facebook sets this cookie to show relevant advertisements to users by tracking user behaviour across the web, on sites that have Facebook pixel or Facebook social plugin. |
mc | 1 year 1 month | Quantserve sets the mc cookie to anonymously track user behaviour on the website. |
MUID | 1 year 24 days | Bing sets this cookie to recognize unique web browsers visiting Microsoft sites. This cookie is used for advertising, site analytics, and other operations. |
test_cookie | 15 minutes | The test_cookie is set by doubleclick.net and is used to determine if the user's browser supports cookies. |
tuuid | 2 years | The tuuid cookie, set by BidSwitch, stores an unique ID to determine what adverts the users have seen if they have visited any of the advertiser's websites. The information is used to decide when and how often users will see a certain banner. |
tuuid_lu | 2 years | This cookie, set by BidSwitch, stores a unique ID to determine what adverts the users have seen while visiting an advertiser's website. This information is then used to understand when and how often users will see a certain banner. |
Cookie | Duration | Description |
---|---|---|
__pdst | 1 year | No description available. |
_an_uid | 7 days | No description available. |
_dc_gtm_UA-61749619-1 | 1 minute | No description |
_dlt | 1 day | No description |
_hjSession_1771567 | 30 minutes | No description |
_hjSessionUser_1771567 | 1 year | No description |
_nx-nocache | session | No description available. |
6suuid | 2 years | No description available. |
A3 | 1 year | No description |
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ | session | No description |
AnalyticsSyncHistory | 1 month | No description |
BIGipServerab44web-nginx-app_https | session | No description |
bounceClientVisit3783c | 30 minutes | No description |
bounceClientVisit3783v | 30 minutes | No description |
dgzsdl08v4 | 10 minutes | No description |
IR_11658 | session | No description |
li_gc | 2 years | No description |
tableau_locale | session | No description available. |
tableau_public_negotiated_locale | session | No description available. |
test | 1 year | No description available. |