Understand
Attribution
Click + install + post-install event attribution for every campaign you run, with per-channel breakdowns and 7d / 30d windows.
Features
- **Install ingest** — `POST /attribution/install` records install events with source / medium / campaign metadata.
- **Deferred-install match** — `POST /attribution/deferred` + iOS canonical fingerprint match (IP-pinned + 2h window + atomic flip) via the Deep Links module's match function.
- **Stats endpoints** — `GET /attribution/stats` + `.../stats/by-campaign` + `.../stats/by-source` return install counts grouped by attribution dimensions.
- **Per-org config** — attribution settings via `GET/PATCH /attribution/config`.
- **SDK helpers** — `attribution.reportInstall()` + `attribution.checkDeferred()` on RN 0.18.0+ and Web 2.14.0+ (Web's `reportInstall` is rarely useful; `checkDeferred` is for web-app surface).
- **Same `user_id` as the rest of Sendora** — installs land in the same tenant as Auth + Customers + Analytics + Push so joins are SQL/audience queries inside one DB, not warehouse round-trips.
- **Honest non-features:** no multi-touch attribution models (first/last/linear/position) — single-touch only; no cohort LTV or ROAS computation against Analytics events (stats are counts only); no fraud filters (click flooding / install hijacking / CTIT outliers not detected); no S2S postbacks to Meta / Google / TikTok conversion APIs; no Android Play Install Referrer integration (iOS fingerprint is the only deferred path).
Common use cases
- Single-touch install attribution where you already have the source/medium/campaign metadata and just need it logged + queryable beside your customer + event data.
- Web apps using `attribution.checkDeferred()` to match a returning user to a campaign they clicked.
- Build your own LTV / ROAS roll-ups via SQL or the Analytics module against the same tenant — installs are a row your queries can join.
Key concepts
- Click event
- Worker logs every redirect through `go.sendoracloud.com/<shortcode>` to `click_events` with IP hash + UA + geo + referrer.
- Install attribution
- Successful deferred-match flips `click_events.matched=true` so subsequent installs on the same device don't double-resolve.
- Post-install events
- Any event the SDK fires after install is correlatable back to the original click via the matched session.
Attribution
Track an install
FREEMobile SDKs auto-fire on first launch — passes IDFA / Play Install Referrer to the deferred-link matcher. Web pages can call `attributionInstall()` after consent.
await sendora.attributionInstall({
source: new URLSearchParams(location.search).get("utm_source"),
campaign: new URLSearchParams(location.search).get("utm_campaign"),
});Match a deferred deep link
FREERun within a few seconds of first launch. If the user clicked a Sendora link before installing, the matcher returns the original target so you can route them to the right screen.
if let target = await SendoraCloud.matchDeferredLink() {
router.navigate(to: target.path)
}Pull attribution results
STARTER+Server-side: list matched installs filtered by campaign, source, or date range. Use for dashboards or downstream warehousing.
curl "https://api.sendoracloud.com/api/v1/orgs/<ORG_ID>/attribution/results?campaign=spring_2026&from=2026-04-01" \
-H "x-api-key: pk_prod_…"