Ignore this reading if you're not a mobile app company.
If youâre not familiar with some of the words in here (especially around ad channels), thatâs OK. Itâs going to feel a lot more tangible in the project.
It's a lot harder to track conversions on a mobile app than on a website. Hereâs why:
There are solutions to these problems. You have to spend more money and spend time configuring things â but you'll be able to track conversions better. It's worth it in the long run.
MAAPâs let you track people from the ad channel, to your site, on the App/Play Stores, and throughout your mobile app.
Say youâre in charge of a mobile app that sells furniture. Someone clicks an ad on Instagram, which takes them to the Apple App Store. They download the app, install it, and then buy a chair on it.
If youâve set up your MAAP correctly, you can tell that the same person clicked the ad, installed your app, and bought a chair.
Without the MAAP, it would look like different people did each step. In fact, you likely can't track those steps at all.
MAAPs have a special agreement with the App and Play Stores that allows them to pass the right data around. You can't code this yourself.
We recommend AppsFlyer to clients. Weâll walk through using it in the project for this module.
Other MAAPâs include Adjust, Branch, Kochava, Tune, and more.
Here's what a MAAP can look like when it's set up correctly.
Youâll be able to see exactly how each traffic source is performing â whether itâs organic (from people googling you), referral (people sharing posts on Facebook), Facebook ads, Google Ads, or any other traffic source.
So, whenever someone installs the app or triggers an event (e.g., buys a chair) after clicking one of these ads, the MAAP will know.
Without knowing that these events happened, you have no way of knowing which ad channels are working. Which means you might throw money down the drain.
We recommend starting the projects now.
Then, come back to this reading if you get stuck in the mobile app project. There's too much to read and remember otherwise.
But if you really want some bedtime reading, read on!
Hopefully, you now see the benefits of using MAAPs. The tricky part is setting them up. There are a few hurdles.
If someone hits your landing page before they visit the app store, it's hard to track conversions. The app store removes all the tracking.
To fix this, you use the MAAP to create unique URLs for each traffic source.
For example, https://bellcurve.onelink.me/3Eg9 would be a link to the Apple App Store, specifically for people who come from Facebook.
https://bellcurve.onelink.me/4Fa2 would be a link to the Google Play store, specifically for people who come from Quora. And so on.
In AppsFlyer, this weird-looking link is called the OneLink.
The OneLink URL looks super ugly. And to a user, it looks downright spammy.
You can mask the spammy-looking link by asking your engineer to point your CTA at a clean-looking URL (e.g., at https://bellcurve.com/download-app), but have the Javascript actually send the user to the OneLink URL when they click the CTA button.
If this doesn't make sense, you can literally copy the above paragraph and send it to an engineer. They'll get it.
Facebook won't know that someone bought a chair on your mobile app; the ad channel doesn't receive conversion data.
That data will only live the MAAP itself. Until you do some extra work.
To send data to your ad channel, youâll need your engineers to install the special code that Facebook/Google Ads/etc. gives you inside your app. This code is called the "SDK".
Weâll cover the instructions you should give them in the project.
If you donât install this codeâŚthe ad channels wonât optimize towards a conversion goal that you care about.
What does this mean?
Let's take Facebook ads. Facebook automatically shows the ads that perform best. But what does "best" mean? Ideally, "best" means showing ads that lead to people buying on your site.
Not clicking on the ad. Not adding to their cart. Not liking your post. Buying on your site.
Without the SDK, you can't send downfunnel conversion data (such as installs and purchases) to the ad channels youâre running.
So, Facebook will show the ads that lead to worse âproxyâ metrics, such as the number of clicks on your ad â because it can see that data.
Thatâs not ideal. Someone who clicks a button wonât necessarily become a loyal, paying user.
Even if you install the SDK, you still have to do some extra work to tie individual users to a conversion.
For example, Facebook can now tell that someone bought a chair. But it doesn't know that Hannah Sornson from Kansas bought the chair -- because she's not logged into Facebook on your app.
In order to know that Hannah bought the chair, we have to use a couple hacks.
These hacks are not-so-good solutions. Both of them mean you have to kick the user out of your app, which is not a great experience. Sucks, we know.
Here are your options:
Redirect the user to your a âthank youâ page on your website after they convert in your app. This page will have the right tracking pixels on it, so the ad channel can receive the conversion data.
To make the page useful to the user, you can link to helpful articles or tutorials they'll need after they purchase.
Put the purchase form on your website (instead of in the app) and use the ad channel tracking pixels there.
In this case, the MAAP wonât receive the data â since the purchase happened outside of the app â so you'll have to send it the data separately.
You may have to use the MAAP to see if your campaigns are converting
If you donât use one of the strategies above, youâll have to rely on the data in the MAAP itself. Youâll struggle when you run ads because you canât track your goal.
Itâll also be harder to take advantage of the full suite of data that the ad channel has. For example, you wonât be able to figure out that people in Ohio tend to buy from you more often than people in Florida â which would teach you to run more ads to people in Ohio.
Why? When you pass data into the MAAP, you can only pass along a few pieces of information: the source, the campaign name, the adset name, ad names, and keywords. There wonât be any extra information that your ad channel would give you, like the userâs location, age, gender, parental status, household income, and more. The ad channels often have this data, but AppsFlyer wonât.
As a workaround, you can break these different audience segments out into separate campaigns and adsets in order to properly track them at these more granular levels. So, for example, to see how Google Ads audiences perform across a few different geographies, you could break your âDog Foodâ campaign into different, geography-specific campaigns:
Then youâd have different UTM tags for the ads in these campaigns (utm_campaign=brand-usa, for example), which then lead to different MAAP URLâs, which then update the MAAP with the different campaigns.
Itâs a lot more work when you set up your campaigns, but this approach will give you better data in your MAAP. You wonât need to boot your users out of the app just to have better tracking in your ad platform. We think itâs the best compromise.
Your site will need to take your site visitorâs UTM tags and append them to the OneLink.
Like this:
https://fictitiousdogfood.onelink.me/3Eg9/?pid=google_search&c=Dog-Food&af_adset=Organic&af_keywords=best+organic+dog+food&af_ad=the-best-organic-dog-food
Weâll give you the template for the code snippet in the project, but youâll need to know how it works so you can structure your UTM tags and campaigns the right way.
With the AppsFlyer OneLink, you can pass many kinds of data, including source, campaign, adset, ad, keywords, and more. They work just like UTM tags, but have different names. Weâll want to connect our UTM tags to these values. Here's a table with the most important ones, and how they map to UTM tags.
Since AppsFlyer doesnât have a utm_medium equivalent, you'll need to combine the utm_source and utm_medium tags together into AppsFlyerâs pid tag in this format: [utm_source]_[utm_medium]
For example, pid=facebook_prospecting
Say someone hits Fictitious Dog Food's landing page with the following URL (broken out):
https://www.fictitiousdogfood.com/?utm_source=google&utm_medium=search&utm_campaign=Dog-Food_Organic&utm_term=best+organic+dog+food&utm_content=the-best-organic-dog-food
We would change the OneLink to look like this:
https://fictitiousdogfood.onelink.me/3Eg9/?pid=google_search&c=Dog-Food&af_adset=Organic&af_keywords=best+organic+dog+food&af_ad=the-best-organic-dog-food
When everything is installed and configured, youâll find this data in the AppsFlyer dashboard and see how each source, campaign, adset, ad, and keyword performs for each event you record.
Like this beautiful table: