ยท7 min readยทSam Wild

Which Marketing Link Actually Drove That Sale?

You posted on TikTok, Reddit, and your newsletter this week. Three purchases came in. Which channel earned them? Here's how to stop guessing.

Last month I watched someone in an indie dev Discord celebrate hitting 50 purchases. Someone asked "nice, where are they coming from?" and the answer was "honestly, no idea."

That's the default state for most small app developers. Revenue shows up in RevenueCat or App Store Connect, and you know it happened, but you don't know what caused it. You posted a TikTok three days ago, shared a link on Reddit last week, and your mum sent it to her WhatsApp group. Any of those could be the reason. Or none of them.

The gap between clicks and money

Most developers have some sense of how their marketing is performing. You can see that your TikTok got 12,000 views. You know your Reddit post got 80 upvotes. Your App Store impressions went up on Tuesday.

But none of that tells you who bought.

Views, impressions, likes, upvotes โ€” they measure attention. They don't measure revenue. A TikTok with 50,000 views and zero purchases is worth less to your business than a Reddit comment with 3 upvotes that drove 5 sales. Without per-link tracking, you'd never know that. You'd double down on TikTok because the numbers looked better.

This is the mistake most indie developers make with marketing. They optimise for the metric that's easiest to see (views, followers, impressions) rather than the metric that actually matters (purchases). The fix isn't complicated, but it does require setting up tracking before you need the data.

What per-link tracking looks like

The concept is simple. Instead of sharing one link everywhere, you create a separate tracked link for each channel, campaign, or piece of content. Each link redirects to the same place (your App Store listing, usually), but records where the tap came from.

So you'd have:

  • One link for your TikTok bio
  • A different link for the Reddit post
  • Another for your email newsletter
  • Another for each individual influencer you work with

When someone taps a link, the system records which link it was and drops a cookie or stores a reference. When that person later makes a purchase (assuming you've wired up the purchase tracking side), the system matches the purchase back to the original link tap.

The result: you know that 3 of this week's purchases came from Reddit, 1 from the newsletter, and none from TikTok. Now you know where to spend your time next week.

Why UTM parameters aren't enough

If you've done any web marketing, you've probably used UTM parameters. They're the ?utm_source=twitter&utm_medium=social bits tacked onto URLs. Google Analytics reads them and sorts your traffic into buckets.

UTMs work well for websites. They don't work well for apps.

The problem is the App Store. When someone taps a link and lands on an App Store page, the UTM parameters vanish. Apple's App Store doesn't pass them through. The user downloads your app, opens it, and there's no trace of which link they originally tapped.

Some developers try to work around this with deferred deep linking โ€” where the link opens the app directly and passes parameters through. That works in theory but requires a fairly complex SDK setup, and it breaks when the user doesn't have the app installed yet (which is the most common case for new users).

Per-link attribution that matches the link tap to a later purchase through a server-side connection sidesteps this problem entirely. The tracking happens before the App Store is involved, and the purchase matching happens after, through a webhook. The App Store's parameter-stripping habit doesn't matter.

Setting this up in practice

There are a few ways to wire this together, depending on your stack.

The bare minimum approach uses a link shortener and manual matching. Create Bitly links for each channel, check which ones get taps, and try to correlate that with your purchase timing. This sort of works for tiny volumes (under 10 purchases a month) where you can plausibly eyeball the timing. It falls apart quickly once numbers go up, and it's never precise.

The spreadsheet approach adds a step. You create tracked links, log every tap with a timestamp, then cross-reference against your RevenueCat purchase log. More accurate than guessing, but tedious. Nobody maintains this for more than two weeks.

The automated approach uses a tool that handles both sides โ€” the link tracking and the purchase matching. LinkOwl does this by connecting to RevenueCat (or Superwall) via webhooks. You create a tracked link, share it wherever, and when a purchase comes in, LinkOwl matches it to the link tap automatically. No spreadsheet, no manual cross-referencing.

The automated version costs 5p per attributed purchase. The manual versions cost your time, which โ€” if you're a solo developer โ€” is probably worth more than 5p.

What data you actually get

Once per-link tracking is running, you stop thinking about marketing in terms of effort and start thinking about it in terms of results.

You can answer questions like:

  • "I posted on four platforms this week. Which one drove purchases?"
  • "I'm paying an influencer ยฃ200 for a shoutout. Did it generate enough sales to cover the cost?"
  • "My TikTok strategy has been running for a month. Has it produced any revenue at all?"
  • "I changed my App Store screenshots last week. Did conversion from organic search improve?"

That last one is tricky โ€” App Store Connect gives you some of this data โ€” but for anything involving external marketing, per-link tracking is the only way to connect cause and effect.

The data also compounds over time. After three months of tracking, you'll have a clear picture of which channels are worth your effort. That's when the real value shows up: you stop doing the things that feel productive but aren't, and double down on the things that actually bring in money.

Common objections

"I don't have enough purchases to bother tracking." This is backwards. When you're making 5 purchases a month, each one matters more, not less. Knowing that 4 of those 5 came from Reddit means Reddit is your entire revenue engine. That's worth knowing when you're deciding where to spend your limited marketing time.

"I'll set it up once I'm bigger." By the time you're bigger, you'll have months of unattributed data that you can't retroactively fix. The setup takes about 15 minutes. Do it now and the data will be there when you need it.

"Can't I just ask customers where they found me?" You can, and you should. But self-reported attribution is unreliable. People forget, misremember, or give vague answers ("I saw it on social media somewhere"). Link tracking gives you actual data to compare against what people tell you.

Getting started

If you're using RevenueCat (and most indie iOS developers are), the fastest path is:

  1. Sign up for a tracking tool that integrates with RevenueCat
  2. Create tracked links for each of your active marketing channels
  3. Replace your existing shared links with the tracked versions
  4. Wait for purchases and check which links they're attributed to

The whole process takes less time than writing an App Store description. And unlike the description, it keeps paying off every month by showing you what's actually working.

Stop guessing which of your marketing efforts is making money. The tools to find out are cheap, quick to set up, and will probably change how you spend your time.

Track your marketing links with LinkOwl

5p per sale, no subscription. Know exactly which post, influencer, or campaign drove each purchase.

Start tracking free โ†’