How to Track Apple Search Ads Revenue With RevenueCat
Use RevenueCat revenue events with Apple Search Ads spend to see which campaigns and keywords create trials, subscriptions, renewals, and ROAS.

RevenueCat knows what happened to a subscription. Apple Ads knows where the paid search spend went. Keyword ROAS appears only after you connect those records to the same install.
For AppSprint, that connection has three parts:
- Apple AdServices attribution captured by the SDK.
- Apple Ads reporting data for spend, taps, impressions, campaigns, ad groups, and keywords.
- RevenueCat webhooks matched through the appsprintId subscriber attribute.
Miss one part and the dashboard may show installs without revenue, revenue without a keyword, or spend without a matched subscription cohort.
What RevenueCat adds to Apple Ads
Apple Ads can report delivery and acquisition metrics. RevenueCat continues tracking the customer after the install.
Useful RevenueCat events include:
- A trial-period initial purchase.
- A normal initial purchase.
- Trial conversion and renewal.
- Cancellation or expiration.
- Billing issues and product changes.
- Non-renewing purchases.
- Refund-related lifecycle changes.
Those events matter because the value of an Apple Ads keyword rarely ends at download.
| Source | What it contributes |
|---|---|
| Apple Ads reporting | Spend, impressions, taps, campaigns, ad groups, keywords |
| Apple AdServices | Install attribution IDs and country context |
| RevenueCat | Subscription lifecycle and transaction revenue |
| AppSprint | Identity matching, joined reporting, and keyword ROAS |
RevenueCat is not the system deciding which ad caused the install. Its documentation describes it as a subscription platform that can store attribution fields and exchange events with attribution providers. The acquisition source still has to come from Apple AdServices, an MMP, or your own attribution backend.
If you are deciding whether RevenueCat alone is enough, read RevenueCat attribution versus an MMP.
Step 1: capture the Apple Ads install
Install and configure the AppSprint SDK before sending production campaign traffic.
On supported iOS versions, the SDK requests the Apple AdServices attribution token and sends it to AppSprint. Apple's response can identify the campaign, ad group, keyword, country, conversion type, and claim type when those fields are available.
Search Match installs may not include a keyword ID. Keep those conversions in a separate Search Match bucket rather than forcing them into a named keyword.
The attribution token expires after 24 hours, so collect it during the early app experience. A user who opens the app after the token has expired may remain unmatched.
The current Apple Search Ads integration guide covers SDK support and troubleshooting.
Step 2: connect Apple Ads reporting
Attribution identifies the paid install. The Apple Ads API connection adds the media cost and delivery data needed for ROAS.
In AppSprint:
- Open the app's Apple Search Ads integration.
- Create an Apple API certificate with the AppSprint public key.
- Copy the Client ID, Team ID, and Key ID into AppSprint.
- Add the numeric App Store ID.
- Save and let AppSprint validate the Campaign Groups the certificate can access.
This connection supplies spend, impressions, taps, and Apple-reported installs. Stable Apple IDs from the attribution record can then be enriched with current campaign, ad-group, and keyword names.
Step 3: add the RevenueCat webhook
Create a webhook in RevenueCat under the project integrations.
Use the app-specific URL shown by AppSprint:
https://api.appsprint.app/v1/integrations/revenuecat/webhooks/your-app-id
Set the Authorization header to the Bearer token shown in the AppSprint RevenueCat integration. The token prevents an unrelated sender from posting purchase events to the endpoint.
RevenueCat can send production purchases, sandbox purchases, or both. AppSprint can use a sandbox delivery to verify that the endpoint and authentication work, but it does not create attributed production events or outbound ad conversions from sandbox transactions.
The current RevenueCat integration guide has the exact URL and token for the selected app.
Step 4: save appsprintId in RevenueCat
The webhook needs a shared identity.
After the AppSprint SDK is configured, read the install ID and save it in RevenueCat as a subscriber attribute named appsprintId.
The order matters:
- Configure AppSprint.
- Get the AppSprint install ID.
- Set the RevenueCat subscriber attribute.
- Let the customer continue through the paywall and purchase flow.
When RevenueCat later sends a trial, purchase, or renewal webhook, that attribute lets AppSprint find the original install and its Apple Ads attribution.
Do not fill the attribute with a placeholder while waiting for the real value. Save the stable install ID once it exists.
Step 5: validate the path in layers
Do not wait for a large campaign to discover a missing identity field.
Confirm the install
Open the app on a fresh test device and confirm a new AppSprint install appears. For a paid production test, verify the Apple campaign or Search Match attribution is present.
Confirm the subscriber attribute
Open the RevenueCat customer profile and check that appsprintId exists with the expected value.
Confirm the webhook
Send a RevenueCat test or sandbox delivery to verify the URL and Authorization header. Then check the AppSprint integration status.
Confirm production attribution
Run a controlled production purchase when practical. Verify the full chain:
Apple Ads install -> AppSprint install -> RevenueCat subscriber -> production webhook -> attributed revenue
This last step is the one that proves keyword ROAS can work. A green webhook status by itself only proves that AppSprint can receive the request.
Read the RevenueCat event mapping
AppSprint maps the main RevenueCat lifecycle events into a smaller attribution event set.
| RevenueCat event | AppSprint result |
|---|---|
| Initial purchase with a trial period | Trial start |
| Normal initial purchase | Purchase |
| Renewal, including trial conversion | Subscription |
| Uncancellation | Purchase |
| Non-renewing purchase | Purchase |
| Cancellation, expiration, billing issue, product change, pause, transfer, refund reversal | Custom lifecycle event |
Keep the raw lifecycle event available for investigation. A cancellation does not mean the same thing as an expiration, and a billing issue does not equal a voluntary churn decision.
RevenueCat webhooks also include transaction and subscriber context when available, such as product, store, price, currency, purchase time, expiration time, aliases, and subscriber attributes.
Build a keyword report that respects trial maturity
The first report should stay small:
| Metric | Why it matters |
|---|---|
| Spend | Budget exposed to the keyword |
| Attributed installs | Paid first opens connected to Apple |
| Trial starts | Early subscription intent |
| Mature trials | Trials that had time to finish |
| Paid subscriptions | Customers produced by the cohort |
| Revenue | Attributed transaction value |
| ROAS | Revenue divided by spend |
| Refund and cancellation context | Revenue-quality warning |
Keep active trials out of the mature trial-to-paid denominator. A seven-day trial acquired yesterday has not failed.
The free-trial ROAS guide shows how to compare cohorts at the same age.
Diagnose mismatched numbers
RevenueCat, Apple Ads, and AppSprint will not always show the same totals.
Check these causes before assuming the integration is broken:
Different dates
Apple can report media activity by ad interaction or reporting date. RevenueCat events arrive on purchase and lifecycle dates. Cohort reporting credits later revenue back to the acquisition group.
Different currencies
Apple spend and RevenueCat transaction values may use different currencies or conversion methods. Normalize before calculating account-level ROAS.
Search Match has no keyword
Apple can attribute an install to Search Match without a keyword ID. The campaign and ad group may still be known.
The install was never attributed
An organic or unmatched install can still become a RevenueCat subscriber. The revenue is real, but it does not belong to an Apple keyword.
appsprintId is missing
The webhook reaches AppSprint, but the event cannot find its install. Confirm the attribute is present for the exact RevenueCat customer who purchased.
The event is sandbox
Sandbox transactions verify plumbing. They do not enter AppSprint's production attribution reporting.
The cohort is still active
An Apple dashboard can show a completed install while the RevenueCat trial has not reached its paid decision.
Turn the report into keyword decisions
Use the full funnel before changing bids.
| Pattern | First action |
|---|---|
| Spend with few installs | Review bid, relevance, and product-page conversion |
| Installs with no trials | Improve onboarding or search-intent match |
| Trials with weak paid conversion | Review the offer, product, and keyword quality |
| Paid users with weak ROAS | Lower acquisition cost or improve revenue |
| Good mature ROAS with low impression share | Test a careful bid increase |
| Good keyword revenue in paid search | Research the same intent for ASO |
The keyword ROAS playbook covers bidding and campaign structure once measurement is trustworthy.
Historical data has a hard limit
A new webhook can deliver current subscription events for an existing customer, but it cannot reconstruct an Apple Ads source that was never captured at install.
Mark the date when all three components went live:
- Apple attribution capture.
- appsprintId in RevenueCat.
- Authenticated production webhooks.
Treat cohorts acquired after that date as the clean measurement period. Keep older revenue for business totals without pretending its keyword attribution is complete.
What to do next
Connect the Apple Ads API, add the RevenueCat webhook, and confirm appsprintId on one test subscriber. Then run one controlled production path before you use the report for a bid decision.
Connect RevenueCat to AppSprint to join trials, subscriptions, renewals, and revenue to the Apple Ads install and keyword that produced them.
Sources
- RevenueCat webhook event types and fields - Current subscription lifecycle events, transaction fields, and subscriber identity
- RevenueCat webhooks - Current authorization, production, sandbox, and test behavior
- RevenueCat customer attributes - Current subscriber attribute behavior and reserved attribution fields
- Apple AdServices - Apple's install attribution framework
- AppSprint Apple Search Ads integration - Current SDK and reporting API setup
- AppSprint RevenueCat integration - Current appsprintId, webhook, and event mapping
Research, analyze, optimize
Find the right keywords, study the competitors already earning attention, and turn that into a stronger App Store page.
Available for macOS 14.6 and above
Loved by 544 users
Related articles
See all posts →
When to Pause an Apple Search Ads Keyword
Pause Apple Search Ads keywords when mature spend, weak funnel signal, and poor ROAS show the search intent is not paying back.

How to Track Apple Search Ads Revenue With Superwall
Use Superwall subscription events with Apple Search Ads attribution and spend to measure trials, paid conversions, revenue, and keyword ROAS.

Apple Search Ads for Subscription Apps
Subscription apps need a different Apple Search Ads workflow: trial maturity, renewal revenue, keyword ROAS, and careful bid decisions.