The MMP that shows its work
Meta says 231.TikTok says 214.Stores say 426.
Three dashboards, three answers, and a spreadsheet where you try to reconcile them. Traqio ties each install and each website sign-up to the ad that paid for it, joins your real revenue to your real spend, and shows you the working.
Free up to 2,000 conversions a month. No card, no call.
Deterministic by default on Android and the web · SKAN and Apple Ads on iOS · Meta CAPI + TikTok Events built in
One day of installs, three dashboards
Example dataMeta Ads Manager
installs claimed
231
TikTok Ads Manager
installs claimed
214
Google Play + App Store
new installs, organic included
426
Meta and TikTok claim 445 installs between them — more than the 426 the stores counted in all.
Traqio
426 installs, each one counted once
- Meta118
- TikTok151
- Apple Ads53
- Organic104
Each install is credited to the click it carried, or to organic when no click came with it — then joined to its revenue and to the spend that bought it.
The calculation
ROAS is one division. Here are both of its halves.
Attributed revenue over ad spend, per campaign, ad set and ad. Nothing is modelled and nothing is smoothed — and every figure below adds up, which you are welcome to check.
D30 ROAS · one month of installs
Example data0.92×
Attributed installs
9,666
Blended CPI
$1.60
Revenue comes from your app's events, your website's backend and your RevenueCat webhook, joined to the install or the sign-up that earned it. Spend is pulled daily from each ad network's API, in the ad account's own billing currency.
Per campaign
Meta·Advantage+ app · US
ROAS 1.34×
2,694 installs · CPI $2.16
$7,788 revenue by D30
$5,812 ad spend
TikTok·Spark Ads · creators
ROAS 1.06×
1,467 installs · CPI $1.50
$2,329 revenue by D30
$2,198 ad spend
Apple Ads·Category keywords
ROAS 0.84×
1,583 installs · CPI $1.66
$2,201 revenue by D30
$2,634 ad spend
Meta·Lookalike 1% · UK, CA, AU
ROAS 0.62×
851 installs · CPI $1.74
$913 revenue by D30
$1,477 ad spend
TikTok·Smart+ · broad
ROAS 0.31×
3,071 installs · CPI $1.10Cheapest installs
$1,047 revenue by D30
$3,386 ad spend
The cheapest installs of the month ($1.10 each) returned 0.31×. Pause that one campaign and the same month reads 1.09× instead of 0.92×.
Spend is stored at all three levels, and every read filters by level. An ad's spend is already inside its ad set's, which is already inside its campaign's — summing the table would triple the denominator and cut every ROAS to a third. There is a regression test for exactly that.
How it works
One install, four hops, deterministic by default.
Our click id is written into your tracking link and read back after the store round-trip. For a click, that is the entire mechanism: no device graph, no cross-app identifier. A probabilistic match happens only if you turn it on, for users who consented in your app — and every install it attributes is labelled probabilistic.
- 1
The click
Someone taps your ad on Meta or TikTok. Your tracking link carries our click id.
clk_8f2a3c - 2
Google Play
The Install Referrer carries that id across the store round-trip — the one place Android hands it back intact.
clk_8f2a3c - 3
First open
The SDK reads the referrer once and sends the install — never the pasteboard, and no advertising id unless you switch it on.
clk_8f2a3c - 4
The join
The install is matched to campaign, ad set and ad on the network's own ids. Deterministic: same input, same answer, every time.
clk_8f2a3c
iOS works differently and we will not pretend otherwise. Apple limits everyone to SKAdNetwork's aggregated postbacks there, except for installs from its own ads, which Apple attributes one by one — we verify Apple's signature, decode the conversion value against your mapping, and report modelled revenue separately from measured revenue.
On a website
Same click id, and no store in the way.
A tracking link can land on your site. Our click id rides in the landing URL, waits on your own domain and reaches your backend with the sign-up. That is a shorter trip than an app install's, not a less certain one.
- 1
The click
Someone taps your ad. Your tracking link opens your page, with our click id in the URL.
clk_8f2a3c - 2
Your page
A small script keeps that id first-party, on your own domain. No third-party cookie, no fingerprint.
clk_8f2a3c - 3
The sign-up
Your backend creates the account and reports it — the user's id and the click id, signed with a secret key.
clk_8f2a3c - 4
The join
The new user is tied to campaign, ad set and ad. Their purchases follow them there, whatever page they pay on.
clk_8f2a3c
When the chain breaks — an ad opened in an app's own browser, then a sign-up in another one — the sign-up arrives without its click id and is counted as organic. It is never handed to the nearest campaign.
Why you can believe the number
We would rather show the mechanism than ask for your trust.
We are new, so there are no customer logos to put here and we are not going to borrow anyone else's. What we can do instead is open the box: here is how the number is made, and here is where it can be wrong.
Two senders, one conversion
During a migration you will run us and the network's own SDK at the same time, so every purchase is sent twice. If the two senders disagree on the event id, your conversions double and every ROAS you read is half the truth.
Your app's Meta SDK
sends the purchase from the device
event_id tq1_9c4e17b0a2f8Traqio's server
sends the same purchase via the Conversions API
event_id tq1_9c4e17b0a2f8Meta
conversions counted 1
Same event id, so the second one is discarded. One resolver feeds both connectors, and the id survives our own HTTP retries byte for byte.
Both platforms dedupe on the event id for 48 hours. After that, the same purchase legitimately counts again — that is not a bug, and we would rather say so than let you find out.
Where our number can be wrong
Every measurement tool has a list like this. Most do not print it on the homepage.
- Ad revenue is an estimate
- AdMob reports revenue per impression on the device and tells us how precise each figure is. It will drift a few percent from your actual payout. We chose it anyway, because the aggregate Reporting API cannot be attributed to a campaign at all.
- Spend moves for about three days
- Ad networks restate spend after the fact — late-billed impressions, invalid-traffic credits. We re-pull a rolling window instead of freezing the first number they gave us, so yesterday's ROAS can still shift slightly.
- iOS is aggregated, for everyone
- SKAdNetwork is coarse, delayed and privacy-thresholded. Anyone promising you device-level iOS attribution is describing something Apple does not allow.
- Organic is what is left over
- An install we cannot tie to a click is recorded as organic, not assigned to the nearest campaign. That makes organic a real bucket rather than a rounding error, and it is why our attributed totals are conservative.
- On the web, the click id lives in one browser
- A visitor who taps your ad inside an app's own browser and signs up later in Safari arrives without it, so that sign-up is organic. Safari can also clear an id kept by script after seven days. We count those sign-ups as organic rather than guess where they came from.
Payback
See which campaign pays back, and which one stays in the red.
Cumulative ROAS by days since install, per campaign. A line that crosses 1.0× has earned back its spend. Day 0, the install day, is counted — vendors differ on that; we count it.
Cumulative ROAS per campaign
One month of installs, by days since install
| Campaign | D7 | D30 | Paid back |
|---|---|---|---|
| Meta · Advantage+ app · US | 0.98× | 1.34× | D14 |
| TikTok · Spark Ads · creators | 0.75× | 1.06× | D30 |
| Apple Ads · Category keywords | 0.59× | 0.84× | not yet |
| Meta · Lookalike 1% · UK, CA, AU | 0.43× | 0.62× | not yet |
| TikTok · Smart+ · broad | 0.20× | 0.31× | not yet |
23% of the month's revenue lands on install day. A cohort table that opens at D1 never shows it to you — it shows a smaller number and calls it the total.
Pricing
Three plans. One product.
The free plan is not a trial and not a preview of the real thing. It is the real thing, with a volume cap. The plans differ in how much you send, never in what you get.
Free
$0
2,000 conversions / mo, per product
- Deterministic attribution by default, app installs and website sign-ups
- ROAS per campaign, ad set and ad
- Meta CAPI + TikTok Events forwarding
- SKAN conversion values and postbacks, Apple Ads attribution
- RevenueCat and AdMob revenue
- Retention and ARPU cohorts from D0
Pay-as-you-go
$0.04 / conversion
after each product's first 2,000, each month
- Deterministic attribution by default, app installs and website sign-ups
- ROAS per campaign, ad set and ad
- Meta CAPI + TikTok Events forwarding
- SKAN conversion values and postbacks, Apple Ads attribution
- RevenueCat and AdMob revenue
- Retention and ARPU cohorts from D0
Enterprise
Custom
volume rate, same product
- Deterministic attribution by default, app installs and website sign-ups
- ROAS per campaign, ad set and ad
- Meta CAPI + TikTok Events forwarding
- SKAN conversion values and postbacks, Apple Ads attribution
- RevenueCat and AdMob revenue
- Retention and ARPU cohorts from D0
That list is identical under all three plans, and that is the whole point. What a larger customer negotiates is the rate — never the product.
One install on mobile, one new user on the web: the same counter, the same 2,000 free a month, for each product.
A conversion is one attributed install in an app, and one new user — a user id seen for the first time — on a website. Events are measured and reported, never billed. Organic installs we simply observe are free. Billing is not switched on during early access, so nothing is charged today.
Straight answers
What Traqio is not yet
We just told you where our number can be wrong, so it would be strange to hide what the product does not do. Here is the honest list.
- Android and the web are where attribution is deterministic. On iOS you get SKAN, like everyone else, and Apple Ads' own attribution for installs from Apple's ads — plus, only if you turn it on and your users consent, a probabilistic web-to-app match, labelled as such.
- Spend comes from Meta, TikTok and Apple Ads, and from the main game ad networks such as AppLovin. The Google Ads connector is built but waits on Google's approval of our API access, so there is no Google Ads ROAS yet; other networks are not connected.
- Our JavaScript app SDKs and the website's browser and server SDKs for JavaScript are on npm; the native SDKs are not on their public registries yet. One app SDK is verified end to end on a real device, and the server SDKs end to end against our own API — the install guide says which is which, and how far each one is proven.
- We are not a certified measurement partner at Meta or TikTok yet, so we are not in the MMP drop-down inside your ads manager.
- Billing is not wired. The free tier is genuinely free right now, because there is nothing to charge you with.
No dates attached, deliberately. A roadmap with missed dates is worth less than a clear list of what is true today.
FAQ
The questions you were going to ask
- Why not just use AppsFlyer?
- If you are already on it and it works, stay. The difference that matters is where ROAS lives: on the large platforms the cost integrations that make ROAS complete sit in the enterprise tier, behind a sales call. Here they are in the free plan, because there is only one product.
- Does Traqio measure websites, or only apps?
- Both. A product can be an app, a website, or both. On a website the ad click's own id travels to the sign-up, so the attribution is deterministic, as it is on Android. When your app and your website report the same user id, Traqio sees one person.
- Do I have to integrate another SDK?
- Yes. In an app: one package, an init() call and a track() call. On a website: a small script in the page and one call from your backend at sign-up. We would rather say that plainly than bury it. Six of the Traqio SDKs install from npm today; the others come from a build we send you until they are on their public registries.
- Can I trust your numbers if you have no customers?
- Do not trust them — check them. Every figure on this page shows its inputs, the attribution is deterministic by default — a probabilistic match runs only if you turn it on, and is labelled as one — and the places our number can drift are listed above in plain language.
- What does it cost?
- 2,000 conversions a month free for each product — never pooled across your account — then $0.04 each; an app install and a website's new user count the same. A negotiated rate at high volume. No minimum and no annual contract. No payment provider is wired yet, so nothing is billed during early access.
- Other plans are free at my volume. Why pay for this one?
- Some free tiers in this category are larger than ours, and our comparison pages say so in each vendor's own words, with the date the page was read. What the price buys here is a different thing: one product on every plan, so nothing is taken away as you grow; a rate published before you talk to anyone; and a number that shows the inputs it was built from.
Read further
One page per measurement problem
From attributing an install to the campaign that caused it, to tying a website sign-up to its ad click — each use case on its own page.
Point your spend at the ads that actually pay.
Create an account, declare your product — an app, a website or both —, and get your keys. It takes about a minute, and nobody will call you.
Free up to 2,000 conversions a month. No card required.
Built and shipped by Khufu FZCO. A real person reads hello@traqio.app.