Give your simulator superpowers

RocketSim: An Essential Developer Tool
as recommended by Apple

Using campaign links to track impressions, downloads, and sales

Campaign links open your App Store product page and allow you to track the performance of your marketing channels. As an app developer, it’s crucial to understand how users discover your app. For example, many new users find Daily via the web, primarily via organic search (Google Search), paid ads (Google Ads), social media (mainly Reddit and X), and cross-selling (via web content of other apps I’ve made).

App Store Connect provides insights into what website (Web Referrer) from which a user tapped a link to your App Store product page to view or download it. In my case, the majority comes from dailytimetracking.com. As Daily’s landing page, this page brings most web visitors to Daily’s product page on the App Store.

I was looking for a way to understand better where visitors of dailytimetracking.com who continued to the App Store and potentially downloaded Daily and purchased an in-app purchase are coming from. Unfortunately, but technically understandable, App Store Connect doesn’t provide this ability by default. We can solve this by using campaign links in App Store Connect.

As described earlier, App Store Connect provides insights into what website from which a user tapped a link to your App Store product page to view or download it. Now consider the following illustration:

You can track web referrers using Campaign Links in App Store Connect.
You can track web referrers using Campaign Links in App Store Connect.

By default, users entering the App Store from an app’s website (e.g., dailytimetracking.com) cannot be distinguished based on the referrer. Hence, you’re unable to understand how many impressions, downloads, and revenue are generated by websites forwarding users to the App Store through your website. Campaign links (explained below) can be used to solve this, enabling use cases like:

  • Analyzing (paid) ad performance and accurately calculating their Return On Investment (ROI).
  • Understanding the impact of specific marketing techniques, such as cross-selling initiatives.
  • Being informed of press coverage linking to your website instead of the App Store directly (although you should also use web analytics).
  • Having a holistic understanding of where your users are truly coming from and their direct impact on downloads and, ultimately, revenue, as you’re effectively linking your website with App Store Connect.

Stay updated with the latest in Swift & SwiftUI

The 2nd largest newsletter in the Apple development community with 18,598 developers. Don't miss out – Join today:


Now that we understand what campaign links are and what they can deliver, it’s time to dive into the implementation. You can create a new campaign via App Store Connect by navigating to Analytics → Acquisition → Campaigns:

App Store Connect allows you to generate campaign links.
App Store Connect allows you to generate campaign links.

This final link contains your campaign name and results in a link that you can use in your (static) marketing campaign. The following URL is an example campaign link containing the above campaign name:

https://apps.apple.com/app/apple-store/id686910553?pt=2169443&ct=my-marketing-campaign&mt=8

It is important to understand that you don’t store a campaign link using App Store Connect. A campaign automatically pops up in App Store Connect when the campaign link results in at least 5 downloads using individual Apple IDs. This opens up the possibility of dynamically creating campaign links by inserting referrer information as the campaign name.

Daily’s website has code that dynamically changes the App Store link by inserting referrer information from the following sources:

  • ref query parameter, which is a common way of passing referrer information to a target website.
  • utm_source parameter, which is a common way of passing marketing campaign-related information to a target website. This allows for measuring the effectiveness of a campaign.
  • The Referer HTTP request header contains the address from which the user requested a resource. I recommend aggregating referrers by taking only the host of the address.

The code depends on your website’s technology, which, in my case, is PHP. You can check out this gist of my implementation. When someone clicks on Daily’s website after searching on Google, the App Store link will be:

https://apps.apple.com/app/apple-store/id686910553?pt=2169443&ct=www.google.com&mt=8

My implementation also uses cookies to remember the original referrer. For example, when a user opens Daily’s website after searching on Google, the website stores a cookie. Upon revisiting, the website modifies the App Store Link to include the original referrer (www.google.com) as the campaign name. This cookie implementation is optional but recommended.

Analysing campaign results

Now that you have implemented a mechanism that stores your website’s referrer as the campaign name in a campaign link, it’s time to analyze performance. Go back to App Store Connect’s acquisition and campaigns page to explore the campaign results. Campaigns resulting in downloads using at least 5 Apple IDs will be displayed:

You can find an overview of campaign links' performance in App Store Connect.
You can find an overview of campaign links’ performance in App Store Connect.

For Daily, you can see that there are several campaigns showing up, indicating the performance of various marketing channels.

Conclusion

App Store Connect’s campaign links are essential to validate the value of marketing campaigns. You’ll be able to find out how users get into your app and how much return of investment you’re getting.

If you like to prepare and optimize, even more, check out the optimization category page. Feel free to contact me or tweet me on Twitter if you have any additional tips or feedback.

Thanks!

This article is a guest post from my friend Niels Mouthaan. Amongst others, he develops Daily, a popular time tracker for Mac that works by periodically asking what you’re doing, removing the need to toggle timers manually.