XTRACKER

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 across the funnel

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 yesvalue + 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