·7 min read·Sam Wild

App attribution without a heavy SDK

Most attribution tools ship massive SDKs that bloat your app, collect data you didn't ask for, and take hours to configure. There's a lighter way to track what's working.

You wanted to know which marketing channel drives purchases. So you looked into attribution tools, found one of the big names, and started reading the integration docs.

Forty-five minutes later you're staring at a page about configuring deep link domains, setting up universal links, adding an App Delegate method, initialising the SDK before your first view loads, and passing seventeen parameters into a tracking call. Your app is a toothbrush timer. It has four screens.

Something has gone wrong with the ratio here.

The SDK problem

Traditional attribution tools like AppsFlyer, Adjust, and Branch ship full SDKs that hook into your app at a low level. They intercept launches, monitor device state, fingerprint network requests, and phone home constantly. There are good reasons they do this — they were built for enterprise marketing teams running hundreds of campaigns across dozens of channels with millions of installs.

But if you're an indie developer or a small team, those SDKs bring real costs.

Binary size. AppsFlyer's iOS SDK adds roughly 2-3 MB to your app. That doesn't sound like much until you've got an app that's 8 MB without it. A 25% size increase for a feature that's not visible to your users is hard to justify.

Privacy surface. Heavy SDKs collect device identifiers, IP addresses, hardware specs, and sometimes location data. Post-iOS 14, this means App Tracking Transparency prompts, longer App Store review times, and privacy nutrition labels that list data collection your app doesn't actually need for its own purposes.

Maintenance. SDK updates break things. Major version bumps require code changes. If you're using Expo or a cross-platform framework, you're adding a native module that might conflict with other dependencies. I've seen developers spend more time debugging their attribution SDK than building features.

Configuration overhead. Most enterprise attribution tools need a dashboard account, a separate deep linking setup, a postback URL, server callbacks, and careful initialisation order. For a solo dev shipping one app, this is a full day of work before you've tracked a single purchase.

What you actually need

Here's the thing most indie developers discover eventually: you don't need device-level fingerprinting or probabilistic matching across ad networks. Those features exist because enterprise customers run paid campaigns on Meta, Google, TikTok, and Snap simultaneously, and need to deduplicate installs across overlapping attribution windows.

If you're doing organic marketing — posting on social media, working with a few influencers, running a newsletter, putting links in Reddit comments — your attribution needs are much simpler.

You need to know: when someone buys my premium tier, which link did they originally tap?

That's it. Not which ad network. Not which device ID. Not which probabilistic fingerprint. Just which of your marketing links started the journey that ended in a purchase.

How link-based attribution works

The lightweight approach skips the device fingerprint entirely. Instead, it works like this:

  1. You create a tracked link for each channel or campaign. TikTok bio gets one, Reddit post gets another, each influencer gets their own.
  2. When someone taps the link, a click is recorded and they're sent to the App Store (or wherever your app lives).
  3. When the person opens your app after installing, a lightweight check matches them to the click. No device fingerprinting — just timing and basic context.
  4. When that person makes a purchase, the purchase is attributed back to the original link.

The entire client-side piece can be a single function call on app launch. No native modules. No App Delegate hooks. No initialisation chains.

What you lose (and why it's fine)

Being honest about trade-offs: a lightweight approach doesn't give you everything an enterprise MMP does.

You lose multi-touch attribution. If someone sees your TikTok, then clicks a Reddit link, then buys — you'll attribute to the Reddit link (last click). Enterprise tools can show the full path. But if you're getting 50 purchases a month, the multi-touch data isn't statistically meaningful anyway.

You lose view-through attribution. MMPs can tell you someone saw an ad, didn't click, but later installed. This matters for paid display campaigns. It doesn't matter for organic content marketing where there's always a link to tap.

You lose ad network integrations. The big SDKs talk directly to Meta, Google, and TikTok ad platforms for postback data. If you're running significant paid campaigns, you probably need those integrations. But most indie developers start with organic, and by the time paid ads make sense, the revenue might justify an enterprise tool.

For the vast majority of sub-10,000-installs apps, none of these missing features change any decision you'd make. You'll still know that TikTok drives 60% of your purchases and that one influencer outperforms the other three combined. That's the information that actually moves the needle.

Setting it up with LinkOwl

LinkOwl was built specifically for this use case. The entire integration is a few lines of code, runs on both Swift and React Native (including Expo), and doesn't require native modules.

For a React Native / Expo app:

npm install @linkowlnew/react-native

Then in your app entry point:

import { LinkOwl } from '@linkowlnew/react-native';

// On app launch
await LinkOwl.initialize('your-api-key');

That's the integration. When someone taps a tracked link and later opens your app, the attribution happens automatically. When they make a purchase through RevenueCat or Superwall, a webhook ties it back to the original link.

No native modules to configure. No universal link domains. No App Delegate methods. The package is pure JavaScript, so it works in Expo Go during development without ejecting.

For Swift apps (including those built with Rork Max or Xcode):

import LinkOwl

// In your App init
LinkOwl.configure(apiKey: "your-api-key")

Same idea. One call on launch, everything else is automatic.

The pricing angle

Heavy SDKs usually come with heavy pricing. AppsFlyer starts at around $200/month after their free tier. Adjust doesn't publish prices but quotes typically start higher. Branch has a free tier but the attribution features are in paid plans.

LinkOwl charges 5p per attributed purchase. Nothing else. No monthly fee, no minimum spend, no contract. If your app makes 50 purchases in a month, that's £2.50. If it makes zero, you pay nothing.

For an indie app that's making a few hundred pounds a month in revenue, the difference between £2.50 and £200 is the difference between attribution being practical and being absurd.

Who this works for

This approach suits you if:

  • You're an indie developer or small team with one or a handful of apps
  • Your marketing is mostly organic: social media, content, influencer partnerships
  • You use RevenueCat, Superwall, or StoreKit for purchases
  • You want to know which channels drive purchases without a full analytics platform
  • You value keeping your app lean and your privacy labels clean

It probably doesn't suit you if you're running six-figure monthly ad budgets across multiple paid networks and need postback integrations with Meta and Google. But if you're reading this article, that's probably not you.

Getting started

The whole setup takes about ten minutes. Create a LinkOwl account, register your app, grab your API key, add the SDK, and create your first tracked links.

The docs walk through the entire process with instructions for VibeCode, Cursor, Rork Max, Bolt, and Xcode. If you're using an AI coding tool, you can literally paste the setup instructions into your prompt and it'll wire everything up.

Then replace your App Store links in your TikTok bio, Instagram, Reddit posts, and influencer partnerships with tracked links. The next purchase that comes through will tell you exactly where it started.

Track your marketing links with LinkOwl

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

Start tracking free →

Related articles

← Back to all articles