Skip to content
Sendora Cloud
Create account
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

FREE

Mobile 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

FREE

Run 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_…"

Related