Install & revenue attribution

Answer "which campaign brought the users who actually pay?" without adding another SDK. Attribution is built into Notibase natively — the same reserved events that power segments close the loop from a shared link to install to purchase.

1 · Create a link

Dashboard → your app → Attribution → Create link. Or via API:

POST /v1/orgs/:orgId/apps/:appId/links
{ "name": "Launch tweet", "url": "https://play.google.com/store/apps/details?id=…",
  "campaign": "launch", "channel": "social" }
→ { "slug": "aB3xK9_w", "url": "https://api.notibase.com/l/aB3xK9_w" }

Put that short link in the tweet, email, QR code, ad. Every click is recorded (IP is stored only as an app-scoped hash — never raw) and the visitor is redirected to your destination with ?nb_click=<id> appended.

2 · The SDK closes the loop

// web: automatic — the SDK captures ?nb_click from the landing URL
nb.track("install");        // or session_start on first run

// android
Notibase.track("install")   // pass nb_click if your install flow carries it

Matching is two-tier and honestly labeled in the data:

click_idDeterministic — the nb_click from the redirect made it into the event. Exact.
ip_matchFallback — the freshest click from the same network (app-scoped IP hash) within 24 hours. Inferred, shown separately in stats.

First touch wins: a device is attributed at most once, ever. Later clicks and repeat installs never rewrite history.

3 · Revenue

nb.track("purchase", { value: 9.99, currency: "USD", item: "pro" });

Purchases from attributed devices roll up per link: clicks → installs (exact vs inferred) → purchases → revenue, in the dashboard and via GET /v1/orgs/:orgId/apps/:appId/links.

Limits & privacy

Links per orgFree 3 · Pro 50 · Scale 500 (it's a paid-tier feature)
IP handlingsha256(app_id:ip) only — matchable within your app for 24h, meaningless across apps, raw IP never stored.
Reserved eventsinstall, session_start (trigger matching) · purchase (revenue, needs numeric value).