Back to Blog

Shopify App Store attribution - yes you can!

Daniel Sim
TLDR; With this solution you can accurately attribute app revenue to the source that created it. It works for any external source where installs go through the Shopify App Store or where users install on your own website.

When it comes to engineering challenges, I don’t like being told that something’s not possible. Yet that’s what I’ve been saying to app devs for years when they ask if they can attribute a campaign with their App Store listing as the landing page to app revenue.

The good news is that after a lot of research and experimentation, I’ve built a solution where you can attribute every external App Store source to app revenue.

If you want to build it yourself, I’m going to share with you the architecture you can use to do it. Or, I have a fully hosted solution ready to go that I’ve been trialling with a small number of app developers. Details below.

Non-Technical Summary

This solution works similarly to a link shortener like Bitly. Where you directly link to the App Store today, you’ll now link to your own domain. Your own domain will give the user an ID and then redirect them to the App Store.

On the App Store you can choose to show the merchant your app listing or immediately start the install process.

When the merchant installs and lands in your app, this ID will be read again, associating the merchant to the source. Reporting can show the source, merchant and the revenue associated with them.

You will get a detailed funnel for every source and merchant.

For sources that don’t allow redirects, like Google Ads, this method still works. It just requires a bit of configuration in your Google Ads Account.

What is not possible at this stage is attributing revenue where the source is within the App Store, like App Store search or Ads. I do have a prototype of how this could be done, but it is not in the trial phase. Stay tuned!

Apply To Try Our Hosted Solution

I’m currently onboarding a limited number of app developers to our hosted solution.

With this, the only code change you need to make is adding a snippet, similar to Google Analytics tracking, to your app.

If your ad spend is at least $1k/month you may be suitable. Pricing is $499/month, for a minimum of 6 months, payable in advance. There is no setup fee. If you aren’t happy with the solution you’ll get a full refund.

Pricing may change when we open up direct signups. In this case we’ll give you at least one month’s notice.

Apply to try our hosted solution

Designing, building, hosting and maintaining your own solution will be slower and more expensive than using our hosted option. But by sharing here, you’ll still have that choice.

I’m not available to consult on your own self-built system, but if you ask a question in a public forum like Twitter, Slack or Facebook I’ll do my best to answer it. 

Build It Yourself

Your dev team can build out and maintain a solution based on my directions here. It is a lot more involved than a one-day engineering job, but it is possible for you to build an entirely custom solution on your infrastructure.

Components

Track and redirect server

When a user clicks a link, it assigns an ID to a user, saves it and source information to your database, and then redirects to the App Store

Association server

When the user lands in your app, it associates the user’s ID with a merchant and third-party IDs like Google Analytics and Facebook

Association client

This makes a request to the association server, sending the required IDs

Database

The database stores the user’s IDs, merchant, and source information

Integration services

This pulls and pushes information to and from services like the Shopify Partner API for merchant revenue data, and the Google Ads API for cost and conversion data

Reporting

You may choose to display conversion, revenue, and cost data in a third party system like Google Ads or your own reporting solution

Track and redirect server

When a user clicks a link, it assigns an ID to a user, saves it and source information to your database, and then redirects to the App Store.

The most robust and privacy-conscious method is for this server to be on the same domain or subdomain as your app, to respond with a HTTP redirect, and set a cookie containing a UUID user ID you generate.

I would not recommend using client side JavaScript or third-party domains since this will not be able to track all users and can fail to fire.

Referrer information may not be available. Your request to the track and redirect server should contain the source, campaign, UTM and other parameters on the URL. Save the requested URL and user ID to your database.

Now, instead of linking directly to your app listing at https://apps.shopify.com/offset, you’ll link to https://example.com/t?utm_source=users&utm_medium=email&utm_campaign=launch&lpurl=https://apps.shopify.com/offset

This works for sources you control which allow redirects. What about those that don’t, like Google Ads.

I’ve looked at all of the popular paid acquisition channels. They offer either an alternative tracking mechanism like Google Ads or track-though like Facebook.

For those with an alternative tracking mechanism, when the user pushes an ad, the platform makes a parallel request to your track and redirect server. For Google Ads this is called parallel tracking and can be set up in your Google Ads account.

Association server

The user has passed through your track and redirect server and into the Shopify App Store. If and when they install, they’ll land back on your app domain example.com.

Here, your association server on the same domain reads the user ID cookie and associates it with the merchant's myshopify domain, the de facto unique identifier of the merchant.

You may also choose to associate the user ID with third party IDs from Google Analytics and Facebook to tie everything together. It is likely you will do this in a JavaScript Association client, to be able to access the third party URLs.

Association client

If you do not use third party services you can do everything server side, without the Association client.

The Association client’s role is to associate what you know about a user with what the third party service knows. You may wish to read the Google Analytics Client ID. Or send conversion events to Facebook.

If you have an embedded app you cannot use third party cookies here. Use the recommended alternatives from Shopify.

Database

What you store and how you store it is up to you.

Integration services

To make all of this worthwhile we want to know the revenue generated by a merchant. We pull this directly from the Shopify Partner API.

You might also build services to push conversion events and revenue information to third parties to calculate return on ad spend (ROAS) using their tools. Or, pull their data into your database to use your own reporting tools.

Reporting

You now have all of the data required to work out precisely how much a campaign costs and how much revenue it has generated. With SaaS, the basis for ROAS will be initially the expected lifetime value (LTV) of the merchants acquired from the campaign. Then as time goes on, their actual lifetime value will emerge.

The data gathered supports any attribution model you want, it’s just up to your reporting tools to apply it.

Build or Buy, there’s now a solution to App Store attribution

If you’re spending on marketing external to the App Store, it’s been a long-standing frustration that revenue can’t be associated with campaigns.

My solution here solves that. It provides an architecture for your team to build yourselves, or you can apply to join the first phase of app developers using our hosted solution.

Whatever you choose, I hope this puts you on a path to increased growth through effective marketing.

Apply to try our hosted solution



























Share on social media: 

More from the Blog

Subscribe for Shopify app developer news and analysis.

We will never share your email address with third parties. Unsubscribe at any time. One email every couple of weeks.