How to Tell Which Instagram Post a DM Came From (What Meta Tells You, and What It Doesn’t)
Some Instagram DMs arrive with the post that started them attached. The most common kind, someone who saw a post and typed a question, arrives with nothing. Here is exactly which is which, every method for filling the gap ranked by how far you can trust it, and how to report it to a client honestly.
By Kaitlyn Bricker · October 14, 2026 · Instagram, Attribution, Reporting, Agencies

Sometimes Instagram tells you exactly which post a DM came from, and sometimes it tells you nothing. When someone replies to a story, shares one of your posts into the chat, messages from a click-to-DM ad, or continues a conversation that started with your reply to their comment, the message carries a reference to the post or ad. When someone sees a reel, taps through to the profile and types "hi, how much for a party of 10?", it arrives as plain text with no source at all. For most service businesses, that second kind is the majority of leads.
So the honest answer to "which post did this lead come from?" is a mix: automatic where Meta gives you a signal, confirmed by a person where it doesn't, and labelled so the client knows which is which. Here's how each piece works.
What Instagram sends with a DM, and what it doesn't
This is based on Meta's developer documentation for the Instagram Messaging API and its webhook examples, as of October 2026. It's what every inbox tool, Inexra included, actually receives. Meta changes these details from time to time, so it's worth rechecking the docs if you're building anything on top of them.
| How the conversation started | What arrives with the message | Can you tell which post? |
|---|---|---|
| They replied to your story | A reference to the story (its ID and a link) | Yes |
| They shared one of your posts into the DM | The post's media ID and its caption | Yes |
| They clicked a click-to-Instagram-Direct ad | The ad ID and ad details | Yes, for paid |
They tapped an ig.me link with a ref on it | The ref value you set | Yes, if the link was somewhere clickable |
| You replied privately to their comment, and they answered | The comment, which belongs to a specific post | Yes, if your tool sent the reply and remembers the comment |
| They saw a post, opened your profile and typed a message | Just the text | No |
Two details worth knowing. In November 2025 Meta replaced the old "share" attachment, which only carried a link, with one that includes the post's media ID and caption. That makes shared posts much easier to match than they used to be. And private replies to comments have strict rules: you get one message, it has to be sent within seven days of the comment, and you can only follow up after the person replies. That's the rule every comment-to-DM tool runs on, and it's why a keyword campaign stops working on a post that's more than a week old.
Every method for filling the gap, ranked by how far you can trust it
If only the top rows of that table counted, you'd be reporting a fraction of your client's leads. These are the ways agencies fill in the rest, from most reliable to least.
1. Automatic links from Meta's own signals
Story replies, shared posts, ad clicks and comment replies. These are as good as attribution gets: no guessing, no one has to remember anything. The catch is that they only cover conversations that started in those specific ways. Make sure whatever tool you use is actually reading these signals and saving them when the message arrives. Stories disappear after 24 hours, so the story context is easiest to keep if you store it as the message comes in.
2. A teammate confirms the post
For the "saw a post, typed a question" conversations, a person on your team looks at the thread and picks the post. Often the customer gives it away: "saw your reel about the brunch menu," a screenshot, a question about something only one post mentioned. Sometimes the timing does it (three people asking about the same thing the morning after a post went out).
This only holds up if it's done when the conversation comes in, and if it's recorded who made the call. A link confirmed by Priya on 4 October is something a client can trust. A spreadsheet column filled in from memory at the end of the quarter isn't.
Most guides dismiss manual tagging as something that "doesn't scale." In practice it's ten seconds per lead, and leads are the conversations you're already reading closely. It scales fine if it's part of replying rather than a separate job.
3. A unique keyword per post
"Comment BRUNCH and we'll DM you the menu." If every post has its own keyword, the comment tells you the post. It works well for campaigns. It falls apart when keywords get reused across posts (you can no longer tell which one drove the comment), when people DM the keyword instead of commenting it, and after the seven-day private reply window closes.
4. ig.me links with a ref
You can add a ref to your client's ig.me link (ig.me/username?ref=brunch-oct), and Instagram passes that value through when someone taps it to start a chat. It's precise, but only where the link is clickable: bio, link stickers in stories, email, a QR code on a table. It does nothing for a post in the feed, because captions don't have clickable links.
5. "How did you hear about us?"
Asking is worth doing, and research backs it up. When Refine Labs compared what B2B customers said against what attribution software recorded over a year, some channels that customers credited heavily barely registered in the software. But people remember the most recent or most memorable touch, and they'll say "Instagram" without being able to say which post. Treat the answer as supporting evidence rather than the record.
6. UTM links
UTM-tagged links tell Google Analytics that a visit came from Instagram, and they're worth using on everything clickable. But they only see people who click through to a website. A DM that becomes a booking over the phone never touches the website, so it never shows up in analytics at all. For a lot of service businesses, that's most of their Instagram leads.
How to report it so the client trusts it
Once you're linking conversations to posts, report them in layers rather than as one number:
31 conversations this month asked about booking or pricing. 14 linked automatically to the post that started them. 9 confirmed by our team from the conversation. 8 we couldn't trace. The tasting menu reel started 7 of them. 3 have booked so far.
That breakdown does two things. It shows the client exactly how much of the number is solid, which makes the solid part more believable. And "8 we couldn't trace" is honest in a way clients notice, especially if they've had agencies inflate numbers before.
Never blend the layers into a single "we generated 31 leads from content" claim. It's the same total, but a client who later asks "how do you know?" deserves an answer for each one.
When a deal comes from a conversation, credit the first post
Conversations wander. Someone replies to Tuesday's story, chats for a week, sees two more posts, and books. Which post gets the credit?
The rule we use in Inexra, and the simplest one that holds up in front of a client: credit the deal to the earliest post linked to that conversation before the deal was created. It doesn't pretend to measure influence it can't see, and anyone can check it by scrolling up the thread. We go into how to use these numbers at review time in what to show a client at the renewal call.
What Inexra does here
Inexra links conversations to posts automatically for story replies, shared posts and replies to a comment, and suggests the most likely post for everything else (it ranks recent posts whose captions share words with what the person wrote) so a teammate can confirm it in a click. Each link records whether it was automatic or confirmed, and by whom. Reports split the count the same way, "14 automatically and 9 confirmed by your team," and deals are credited through the conversation. If you're doing it by hand, the ladder above works the same way in a spreadsheet: one column for the post, one for how you know.
FAQ
Can you see which Instagram post someone DMed you from?
Sometimes. Instagram attaches the source when someone replies to a story, shares your post into the chat, clicks a click-to-DM ad, taps an ig.me link with a ref, or replies to your private reply to their comment. When someone just opens your profile and types a message, there's no source attached, so a person has to work it out from the conversation.
Does Instagram tell you if someone messaged you from a story?
Yes. A story reply arrives with a reference to the story it replied to. Stories expire after 24 hours, so save that context when the message arrives if you want it for reporting later.
How do I track leads from comment-to-DM automation per post?
Use a different keyword for each post, never reuse them, and remember that Instagram's private reply rules allow one message within seven days of the comment. After that window, the automation can't send, and leads from older posts need to be linked by hand.
Is "how did you hear about us?" accurate enough for client reporting?
It's useful supporting evidence, but people remember the most recent or memorable touch and rarely the specific post. Use it alongside automatic links and team-confirmed links, not instead of them.
Can Google Analytics track Instagram DMs?
No. Google Analytics only sees people who click through to a website. A conversation that starts in DMs and ends in a booking or a phone call never appears there, which is why DM leads need to be tracked where they happen.


