Direct answer
Velvet measures traffic on four separate surfaces, and each answers exactly one question: which link earned the sale, which page earned the signup, which advertising platform bought the click, and which agency claims the fan. Reading one surface for another question is what makes two dashboards disagree about the same week.
Traffic arguments in creator teams are almost always category errors. Someone reads a link report to answer a question about ad spend, or a signup source to answer a question about a specific offer.
The four surfaces below do not overlap. Knowing which one owns which question settles most of those arguments before they start.
Summary
- Link reporting answers which link earned it, over a 7, 30 or 90 day window.
- Landing attribution answers which page earned the signup, recorded as a route pattern rather than a URL.
- Advertising attribution answers which platform bought the click, without keeping a per-click identifier.
- Agency fan attribution answers who claims the fan, and it requires the creator to validate the claim.
Which link earned it
Per-link reporting gives clicks, unique visitors, unlocks and revenue for one link, over a window of 7, 30 or 90 days, with a day-by-day breakdown underneath. Revenue is read only from purchases that actually succeeded, at the creator's net, so a link's figure is what it earned rather than what it was listed at.
- Every query is scoped to the owning creator in SQL, not filtered afterwards.
- Money is integer cents throughout, so the report and the wallet never disagree by rounding.
- Opening the report cannot move a balance: this path never writes wallet state.
Which page earned the signup
When someone signs up, Velvet records the route pattern they first landed on, matched against a list of indexable patterns fixed when the app is built. A path that is not on the list records nothing at all. This is deliberate: a creator handle or a link slug in a raw URL is an identity or a shared secret, and a column on an account row is permanent.
- The stored value is always a constant from the build, never a string the browser chose.
- A page outside the list produces an unattributed signup rather than a misattributed one.
- Answer-engine referrals are recorded as an engine name only, with the path and query dropped before anything is sent.
Which spend bought the click
Paid traffic is attributed to the advertising platform, derived from the name of the tracking parameter rather than its value. The value itself is never read, sent, stored or logged. A per-click token is unique to one visit, so it cannot be grouped and no report can be built from it, while sitting on an account row it would be a permanent cross-site identifier.
- Reporting groups by platform, source, medium and campaign, which is what a budget decision actually needs.
- An auto-tagged click with no campaign parameters is still attributable to its platform.
- Nothing about the individual visitor is retained to make the platform attribution work.
Who claims the fan
When an agency brings a fan to a creator, the claim is recorded with its source type, which is one of link, campaign, message, cross-sell, code or manual, plus the evidence behind it. The claim is not self-approving: it carries a status, and the creator validates it. Agency earnings are then derived from immutable payment allocations rather than recomputed from a live rate.
- Commission terms are snapshotted before the payment provider is involved, with a version number attached.
- The snapshot fixes the rate, the base it applies to, the revenue scope and how recurring sales are handled.
- A remittance obligation records submission, creator confirmation and payment separately, so nobody has to take the other side's word for it.
Outcomes
- Decide which of the four questions you are asking before opening a dashboard.
- Use per-link reporting to judge an offer, never to judge a channel.
- Expect a share of unattributed signups, and treat that as honesty rather than a bug.
- Compare campaigns at platform and campaign level, which is the level the data supports.
- Validate agency fan claims promptly; an unvalidated claim is not an earnings figure.
Questions
Can Velvet tell me which Telegram message produced a sale?
It can tell you which link produced it, and a link can be published in one place at a time. Attribution to a specific message in a third-party app is not something Velvet can observe, and it does not claim to.
Why are some signups unattributed?
Because the landing path was not on the list of indexable route patterns. Velvet prefers a gap in the report over storing a value that names a creator or a link.
Why keep the ad platform but not the click id?
The platform can be grouped and therefore reported on. A click id is unique per visit, so it answers nothing, while remaining a durable identifier for the person who clicked.
Are AI assistant referrals counted separately from search?
Yes, for the assistants that send a referrer of their own. Search engines that answer with AI but refer as their normal domain are left in the search number, because moving them would be a reclassification with no evidence behind it.
Who confirms an agency's claim on a fan?
The creator. The claim is recorded with its source and evidence and carries a status until the creator validates it, and the earnings read model is built from settled allocations rather than the claim alone.
Send one link from one place
The fastest way to trust a tracking setup is to give it a single unambiguous week. Publish one link, promote it in one channel and read all four surfaces.