Most analytics dashboards answer one question well: how many people visited. That is useful, but it is not the question that keeps a business alive. The question that matters is which visitors paid you, and where did they come from?
That is what revenue attribution answers. It connects each sale to the visit that led to it, so you can rank your traffic sources by money instead of by clicks.
Why visits are a misleading number
Imagine two channels. Reddit sends you 4,000 visitors a month. A small newsletter sends you 300. On a normal dashboard, Reddit looks like the winner by a mile.
Now add revenue. The Reddit visitors bought 6 times for $180. The newsletter readers bought 22 times for $1,540. The newsletter is worth eight times more, from a fraction of the traffic.
Without attribution you would double down on Reddit and quietly starve the channel that pays your bills. This happens all the time, because visitor counts reward whatever is loud, not whatever converts.
How revenue attribution works
The idea is simple. You need two things to meet:
- The visit: where the person came from (a search engine, a post, an ad, a newsletter link), which pages they saw, and when.
- The payment: the sale from your payment provider, with the amount and the customer.
Attribution links them by recognising that the person who paid is the same person who visited. Once that link exists, every report you already use (sources, campaigns, countries, pages) can show money next to visitors.
Matching a sale to a visitor
There are three ways to make the match, from most to least precise:
- Pass the visitor id at checkout. The tracking script gives each visitor an id. Send it with the checkout (for example in Stripe metadata) and the sale is tied to that exact visitor.
- Match by email. If the buyer's email was seen earlier (a signup form, for example), the sale is matched to that visitor.
- Count it as unknown. If neither works, the sale still counts toward your revenue, filed under Direct / Unknown, so totals stay correct even when the source is missing.
In NoirTrack you connect your payment provider once (Stripe, Paddle, Polar, Lemon Squeezy, Dodo Payments or Creem) and sales sync on their own. For anything else there is a Payment API. The full setup is in How revenue tracking works.
First touch, last touch, and why it matters
A customer might find you through a Google search, leave, come back a week later from your newsletter, and then buy. Which channel gets the credit?
- First touch credits the channel that introduced them (Google here). It tells you what brings new people in.
- Last touch credits the channel right before the sale (the newsletter). It tells you what closes.
Neither is wrong. They answer different questions. For small teams, first touch is usually the more useful default, because the hardest and most expensive part of growth is getting discovered at all. NoirTrack attributes revenue to the first touch, and the visitor profile shows every later visit if you want the full story.
What to do with the numbers
Once revenue sits next to traffic, a few decisions become obvious:
- Rank sources by revenue, not visitors. Sort your sources by money. The top three are where your next hour of effort should go.
- Check revenue per visitor. A source with fewer visitors but higher revenue per visitor is cheaper to grow. Double what works before chasing what is big.
- Cut what never converts. A campaign with lots of clicks and no sales after a month is telling you something. Stop paying for it.
- Tag every link you share. Untagged links all blur into Direct or a generic referrer. UTM parameters keep each post, email and ad separate.
Common mistakes
- Looking only at the last 7 days. Many customers take weeks to decide. Look at 30 or 90 days before judging a channel.
- Forgetting refunds. A channel that sells a lot and refunds a lot is not a good channel. Make sure refunds subtract from revenue.
- Letting bots into the denominator. If 40% of your "visitors" are bots, every conversion rate you calculate is wrong. More on that in why bot traffic is lying in your analytics.