> ## Documentation Index
> Fetch the complete documentation index at: https://docs.evomarketing.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Creator attribution

> How a sale or app install gets credited back to the creator who caused it

Attribution answers one question: which creator caused this sale? Every answer lands in one ledger table (`attribution_events`) that records **how** it was resolved and **how much to trust it**, so confirmed revenue and modeled revenue never blur together.

## The two ways credit travels

### Links

A creator shares a vanity URL like `tryapp.link/jane`. EVO records the click, mints a click token (`evc_…`), and forwards the visitor.

* **Web:** the visitor lands on the brand site with `?evo_cid=evc_…`. The EVO pixel stores that token and attaches it to the purchase.
* **App:** the visitor gets a smart install page that copies the token to the clipboard, then opens the App Store or Google Play. On first launch the SDK sends the token back, and the install is matched deterministically.
* **No token:** for app links only, EVO falls back to matching the install against the previous 24 hours of clicks by hashed IP and platform.

### Codes

A creator says "use code JANE10". The customer types it at checkout or into the app, and the pixel or SDK sends it with the purchase.

A code is the only path that survives word of mouth, podcasts, and screenshots — nothing has to be clicked. Codes are per brand, so another brand's `JANE10` never credits across.

## What a brand sees

In the client portal under **Results → Attribution**:

| Section               | Contents                                                                                                                                                               |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Overview              | Clicks, installs, sales and revenue for the last 7, 30 or 90 days, with the change versus the previous window                                                          |
| Trend                 | Four small charts, one per metric, with a crosshair and daily values                                                                                                   |
| By creator            | Each creator's clicks, installs, sales and revenue, plus their links and codes                                                                                         |
| Where sales came from | Revenue by source: each billing connector, the pixel, the SDK                                                                                                          |
| Recent activity       | The latest sales, renewals, refunds, trials and installs, with a full paged feed                                                                                       |
| Your links            | Every creator link for the brand with clicks, installs, conversions, and revenue                                                                                       |
| Creator codes         | Each code, its creator, uses, conversions, and revenue (read-only)                                                                                                     |
| Domains               | EVO's shared domains plus the brand's own custom domains                                                                                                               |
| Connect your billing  | RevenueCat, Superwall, Stripe, Shopify, and Apple connections                                                                                                          |
| Developer setup       | Step-by-step tabs for Website, Stripe, Shopify, iOS, React Native and Apple direct, with the brand's pixel key filled in and a one-click digest to hand to a developer |

The list never exposes another brand's data, raw creator user ids, or pixel keys outside the setup section. Link creation stays an EVO team action.

## Confidence levels

Every ledger row stores a `resolution_method` and a `confidence` between 0 and 1.

| Method                 | Confidence | Where it comes from                              | Payout-grade |
| ---------------------- | ---------- | ------------------------------------------------ | ------------ |
| `link`                 | 0.95       | A click token on a purchase                      | Yes          |
| `clipboard`            | 0.95       | A click token pasted at first app launch         | Yes          |
| `code`                 | 0.9        | A creator code the customer typed                | Yes          |
| `subscription_inherit` | inherited  | A renewal or refund adopting its parent purchase | Yes          |
| `ip`                   | 0.6        | Hashed IP + platform match within 24 hours       | No           |
| `unattributed`         | 0          | Nothing matched; the revenue still lands         | No           |

Payout-grade means the method is in `AttributionEvent::CONFIRMED_METHODS` (`code`, `link`, `clipboard`, `subscription_inherit`). `ip` is deliberately excluded: a shared NAT or office network is useful for reporting but is not evidence strong enough to pay a creator on.

<Note>
  A code sits a notch below a click token on purpose. It is deterministic, but a code can be reshared by someone other than the creator who earned it.
</Note>

## Resolution order

An **install** resolves on the first rung that hits: clipboard token → creator code → hashed IP match → unattributed.

A **purchase** resolves: click token → creator code → the attribution its matched install already resolved → unattributed. An inherited purchase copies the install's link, creator, code, resolution method, and confidence.

## Which setup do I need

| Your situation                       | What to set up                                                               | Page                                                  |
| ------------------------------------ | ---------------------------------------------------------------------------- | ----------------------------------------------------- |
| I sell on Shopify                    | Shopify connector, plus the pixel on your theme                              | [Billing connectors](/attribution/billing-connectors) |
| I sell with Stripe                   | Stripe connector, and pass `evo.token()` as `client_reference_id`            | [Billing connectors](/attribution/billing-connectors) |
| I sell on my own site                | The EVO pixel and one `evo("purchase", …)` call                              | [EVO pixel](/attribution/pixel)                       |
| I have an iOS app with RevenueCat    | Mobile SDK, plus the RevenueCat connector and the `evo_install_id` attribute | [Mobile SDK](/attribution/mobile-sdk)                 |
| I have an iOS app with Superwall     | Mobile SDK, plus the Superwall connector and the `evo_install_id` attribute  | [Mobile SDK](/attribution/mobile-sdk)                 |
| I have an app with none of the above | Mobile SDK `trackPurchase`, or the Apple App Store connector                 | [Mobile SDK](/attribution/mobile-sdk)                 |

## Source code and packages

Everything a developer integrates is public. Open an issue on the repository if something in the SDK or pixel does not behave as documented.

<CardGroup cols={3}>
  <Card title="SDK repository" icon="github" href="https://github.com/Evo-Marketing-LLC/evo-attribution-sdk">
    Swift Package, React Native package and the web pixel source, with CI and release notes.
  </Card>

  <Card title="npm package" icon="npm" href="https://www.npmjs.com/package/@evomarketing/attribution-react-native">
    `@evomarketing/attribution-react-native`, published from the repository on every tagged release.
  </Card>

  <Card title="Swift Package" icon="apple" href="https://github.com/Evo-Marketing-LLC/evo-attribution-sdk#swift">
    Add the repository URL in Xcode and import `EVOAttribution`. iOS 15 and later.
  </Card>
</CardGroup>

## Where to go next

<CardGroup cols={2}>
  <Card title="Links and domains" icon="link" href="/attribution/links-and-domains">
    Link anatomy, the smart install page, and connecting your own domain
  </Card>

  <Card title="Creator codes" icon="ticket" href="/attribution/creator-codes">
    Codes that survive word of mouth
  </Card>

  <Card title="EVO pixel" icon="code" href="/attribution/pixel">
    One script tag and one purchase call
  </Card>

  <Card title="Mobile SDK" icon="mobile" href="/attribution/mobile-sdk">
    iOS and React Native drop-ins
  </Card>

  <Card title="Billing connectors" icon="plug" href="/attribution/billing-connectors">
    RevenueCat, Superwall, Stripe, Shopify, Apple
  </Card>

  <Card title="API reference" icon="terminal" href="/attribution/api-reference">
    Public, portal, and internal endpoints
  </Card>
</CardGroup>

## Privacy

EVO never stores raw visitor IPs for this flow. It stores secret-keyed SHA256 hashes, only on app-link clicks, and reads them only inside the 24-hour install-matching window. `Attribution::PurgeClickIpHashesJob` runs hourly and nulls both hash columns on any click older than that window, so the hashes never outlive the one job that reads them. Web-link clicks leave both fingerprint fields empty.
