Guide ยท Attribution
Attributing revenue to keywords with RevenueCat
Apple tells you what a keyword cost. RevenueCat tells you what a subscriber is worth. Neither tells you which keywords are worth buying, because that answer only exists when the two are joined, and joining them is left as an exercise for the developer.
Two halves of one number
Apple Ads reporting gives you spend, taps, and installs per keyword. It stops at the install, because that is where Apple's view of the customer ends. RevenueCat picks the customer up from there: trials, conversions, renewals, refunds, and lifetime value.
The gap between them is the entire problem. On one side, a keyword that cost $263. On the other, a subscriber worth $71 a year. Nothing in either system says whether that subscriber came from that keyword.
What the join actually requires
- Spend per keyword, per day. From the Apple Ads reporting API, at the keyword level rather than the campaign level. Campaign totals average away the answer.
- Revenue per day. From RevenueCat, over the same window as the spend. Mismatched windows are the most common way this goes wrong, and the error always flatters the ads.
- A consistent window. Thirty days is a workable default for monthly plans. Annual plans need a longer view or an explicit lifetime-value assumption you write down.
- The organic rank for that keyword over the same period. Without it you cannot tell a keyword that earned its money from one that bought traffic your ranking already had.
Why the fourth item matters more than it looks
Revenue alone can make a bad keyword look excellent. If you already rank #2 organically for a term, ads on it will show attributed revenue, because people did install and did subscribe. They would likely have done so without the ad. That iscannibalization, and only the rank column exposes it.
Doing it by hand
It is entirely possible in a spreadsheet, and worth doing once to see the shape of your data:
- Export keyword-level spend for the last 30 days from Apple Ads.
- Export revenue for the same 30 days from RevenueCat.
- Put them side by side per keyword, with your current organic rank in a third column.
- Sort by spend descending and read the top twenty rows.
Most people find one or two keywords eating a third of the budget and returning nothing. That first pass usually pays for the afternoon.
The reason it does not become a habit is that it is a manual export every time, it goes stale in a week, and rank has to be collected separately and daily.
Common questions
Can RevenueCat attribute subscription revenue to Apple Search Ads keywords?
RevenueCat records what each subscriber is worth, and Apple Ads records what each keyword cost. Neither holds both halves. Joining them means matching the install that RevenueCat sees to the keyword Apple charged you for, over the same window, which is work you do yourself or with a tool that does it for you.
Do I need RevenueCat to use Apple Search Ads data?
No. Rank, spend, installs, and cost per install work without it. What you cannot answer without a revenue source is whether a keyword earned more than it cost, which is the only question that decides a budget.
Why not just use cost per install?
Because two keywords with the same cost per install can differ several times over in what those installs are worth. CPI ranks keywords by what they cost. Revenue ranks them by whether they should exist.
Does this work for apps without subscriptions?
The same join applies to any revenue source you can attribute per user. Subscriptions are simply the common case, and the one where the delay between install and revenue makes the guesswork worst.
How Veldo does it
Veldo connects your Apple Ads account and, optionally, RevenueCat, then performs this join on your Mac every day: rank, spend, and attributed revenue on one row per keyword, with a verdict attached. The RevenueCat connection is what makes the revenue column possible; without it the app still tracks rank, popularity, spend, and installs, but it can only judge keywords on installs rather than on money.
Credentials live in your macOS Keychain and the database stays on your machine. Seethe three-signal model for how the verdicts are derived.