ROAS per campaign
Clicks, installs, trials, revenue and spend for every campaign. The click IDs and macros Meta and TikTok 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 and TikTok. 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 · 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 · Hamburg | · |
| 14:05:19 | click | tiktok · creators-q3 · hook-b | iPhone · 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, revenue and spend for every campaign. The click IDs and macros Meta and TikTok 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 SDK, as a Swift Package or for React Native, 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.
Your app’s link is the destination of every ad on Meta and TikTok, with each network’s URL parameters. The network adds its click ID and fills in the campaign; the tap is recorded and the person is sent straight on to the App Store.
// AppDelegate.swift
import TrueOrigin
TrueOrigin.configure(apiKey: "to_…")A Swift Package or the React Native module, and one call at first open. iOS 15 and up, and nothing runs in the background.
Installs appear in the dashboard seconds after the first open. Trials and purchases arrive through RevenueCat webhooks and land on the campaign that brought the install.
Book a call with the founder, or 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.