ROAS per campaign, ad set and ad
Clicks, installs, trials and revenue for every campaign. The click IDs and macros Meta, TikTok and Google already put in your URL do the naming, so your dashboard reads like your Ads Manager.
Web-to-app attribution for iOS ads on Meta, TikTok and Google. Every install is matched to the click that caused it, with its confidence, and shown next to trials and revenue. No Meta or Firebase SDK in your app.
| time | event | source | device | outcome |
|---|---|---|---|---|
| 14:02:11 | click | meta · summer-lookalike · ugc-v2 | iPhone 15 Pro · Berlin | · |
| 14:03:47 | install | Pulse Fitness · first open | iPhone 15 Pro · Berlin | MATCHED0.97→summer-lookalike |
| 14:05:02 | click | tiktok · creators-q3 · hook-b | iPhone 13 · Hamburg | · |
| 14:05:19 | click | tiktok · creators-q3 · hook-b | iPhone 13 · Hamburg | · |
| 14:06:40 | install | Pulse Fitness · first open | iPhone 13 · Hamburg | AMBIGUOUS2 candidates · not counted |
| 14:09:12 | event | trial started · $59.99 / yr | via RevenueCat | →summer-lookalike |
Built for iOS apps that buy installs on the web and want to know what each ad is actually worth.
Clicks, installs, trials and revenue for every campaign. The click IDs and macros Meta, TikTok and Google already put in your URL do the naming, so your dashboard reads like your Ads Manager.
Every install gets one of three outcomes: matched, ambiguous or unmatched. A match carries its confidence. An ambiguous one is shown, not counted, so over-attribution never inflates your ROAS or your invoice.
One small Swift package you can read line by line, reporting a first open. No Meta SDK, no Firebase, no ad network code in your binary, and no third-party tracking prompt.
No SDK from the ad networks, no server of yours to touch. Three things, in this order.
One link per campaign as the ad’s destination. Meta, TikTok and Google append their click IDs and macros; the tap is recorded and the person is sent straight on to the App Store.
// AppDelegate.swift
import TrueOrigin
TrueOrigin.start(apiKey: "to_live_…")A Swift package and one call at first open. iOS 16 and up, nothing runs in the background, and the source is yours to read before it ships.
Installs appear in the dashboard seconds after the first open. Trials and purchases arrive through RevenueCat or Superwall webhooks and land on the campaign that brought the install.
Tell us about your app and where you buy installs. You’ll hear back from the founder, not a sequence, and early partners shape what gets built next.