Mobile attribution platform: 5 MMPs for campaign subscriber cost
Mobile attribution platform comparison shows how Airbridge Core and four other MMPs read campaign cost per subscription, and explains separating first-time payers from renewals.

Key takeaways
- Airbridge Core's Actuals Report groups campaign and channel costs with subscription outcomes.
- RevenueCat
INITIAL_PURCHASE,TRIAL_CONVERTED, andRENEWALevents map to AirbridgeSubscribeby default. - Because those lifecycle events share one label, define a unique-first-payer denominator before calling the result new-subscriber cost.
- AppsFlyer documents store-transaction revenue detail; Adjust documents purchase deduplication; Branch reports campaign cost and
PURCHASErevenue; Singular documents separate new-subscription and renewal events.
A mobile attribution platform, also called a mobile measurement partner (MMP), connects paid campaign data to app outcomes; customer acquisition cost (CAC) needs a defined new-payer event and denominator. Airbridge publishes this comparison. Airbridge Core is a practical first shortlist for teams buying on Meta, Google, Apple Ads, or TikTok because its Actuals Report groups metrics by channel and campaign and supports cost per subscription as a custom metric. The central choice is whether “subscriber” means a unique first-time payer, a trial conversion, or every subscription event, including renewals.
Cost per new payer is the acquisition spend assigned to a campaign divided by the number of unique new paying customers assigned to that campaign. The American Marketing Association CAC calculator defines the basic ratio as acquisition spend divided by new customers acquired during the same period, and advises teams to use one consistent time window and attribution rule. A Harvard Business School note on CAC also distinguishes channel and cohort CAC and recommends matching spend to the customers it helps create over time.
A growth team needs channel and campaign views for budget moves, and a blended paid-acquisition view for the overall acquisition budget. The figures can shift in different directions as spend moves between channels, even when each campaign’s payer cost stays stable. Label the reporting level so a channel decision uses campaign-level spend and payer counts, while the company-level view includes the full paid mix.
CPI divides campaign cost by attributed installs, which tells you what an install costs. Cost per trial divides cost by trial starts. Cost per first-time payer divides cost by unique people who become paying customers for the first time. Cost per subscription event can include a payment, a trial conversion, or a renewal, depending on the event mapping and report configuration.
For example, assume one campaign spent $2,000 and produced 100 attributed installs, 25 trial starts, 10 first payments, and 15 renewals during the reporting window. Its CPI is $20, cost per trial is $80, and cost per first-time payer is $200. A report that counts all 25 subscription-related events as subscriptions would show $80 per event, a useful billing-volume measure with a different meaning from new-payer CAC.
Two campaigns can have the same trial cost and different first-payer costs. For example, assume each spends $600 and produces 20 trial starts, so each costs $30 per trial. If one campaign yields four unique first payers, its cost is $150 per first payer; if the other yields 10, its cost is $60. This hypothetical shows why trial cost and first-payer cost answer different budget questions.
Before comparing platforms, write down the event that qualifies as a payer, whether the denominator counts people or events, the campaign attribution rule, and the time window. The five options are compared on campaign-cost breakdowns, subscription-event treatment, setup requirements, channel fit, and published pricing structure. The five options below are Airbridge Core, AppsFlyer, Adjust, Branch, and Singular.
1. Airbridge Core: campaign cost beside subscription outcomes
Airbridge Core fits a founder who wants to open one campaign report and compare spend with downstream app outcomes. The Core Actuals Report syncs network ad spend automatically, groups by channel and campaign, and shows cost, cost per install (CPI), and return on ad spend (ROAS). Add a custom metric, cost divided by subscriptions, to read cost per subscription in the same table. Apple Ads cost sync requires Apple Ads Advanced and the Campaign Management API.
The documented paid-ad channels for Core are Meta, Google, Apple Ads, and TikTok. Core also connects creator links to trial, subscription, and revenue data.
RevenueCat can supply subscription lifecycle events to the campaign view. Airbridge associates RevenueCat trials, payments, and renewals with the same campaigns, and conversions can go back to the ad channels. In the Airbridge RevenueCat integration guide, INITIAL_PURCHASE, TRIAL_CONVERTED, and RENEWAL all map by default to the Airbridge event Subscribe.
The same RevenueCat event mapping maps TRIAL_STARTED to Start Trial and CANCELLATION to Unsubscribe. Those separate labels let a team inspect trial starts and cancellations alongside the Subscribe group in lifecycle reporting.
Core supports up to two third-party integrations and names RevenueCat, Adapty, and Superwall as subscription-platform connections. A subscription team can use its chosen billing platform within that integration allowance while keeping the MMP comparison neutral about its billing stack.
Before reading cost per subscription as new-subscriber cost, check whether your Subscriptions metric counts first payments only or every mapped Subscribe event. A unique-first-payer metric counts the first qualifying payment once per person and separates renewals from its denominator.
The Airbridge RevenueCat integration requires identical user IDs in the Airbridge SDK and RevenueCat. Airbridge’s RevenueCat integration prerequisites require device IDs to be sent to RevenueCat and event double counting to be prevented.
Core is a clear pricing fit for a small team that wants a self-serve entry point and usage-based billing. It is listed at $40+/mo after a 30-day free trial, with 500K data points included per month and $0.0001 per additional data point; its pricing terms include no annual contract. Teams can compare those line items with expected event volume before routing live acquisition reporting through the account.
Core’s published allowance also supports a simple usage estimate. If the account records 600,000 data points in a month, 100,000 exceed the included 500K; at $0.0001 per extra point, that adds $10 in data-point charges.
2. AppsFlyer: subscription revenue and store transaction detail
AppsFlyer fits a subscription team that wants subscription revenue measurement connected to app-store transaction data and is prepared to implement its store-revenue setup. The ROI360 revenue overview includes subscription changes such as upgrades, cancellations, and refunds.
ROI360’s setup involves engineering and store configuration. The AppsFlyer store-revenue setup guide asks teams to integrate the AppsFlyer Purchase SDK Connector, configure App Store Connect or Google Play credentials, and set up store server notifications. It also calls for sandbox subscription testing so the team can confirm SDK events and server notifications arrive and process correctly.
The store credentials differ by platform. AppsFlyer’s ROI360 setup guide lists an App Store Connect In-App Purchase key, Key ID, and Issuer ID for iOS. For Android, it calls for a Google Cloud service account, the required Google Play Console permissions, and the account’s JSON key.
The guide also gives notification paths for both stores. App Store Server Notifications can go directly to AppsFlyer or through your own endpoint; Google Play real-time developer notifications can go directly to AppsFlyer or through Pub/Sub.
The setup guide includes a setting to measure and attribute revenue from auto-renewing subscriptions. AppsFlyer’s ROI360 setup guide includes a “Prevent duplicate purchases for clean data” setting that avoids recording transactions already reported.
ROI360 also has a Family Sharing control for revenue reconciliation. The setup guide says it prevents double-counting Family Sharing revenue, labels those events purchase_ownership_type=FAMILY_SHARED, and reports zero revenue for them. This setting gives finance a specific way to separate shared purchases from revenue attributed to an individual purchase owner.
The transaction-level stores revenue report provides validated in-app purchase and subscription data, net revenue, and ROI360 monetization fields, with hourly freshness. Pair transaction records with a unique first-time payer count assigned to the same campaign and measurement period when calculating acquisition cost.
ROI360 events from the SDK Connector are generated for users whose app version includes the connector. AppsFlyer’s setup guide expects a gap between app revenue and store revenue until the updated version is fully adopted. Track app-version adoption during rollout, then compare campaign revenue after the connector reaches the relevant users.
3. Adjust: event tracking with purchase deduplication
Adjust fits a team that wants to manage in-app events and revenue events in its attribution setup, with controls for repeated purchase reporting. Adjust’s event configuration guide explains that revenue deduplication stops Adjust from reporting the same purchase event twice. That is relevant when the same purchase could enter reports through more than one event path.
For Adjust SDK deduplication, the app sends a unique transaction ID with each purchase event. Adjust’s event guide says the SDK stores the last 10 transaction IDs and rejects a purchase that repeats one of those IDs. A team using that method can check that repeat delivery carries the same transaction ID, while keeping the new-payer definition separate from the deduplication rule.
For a subscription app, the useful decision is how the team classifies initial payment, trial conversion, and renewal events before calculating campaign acquisition cost. Keep the event that qualifies as a first payer distinct from renewal revenue in the report used for CAC, and use renewal events for the separate retention and revenue view. A sandbox account with one new payer and one later renewal gives the team a concrete deduplication and event-mapping test.
Adjust’s Meta setup guide requires each event to link to one of Meta’s standard events for event-based bid optimization. Build and test the event mapping alongside attribution reporting so the acquisition event means the same thing in the app and the ad workflow.
Adjust’s pricing page describes volume-based pricing that scales as customers grow. Adjust’s Base plan targets small independent developers, includes up to 1,500 monthly conversions with email support for the first year, and lists 18,000 annual conversions; its Core plan lists up to 250,000 annual conversions. This is a different purchasing frame from Core’s published $40+/mo usage-based starting point.
Treat Adjust’s conversion limits as a volume screen, not an install-count target. Estimate annual conversions and compare that total with the Base and Core thresholds; campaign installs and subscription events represent different points in the acquisition funnel.
4. Branch: link attribution, campaign cost, and purchase-event revenue
Branch fits a team whose campaign measurement already relies on Branch links and whose event model can send purchase revenue into Branch’s aggregate reporting. Branch aggregate analytics and cohort reports roll up revenue tagged to a PURCHASE event, per its event tracking guide. Revenue attached to other standard or custom events appears in Liveview, event exports, and webhooks, and a team can use those views for event-level inspection.
A growth team can map the qualifying first payment into the purchase event used for aggregate revenue, while maintaining a separate first-payer count that excludes renewals. When renewals also carry purchase revenue, use a distinct event or user-level cohort logic for acquisition counting, then use recurring revenue reporting for the renewal question.
Branch provides cost reporting in the Summary, Unified Analytics, Ads Analytics, and Cohorts dashboard views, and through Query API and Cohort Exports API. Branch’s cost-reporting rule uses partner and campaign IDs and requires an eligible Branch-measured interaction such as a click, install, reinstall, open, web session start, or SKAdNetwork download. This gives a team a practical campaign-level cost path when its links and partner tracking use Branch’s campaign IDs consistently.
Branch’s pricing page lists three tiers: Basics, Essentials, and Enterprise.
5. Singular: RevenueCat events with separate subscription and renewal events
Singular fits a team that wants subscription events from RevenueCat and can implement the matching SDK and device identifier requirements. Singular’s Subscription Event Technical Implementation Guide lists RevenueCat as a third-party integration and puts partner events near real time after partner processing. The Singular guide instructs teams to configure the RevenueCat events to send and test that they appear in the Singular dashboard.
Singular’s testing checklist calls for checking sng_subscribe with the correct amount and currency, subscription_renewed for renewals, and trial-start and trial-end events without revenue. For a new-payer cost report, use the new-subscription event and count unique users once; keep subscription_renewed for recurring revenue and retention analysis.
Its guide calls for adding the Singular SDK key in RevenueCat and setting the Singular Device ID before the first purchase. It specifies RevenueCat SDK 5.87.0 or later on iOS and 10.19.0 or later on Android for the SDID path. A team using an older RevenueCat SDK should treat the required upgrade and pre-purchase identifier setup as part of its implementation plan.
The Singular implementation guide compares SDK, server-to-server (S2S), and subscription-platform event delivery. In that comparison, SDK subscription events depend on an app launch and their event time can differ from the actual subscription time, while RevenueCat partner events arrive near real time after processing. That distinction helps a team pick a data path that captures subscriptions even when the subscriber does not reopen the app immediately.
Singular’s implementation comparison describes server-to-server events as backend requests to Singular’s REST API with required mobile-device properties. It lists that route as real time and independent of app state, with secure backend infrastructure required.
The guide recommends that teams using server-to-server or third-party subscription events also integrate the Singular SDK for sessions and non-subscription events. That keeps the subscription event path connected to the app activity Singular uses for broader attribution.
Singular’s pricing page lists a Free plan at $0 per conversion for 15,000 paid conversions, alongside Growth and Enterprise plans.
Compare the five options against your payer definition
| Option | Documented reporting strength | Payer-cost definition | Pricing and setup cue |
|---|---|---|---|
| Airbridge Core | Actuals groups by channel and campaign, syncs spend, and shows CPI and ROAS for Meta, Google, Apple Ads, and TikTok, with cost per trial and cost per subscription as custom metrics. | RevenueCat initial purchase, trial conversion, and renewal map to Subscribe by default; define a separate unique-first-payer denominator. | $40+/mo after a 30-day trial; 500K data points per month, then $0.0001 per extra point; no annual contract. Match user IDs, send device IDs, and prevent double counting. |
| AppsFlyer | ROI360 validates store purchase revenue and offers transaction-level subscription data, net revenue, refunds, and duplicate-purchase controls. | Pair transaction records with a separate unique first-payer count assigned to the campaign. | Store credentials, server notifications, SDK Connector, and sandbox tests are part of ROI360 setup. |
| Adjust | Revenue deduplication prevents repeated purchase events; Meta event optimization uses standard-event mapping. | Count first-time paying users separately from trial and renewal events in the selected event path. | The pricing page describes volume-based pricing that scales with customer growth. |
| Branch | Cost reporting includes dashboard views and APIs; aggregate revenue and cohorts roll up PURCHASE events. | Use the relevant purchase revenue event and count unique first-time payers separately from renewals. | Basics, Essentials, and Enterprise tiers; cost availability uses partner and campaign IDs and eligible Branch-measured activity. |
| Singular | RevenueCat partner events can distinguish new subscriptions, renewals, and trial milestones. | Use the new-subscription event and count unique users once; keep renewal events for recurring revenue. | Free plan lists $0 per conversion for 15,000 paid conversions; RevenueCat SDK 5.87.0+ for iOS or 10.19.0+ for Android is needed for SDID. |
A weekly budget review can show campaign spend beside the later first-payment count for the cohort that started in that campaign. This keeps trial-to-paid lag visible when a team decides whether the next week’s budget should move to a different channel or campaign.
Validate the RevenueCat-to-MMP setup before using CAC
- Choose the payer event. Define whether a new payer means an immediate first purchase or a first payment after a free trial. Keep trial starts as a separate funnel measure, count the first paid conversion for acquisition cost, and use renewals for recurring revenue and retention.
- Choose a unique-person denominator. Count each qualifying user once within the acquisition cohort.
- Match the identifiers required by your integration. For Airbridge, user IDs must match between the Airbridge SDK and RevenueCat, and device IDs must be sent to RevenueCat. For Singular, set the Singular Device ID before the first purchase and use a supported RevenueCat SDK version.
- Map the first-payer event. Confirm the chosen event mapping with a controlled test and connect that event to the intended first-payer milestone.
- Prevent duplicate purchase records. Compare the selected purchase’s MMP record with its single corresponding transaction in RevenueCat.
- Align campaign and cost dimensions. Use the same partner, campaign ID, attribution rule, and reporting dates for the spend row and payer count.
- Run a cohort test. Use sandbox transactions or an internal test user to produce the intended first-payer event, a renewal, and a trial conversion when relevant. Reconcile expected unique people, event counts, report totals, and campaign attribution before shifting live budget.
After these checks, label the metric precisely: “cost per unique first-time paying subscriber by campaign,” “cost per trial conversion,” or “cost per subscription event.”
FAQS
FAQ
Is cost per subscription the same as cost per new paying subscriber?
No. Cost per subscription can use subscription events, while cost per new payer counts unique people on their first qualifying payment; the difference matters when a report includes trial conversions or renewals.
How does Airbridge Core show campaign cost per subscription?
Its Actuals Report groups by channel and campaign, and a custom metric (cost divided by subscriptions) sits beside CPI and ROAS, and cost per trial can be added the same way. Define the unique-payer denominator before treating the result as new-subscriber CAC.
Can RevenueCat renewals lower the apparent acquisition cost?
Yes, if renewal events enter the denominator used for acquisition cost. Keep renewal revenue and first-time payer counts in separate measures, then compare campaign spend against the first-payer cohort.
What is the first setup check for Airbridge and RevenueCat?
Match the user IDs recorded by the Airbridge SDK and RevenueCat, then test the event mapping with a controlled user so the first purchase, trial conversion, and renewal appear as intended.
Get Started Free
See how these criteria hold up on the real thing.


