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_id | Deterministic — the nb_click from the redirect
made it into the event. Exact. |
ip_match | Fallback — 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 org | Free 3 · Pro 50 · Scale 500 (it's a paid-tier feature) |
| IP handling | sha256(app_id:ip) only — matchable within your app for
24h, meaningless across apps, raw IP never stored. |
| Reserved events | install, session_start (trigger matching)
· purchase (revenue, needs numeric value). |