Tracking sales from LinkedIn or X is mostly a solved problem. You put a tracked link in the post, someone clicks it, and if they buy, you know which post did it.
Instagram breaks that in the first step. You cannot put a clickable link in a feed caption, and feed posts and Reels are where most people do most of their posting. So the question "which Instagram post made this sale" is genuinely harder than the same question anywhere else, and most of the advice about it quietly skips the hard part.
This is what actually works, what it costs you in accuracy, and what the number at the end really means.
Where Instagram lets you put a link
Start with an honest inventory, because every method below is built on it:
Clickable. Since 2023 you can hold five. Only the first shows as itself, the rest collapse into 'and 4 other links'.
Clickable, on every account. The old 10,000 follower requirement is long gone.
Not clickable. Text only. This is the whole problem.
Not clickable either, same as feed.
Clickable, but you are sending them one at a time.
Clickable, if you run a product catalogue and sell physical goods.
There is one moving piece worth knowing about. Meta has been testing clickable links inside post captions for Meta Verified subscribers, reportedly capped at circa 10 a month and working on mobile only, with the same link showing as plain text on desktop. I have not had it on my own account, and the reports are secondary rather than from Meta's own newsroom, so I would plan as though captions are not clickable and treat it as a bonus if it lands.
The three ways people solve the feed problem
Every approach is a trade between accuracy and effort. Pick by how much posting you do.
The second one is what most people should run. The first is fine if you post about one thing at a time. The third is a fallback that also happens to be the only method that survives someone screenshotting your post and buying three weeks later.
Rotating the bio link
You put one tracked link in the bio and change it when the campaign changes. Everything published during that window shares the credit.
Honest about what you get: a campaign-level number, not a post-level one. If you posted nine times in that window, you know the nine of them produced $340, and you do not know which of the nine did the work. That is still infinitely better than nothing, and it takes about a minute a week.
A link-in-bio page with tracked destinations
You point the bio at one page you control, put several tracked links on it, and each post tells people which one to look for. "New guide, top link in bio."
Now the numbers separate. The guide link and the product link have their own click counts and their own attributed revenue, so you can see that the guide post drove traffic and the product post drove money, which is a distinction worth having.
The cost is discipline. If your captions do not tell people which link to tap, they tap the first one, and you are back to a campaign-level number with extra steps.
Promo codes
Give a code per post, or per format, or per campaign. REELS10 on Reels, STORY10 in Stories. When someone uses it, the code tells you where they came from without any link at all.
This is the only method on the list that catches the person who saw your Reel on Tuesday, thought about it for a fortnight, and then went to your site directly. It is also the method most likely to be used by someone who found the code on a coupon site, so read it as directional.
Wiring any of this to actual money
A tracked link that only counts clicks tells you Instagram sent 200 people. It does not tell you whether any of them paid. Closing that gap needs the click and the payment to meet:
I wrote the concrete version of this wiring, with the actual Stripe and Shopify setup, in connecting posts to revenue. If you want the naming conventions for the links themselves, that is how to use UTM links.
What Instagram's own numbers give you
Instagram Insights will show you reach, impressions, profile visits, and taps on your bio link. Those are real and useful, and you should look at them.
What they will not do is connect any of it to a payment, because Instagram does not know your Stripe account exists. Profile visits are the last thing Instagram can see. Everything after that happens on your site, which means the join has to happen on your side or not at all.
The practical read: use Insights for what happened on Instagram, use your payment data for what happened after, and accept that the handoff between them is where the loss lives.
The part nobody wants to say out loud
Instagram attribution is a floor, not a total
Some buyers will see a Reel, remember your brand, and type your domain in three weeks later with no link involved. Nothing you install will catch that. Every Instagram revenue number you produce is lower than the truth, and the sensible response is to treat it as a floor you can compare against other floors rather than a figure you defend to two decimal places.
It leaks in four places worth knowing about. The first is the browser handoff: someone taps your link, has a look inside Instagram's built-in browser, then reopens the site properly on a laptop later to actually buy. Depending on the setup, that arrives as two unrelated sessions.
The second is the screenshot. People screenshot the product rather than saving the link, and that sale looks like direct traffic forever after.
The third is sharing. Your post gets forwarded in a DM, the friend buys, and the credit lands wherever their click happened to come from, which might be nowhere.
The fourth is the window itself. Last-click matching over 30 days catches most considered purchases and misses the slow ones, so a month is a reasonable default rather than a fact about buyers.
None of this is an argument for skipping the tracking. It is an argument for reading the output as "Instagram produced at least this much" and then comparing it month over month, where the undercount is roughly constant and the trend is real.
A ten-minute weekly routine
- Open last week's posts and check which ones told people to tap something. The ones that did not are not being measured, and that is a content problem rather than a tracking problem.
- Look at clicks per destination, not per post, unless you are running per-post links.
- Look at attributed revenue next to those clicks. A destination with clicks and no revenue is a landing page problem.
- Note anything that sold without a click. That is your promo code data and your direct traffic, and it belongs in the same review.
Four questions, once a week. If it takes longer than ten minutes, you are measuring more than you will act on.
What I would do first
If you are starting from nothing, do this in order and stop when it hurts:
- Put one tracked link in the bio. Today. Even untargeted, it converts "Instagram probably works" into a number.
- Connect your payment provider so clicks can meet payments.
- Add a link-in-bio page with two or three tracked destinations, once one link stops being enough.
- Add promo codes for the formats where linking is awkward, mainly Reels.
Steps one and two take under an hour together and account for most of the value. Three and four are refinements, and plenty of people never need them.
Where this fits
Instagram is the hardest of the seven networks to attribute, and it is worth understanding why before you conclude your Instagram strategy is failing: the platform is not built to hand traffic to your site, and the numbers reflect that design rather than your content.
There is a fuller guide to scheduling the formats themselves, including which ones can carry a link, on the Instagram scheduling guide. If you want the general model rather than the Instagram-specific version, start with how to track revenue from social media posts.
And if your honest answer to "which Instagram post made money last month" is still a shrug, better analytics will not fix it. One tracked link in the bio will, and it takes about a minute.
