Canonical events explained
The four canonical events — contact, subscribed, registration, deposit — what each means, when to fire it, and why only deposit carries money.
XTRACKER deliberately uses a closed vocabulary of four events. You always send one of them — never a custom string. This is the single most important design decision in the product, because it's what makes reporting and destination mapping consistent.
The four events
| Event | Fires when | Carries value? |
|---|---|---|
contact |
First touch — the user opened the landing or started the bot | no |
subscribed |
The user joined the channel or started the bot conversation | no |
registration |
The user registered on the offer | no |
deposit |
The user paid | yes — value + currency |
Why a closed set
If every integration invented its own event names, your dashboard and every destination would drown in synonyms — signup, register, reg, lead… Mapping that to Meta's CompleteRegistration would be a nightmare.
Instead, you map your funnel onto these four once. Each destination then translates them to whatever it needs (see event maps). Your app code stays clean and never references a destination.
When to fire each
contact
The earliest signal. Fire it the moment a user lands or sends /start. It's optional but valuable — it's the denominator for your top-of-funnel conversion rate.
subscribed
The user is now reachable: they joined your channel or opened a bot dialog. This is usually your real "lead".
registration
The user created an account on the offer. Pass an eid (the offer's user/trader id) so the event is idempotent.
await send_event("registration", uid=uid, eid=str(trader_id))
deposit
The only event that carries money. Always include value, and ideally currency (defaults to USD) and an eid:
await send_event("deposit", uid=uid, value="25.00", currency="USD",
eid=f"dep-{transaction_id}")
A deposit without a value still records, but it won't move your revenue numbers — so treat a missing value as a bug.
A note on order
Events don't have to arrive in funnel order, and they don't have to all be present. A deposit can land before you ever sent a registration (some networks only postback on payment). XTRACKER stitches everything to the same uid regardless of arrival order.
Next
- Event maps — translate these four to destination-specific names.
- Idempotency & dedup — why
eidmatters forregistrationanddeposit.
Keep reading
How to find and fix the leak in your funnel
A practical walkthrough: use the funnel breakdown and conversion gauge to pinpoint exactly where users drop off, form a hypothesis, fix one thing, and measure the lift.
PlaybookKeep your finger on the pulse: real-time conversion monitoring
A live dashboard isn't a vanity metric — it's an early-warning system. Here's how watching conversions in real time catches broken funnels and dead campaigns before they burn your budget.
PlaybookSame budget, more deposits: optimizing creatives with per-link data
Clicks lie. Deposits don't. Use per-link attribution to see which creative actually drives revenue — then move spend to the winner and kill the losers.