subscribe

Simplifying the mess around iOS 14.5+ attribution; SKAdNetwork vs IDFA/ATT

In iOS 14.5 Apple made changes to the way attribution works in iOS, due to privacy concerns.

The good news: There is a new way to track campaign attribution of mobile campaigns on major ad networks (such as Facebook, Instagram, TikTok), by using SKAdNetwork and one of the measurement partners (such as branch.io).

The bad news: It's a mess to try to figure out what's going on with attribution on iOS, because now there are several ways to measure campaign results, each one giving only partial results. This means that you need to be aware of the differences between the methods when setting up campaigns. In most cases, it's probably better to focus on modern attribution and avoid the confusion altogether. Also, google search is full of tutorials and guides about attribution that are outdated and only add to the confusion.

This post is my attempt to briefly explain the different attribution methods, old and new, so that if you're new to iOS attribution tracking, and just want to get it up and running, you can understand what's important and what you can ignore.

SKAdNetwork - ✅ the new method (works for Facebook, Tiktok, Youtube etc)

Also referred to as: "SKAN".

Apple introduced SKAdNetwork as a new alternative to measure the success of ad campaigns, while maintaining user's privacy. This is the recommended way to measure campaigns. As time passes, I assume, Apple will add more limitations to alternative methods and push SKAdNetwork to become the the only way allowed. When using SKAdNetwork the app does not need to ask the user for permission to track their attribution to a campaign, because the data is anonymized anyway. It will always work, regardless of the user's tracking authorization status.

To use SKAdNetwork, you'll also need an authorized MMP (Mobile Measurement Partner) such as branch.io, appsflyer, etc. You will install their SDK and integrate it in your app. This MMP will interact with the advertiser's APIs and Apple's APIs on your behalf and show you the final results in their dashboard.

It might be confusing that you need an additional service to track your ads, but due to how SKAdNetwork works, it'll be much easier to use one. These MMPs are vetted and authorized by both Apple and the advertisers. I recommend branch.io because you can just create an account and get started right away, the iOS SDK docs are clear and thorough, and they have a generous free plan so you can become familiar with it and make sure that it works for you, before committing.

One caveat is that if you advertise only on Meta (Facebook, Instagram and WhatsApp) then you might not need an MMP because Meta has all this functionality built in. They already have the SDK and the analytics dashboard of their own that integrates with SKAdNetwork. However, TikTok doesn't have this option and they require you to choose one of the authorized MMPs in order to track attributions at all. Also, by using an MMP you will be able to see all the campaigns across all advertisers in a single place.

A few important points to understand about how SKAdNetwork works:

  • You can see for each campaign how many conversions they generated, but in aggregate. You cannot associate a specific user to a specific campaign, like you could before iOS 14.5 using IDFA (described below). Apple maintains crowd anonymity so you cannot identify any specific user.
  • There is no real time information, the attribution results are purposely delayed by Apple so you cannot identify specific users. There's also a minimum conversion threshold required to show any results, for the same reason.
  • The attribution window is limited in time. If 24 hours pass with no new attribution data for a given user, then no more attributions will be measured for this user at all.

AdServices - ✅ works for Apple Search Ads

SKAdNetwork is meant to be used with any of the big advertisers like Facebook, Tiktok, Youtube etc. If you're using Apple search ads, you can use the much simpler AdServices which you can implement with a simple callback and without using an MMP. But since you need to use an MMP anyway, you might as well send your Apple Search Ads attributions there too, because they support it.

AdServices works only with Apple Search Ads, and allows you to attribute the campaign and keyword to a specific user. You might be wondering, how come specific attribution is allowed when coming from Apple Search ads but not when coming from the other advertisers? I would like to understand as well.

IDFA - 🚫 the old method

Also referred to: "App Tracking Transparency", "ATT".

Apple used to provide a persistent id (called IDFA - "identifier for advertisers") to identify all users. It allowed you to track the user and how they responded to ads, across campaigns and apps. It was a simple and powerful solution that was easy to implement and allowed full transparency, but hurt the user's privacy and was abused by advertisers.

In iOS 14.5 Apple made big changes to how IDFA works, due to privacy concerns. If it was fully deprecated, it would probably make everyone's life much easier. However, it was only 'limited' instead. From iOS 14.5 and on, users are presented with an intimidating popup, asking them if they agree to be tracked. If they agree, the IDFA is provided like before, if they refuse, it's not provided and the campaign performance cannot be tracked using the IDFA.

The rate of users that agree to be tracked is obviously very low (according to various reports) and keeps declining. If you have limited marketing resources, or just getting started, you probably want to ignore this option and only use the new attribution method. However, the MMPs still keep this option in their campaign creation and management tools, which complicates campaign management.

By using this attribution method, you get limited data, only from the users who consented to be tracked. If you use it alongside SKAdNetwork, you'll essentially get two data sets that you cannot cross reference, because there's no way to match attributions. It might make sense for companies with large budgets and high error tolerance, who still try to hold on to any tracking information they can get, but if you're just looking for simple attribution data, it might be better to simply ignore everything related to IDFA and focus all of your resources on the new attribution methods.

Universal Deferred Links - 🚫 the method that "only sometimes" works

Another method that used to work to track attributions is "universal deferred links" but there were changes to how it works as well, so it can no longer be used reliably.

This method used to work like this:

  • You would append an id to the url of your app in the app store.
  • A user would use this link, go to the app store and download the app.
  • When the app is opened, you would get a callback in your code with the id from the url as a parameter, so you can associate it with the user.

Again, this was a simple and efficient way to track attributions, and with this case as well, it no longer reliably works. The callback in your code (step 3 above) will have an empty result when the link is opened in certain apps, which is Apple's way of preventing this attribution method as being used as a workaround to track users. For example, it will work when opened from an email or messages app, but not from Instagram.

You can read more here about when universal links work and when they don't.

It's probably still a good idea to implement universal links, because the setup is easy and you'll get more data, especially for email/sms campaigns.

There's a somewhat popular workaround to make universal links work despite the limitations, using the clipboard. It works like this: the link sends the user to a webpage which copies the link to the clipboard, the user installs the app, the app reads whatever is in the clipboard to be able to make the attribution. The problem is that the user will see a notification that something was read from their clipboard, when the app is just opened which looks suspect. And worse than that, this is clearly a workaround that Apple tries to prevent, so I assume at some point they will find a way to stop it from working or start rejecting apps which read from the clipboard when opened.

Attribution on iOS in the future

I think the same idea applies to all of the attribution methods, it's clear that Apple is trying to prevent users from being linked to specific clicks, and since Apple has all the power, it's probably just a matter of time until SKAdNetwork (or a future variation of it) will remain as the only way to track attributions.

If you find this post useful and would like to get notified about my next one, make sure to subscribe to my newsletter and follow me on 𝕏.