When the Source row appears, which moment First contact shows, the difference between the four timestamps, and how to separate people who arrived from ads.
"Did this customer come from the ad or from a comment?" sits at the centre of every budget decision. The section on the contact card answers it in a few lines — but each of those lines points to a different moment, and they are easy to mix up. This guide explains the source information and the four timestamps one by one.
Channel info
💡 A contact record is never created by hand. It opens by itself when a DM, a comment or an ad/link interaction arrives, and every date you see on the card is built around that first interaction.
In this article you will find:
The Source row and when it appears
Which moment First contact shows
The difference between the four timestamps
How to separate people who came from ads and links
The "first contact" condition in a flow
Limits and known issues
Common mistakes
The Source row and when it appears
The Channel info section in the right column of the contact card may contain a Source row. That row is conditional: it is drawn only when a source value is stored on the record. With no source, the row does not appear at all — this is not a fault; it means no source was stored for that person.
Interactions that carry a source arrive from Meta through these routes:
Ad — A conversation started from a "send message" ad.
ig.me / m.me link — The short chat link on your profile or your website.
QR code — A conversation opened by scanning a printed code.
On those three routes Meta sends a source along with the event, plus a ref value if you set one. The ref is the label you put on the link yourself: shopfront, catalogue_p3, may_campaign. It is how you tell campaigns apart.
⚠️ Note: People arriving any other way carry no source information. Meta does not tell you where someone who wrote to you directly, commented on a post or replied to a story came from; no Source row appears on their card.
Which moment First contact shows
First contact is the moment the contact record was created — the moment the panel first saw this person. The First contact column in the CSV file carries the same moment.
There is a subtlety here: the record is created not when the person sends you a message, but when the panel receives any interaction from them. If someone commented on your post in March and sent you their first DM in May, First contact shows March.
So read First contact as "when this person entered my panel", not as "the date of their first message".
The difference between the four timestamps
The contact card and the filters use four different moments. Most confusion comes from not telling them apart:
First contact — When the record was created. Shown in the Channel info section. Written once and never changed.
Last message — When the person last wrote to you. Only messages refresh this stamp. The 24-hour messaging window is counted from it, and the Last message and Quiet for filters look at it.
Our last reply — When the last message sent to this person went out. Messages you sent and messages an automation sent both refresh it. The Awaiting our reply filter compares it with Last message.
Last event — An internal stamp that non-message interactions (comments, ads and links) also refresh. It is not shown as its own row on the card; the "first contact" condition in a flow reads it.
The most important rule is this: a comment or an ad interaction does not open the messaging window. That is why those interactions do not refresh Last message. If somebody commented on your post today but did not DM you, Last message still shows the old date and you cannot send a free-form message. See The 24-hour messaging window.
How to separate people who came from ads and links
There is no "filter by source" option in the contact list. The way to make source useful is to attach a tag at the moment of the interaction:
Create a new automation under Automations.
Add the link/ad trigger as the trigger.
Pick Ad from the Source list (or ig.me / m.me link, or QR code).
To isolate a specific campaign, type the label you put on the link into the ref box.
Add an Action step to the flow and attach a tag such as ad_may with Add tag.
Publish the automation.
From then on, everyone arriving that way is tagged; you filter by the tag on the Contacts screen, save it as a segment and use it in reports.
If you write a different ref for each campaign (may, june), the tag counts tell you how many people each campaign brought in.
The "first contact" condition in a flow
The Condition step in the flow editor has a First contact rule with two options: yes and no.
The rule says whether the current interaction is the person's first contact with the business. It answers "yes" only when the person has had neither a message nor a non-message interaction (comment, ad) before. So for someone commenting for the second time it returns "no"; the condition does not say "new contact" on every event.
The typical use: a long welcome for people writing for the first time, a short "welcome back" for everyone else.
This condition is independent of the First contact row on the card: the row shows a date, the condition tells you whether this interaction is the first one.
Limits and known issues
The Source row is drawn only when a source is stored on the record; on most contacts it is not shown.
There is no filter by source on the Contacts screen. Turn it into a tag (the method above).
Source is not included in the CSV export. The export carries nine columns and source is not one of them.
First contact is the moment the record was created, not the moment of the person's first message.
Last message is refreshed only by messages; comments and ad interactions do not change it.
Source and ref values come from Meta; if Meta does not send them, the panel cannot know them. This is a restriction on Meta's side and applies to every tool using their interface.
Once a contact exists, their source does not change; even if the same person later arrives from an ad, the original record stays as it is.
A worked example
A yoga studio separates interest coming from two different channels:
It puts the link ig.me/m/studio?ref=profile on its Instagram profile.
It prints a QR code on a flyer carrying the ref=flyer version of the same link.
It sets up two automations in the panel: one with Source: ig.me / m.me link + ref: profile, the other with Source: QR code + ref: flyer.
The first adds the source_profile tag, the second source_flyer.
At the end of the month it picks each tag in turn under Contacts → Filters → Tag and reads the count above the list.
How many people the flyer brought in sits next to what the printing cost.
Common mistakes
Looking for the Source row on every contact. It is drawn only on records that carry source information.
Reading First contact as the first message. First contact is when the record opened; a comment may have opened it.
Assuming a comment opens the window. A comment does not refresh Last message, so free-form messages still will not send.
Trying to filter by source. There is no source among the filters; use a tag.
Writing the same ref on every link. You will not be able to tell campaigns apart; give each campaign its own ref.
Trying to correct the source by hand. Source is not an editable field.
If source information is missing on a contact you expected it for, review which route the interaction came through, then get in touch with our Support team.