·5 min read·Sam Wild

How to Track Which Instagram Post Drives App Sales

Most indie devs post on Instagram with no idea which post actually drove a purchase. Here's how to fix that with attribution links.

I spent three months posting on Instagram for my app. Reels, carousels, the whole thing. Downloads trickled in. A few purchases too. And I had absolutely no idea which posts were doing anything useful.

That's not a data problem. That's a dead-end feedback loop. You can't improve what you can't measure.

Why Instagram is particularly bad for attribution

Most platforms at least give you click data. Instagram makes this difficult on purpose. You can't add clickable links to post captions. Stories let you add a link sticker, but only one at a time. Your bio has one link slot. So everyone ends up using a Linktree or a single landing page URL, which tells you nothing about which specific post drove someone to your app.

You post a Reel on Tuesday and get 12 downloads. Did the Reel do it? Was it the Story you shared on Wednesday? Was it someone who saw your post two weeks ago and finally decided to download? You genuinely don't know.

What you actually need is a different link for each piece of content, so you can trace a purchase back to the exact post that started it.

What attribution links actually do

An attribution link is a tracked URL. When someone taps it, the link records the visit and attaches a unique identifier to that user's session. If they go on to download your app and make a purchase, you can match the purchase back to that original tap.

That's it. No complex tracking pixels. No SDK gymnastics for the link itself. The link just needs to exist, be unique per campaign, and feed into whatever purchase tracking you already have.

With LinkOwl, you create a link per campaign. So your Instagram bio link might be lo.app/abc123. Your Tuesday Reel Story link is lo.app/def456. Your pinned post from last month is lo.app/ghi789. Each one is separate. Each one tells a different story.

Setting this up step by step

Step 1: Create a LinkOwl account

Go to linkowl.app/signup and sign up. Free to start. You add your app once you're in.

Step 2: Create your first tracked link

In the dashboard, create a new link for your app. Name it something useful like "Instagram bio — March 2026". Give it your App Store URL as the destination. LinkOwl generates a short link you can use anywhere.

Step 3: Set up purchase tracking

This is where most attribution tools get complicated. LinkOwl has two main options:

If you use RevenueCat, you connect it in the settings page with a webhook URL. When RevenueCat fires a purchase event, it hits LinkOwl's endpoint and the purchase gets attributed to whoever tapped the link.

If you use Stripe directly (for web purchases or server-side), there's a separate webhook for that too.

The Swift SDK is another option if you want to track purchase events natively. It's about 10 lines of code. You initialise the SDK with your API key, then call LinkOwl.shared.trackPurchase(amount:currency:) after a successful StoreKit transaction.

Step 4: Create different links for each Instagram channel

Make one link per content type:

  • Bio link (your main one, changes rarely)
  • Story link for each campaign you run
  • Linktree slot links if you use Linktree

When you post a Reel and want to drive people somewhere, share a Story with a link sticker. That Story gets its own unique link. Now you'll know exactly how much revenue that Reel generated, even if the purchases come in over the next two weeks.

Step 5: Read the data

After a week or two, you'll start seeing patterns. Some posts drive 50 taps and zero purchases. Others drive 8 taps and three purchases. That's the data that tells you what your audience actually responds to, versus what just gets likes.

What the numbers look like in practice

When I started doing this properly, I found that my Reel demonstrating a specific feature converted at roughly 4x the rate of a generic "here's my app" type post. Not what I expected. The posts getting the most engagement were not the posts generating revenue. That's a pretty important thing to know when you're deciding where to spend two hours on a Sunday evening.

The dashboard shows you, per link: visits, attributed installs, attributed purchases, and revenue. You can see the conversion rate from tap to purchase for each link you create.

A few things worth knowing

Instagram's link in bio approach means a lot of traffic goes through one URL. If you change your bio link every campaign, you lose historical data. Better to keep one stable bio link and use Story links for campaigns.

Attribution has a window. By default, LinkOwl attributes a purchase to the last link tap within 30 days. So if someone taps your link on March 1st and buys on March 25th, you'll see it. If they wait 35 days, you won't. That's fine for most content. Adjust your expectations accordingly.

None of this requires a marketing team or an analytics background. You make links, you post content with those links, you look at what converts. That's the whole process.

If you're posting on Instagram and not tracking attribution, you're essentially doing paid work with no way to know if it's paying off. That's fine when you're starting out. At some point it stops being fine.

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