Ask anyone running paid traffic what their worst reporting problem is and you get the same answer. The leads arrive, and nobody can say which campaign produced them. The ad platform claims more conversions than the inbox contains. The spreadsheet reconciling the two is somebody's Friday.
The usual fix is a tag manager, three container versions, and a data layer that a developer maintains. We wanted the answer to be a column in a table instead.
Stamp at submit, on the server
When someone lands on a page, the query string carries whatever the ad platform put there. We capture it once, keep it with the session, and attach it to the submission on the server rather than asking the browser to remember and re-send it. Ad blockers, a bounced tab, a refresh from a bookmark: none of them lose the stamp, because the stamp is not the browser's job.
Every lead therefore arrives with its source, medium, campaign, the landing URL it came through, and the consent state at the moment of submission. Those are columns in the inbox, not a report you build later.
Inbox first, fan-out second
The order matters more than it sounds. The write to your inbox is the transaction. Everything after it is delivery: the notification email, the Slack message, the conversion event to Meta, the row in Sheets, the contact in your CRM.
If we fired the pixel first and the storage write failed, the ad platform would optimise towards a lead you can never contact. That is the worst possible failure because it is invisible and it compounds daily.
One queue, one retry policy
Every destination is a row on the same delivery queue. That gives each lead a timeline you can actually read:
- Stored in inbox, 09:12:04
- Email to reservations, 09:12:05
- Slack, 09:12:05
- Conversions API, deduplicated by event id, 09:12:06
- CRM contact, retry one of five, in forty seconds
When a hand-off fails it says so, with the attempt count and the next retry. Compare that with the normal experience, which is discovering three weeks later that the CRM integration stopped working and nobody noticed because nothing ever said it had.
Deduplication is not optional
Browser pixel and server-side event both report the same lead. Without a shared event id the ad platform counts it twice and optimises against inflated numbers. We mint the id at submit and send it on both paths, which is unglamorous and removes an entire category of argument about whose numbers are right.
What we do not do
We do not build a profile of the visitor, and we do not sell what we collect. The stamp exists so a merchant can answer one question about their own traffic. Consent Mode is on by default in the EU and the UK, which means in those regions nothing fires until somebody says it can.
