← All posts
7 min read

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.

Orange dithered brick emoji for Superwall Apple Search Ads ROAS

Superwall can tell you what happened around the paywall and subscription. Apple Ads can tell you which campaign and search context produced a paid install.

To calculate keyword ROAS, connect both systems to the same AppSprint install:

Apple Ads click -> attributed install -> Superwall user -> trial or purchase -> revenue

The Apple side supplies acquisition and spend. Superwall supplies the paywall and subscription context. AppSprint keeps the identity between them.

What Superwall contributes

Superwall is useful for two related views.

Inside Superwall, you can inspect placements, paywall interactions, offers, users, and subscription behavior. Through webhooks, Superwall reports the purchase lifecycle, including:

  • Trial-period initial purchases.
  • Normal initial purchases.
  • Renewals and trial conversions.
  • Cancellations and uncancellations.
  • Expirations and billing issues.
  • Product changes.
  • Non-renewing purchases.
  • Refund values when present.

AppSprint's current Superwall webhook mapping focuses on the subscription lifecycle. Use the Superwall dashboard for the deeper paywall-interaction investigation, then use AppSprint to connect attributed subscription outcomes to Apple Ads.

QuestionBest place to answer it
Which paywall or placement did the user see?Superwall
Which Apple campaign or keyword produced the install?Apple AdServices and AppSprint
How much did the Apple keyword spend?Apple Ads reporting
Did the user start a trial, pay, renew, or refund?Superwall webhook
What is mature keyword ROAS?The joined AppSprint report

Step 1: capture the Apple Ads install

Configure the AppSprint SDK before the campaign starts.

On iOS 14.3 or later, the SDK collects the Apple AdServices attribution token. AppSprint exchanges it for the available campaign, ad-group, keyword, country, conversion, and claim context.

The token expires after 24 hours. Collect it early rather than waiting for a later session.

Search Match conversions may have no keyword ID. Preserve Search Match as its own source instead of treating the missing ID as an implementation error.

The Apple Search Ads integration guide has the current SDK requirements.

Step 2: connect Apple Ads reporting

The attribution record identifies the paid source. The reporting API adds the cost and delivery metrics.

Create an Apple Ads API certificate with the public key shown by AppSprint. Then save the resulting Client ID, Team ID, Key ID, and your numeric App Store ID in the integration.

After validation, AppSprint can import:

  • Spend.
  • Impressions.
  • Taps.
  • Apple-reported installs.
  • Campaign and ad-group details.
  • Keyword names where available.

Without spend, you can count attributed revenue but cannot calculate ROAS.

Step 3: add the signed Superwall webhook

In Superwall, create a webhook using the app-specific endpoint shown in AppSprint:

https://api.appsprint.app/v1/integrations/superwall/webhooks/your-app-id

Superwall signs webhook deliveries through Svix. Copy the webhook's signing secret into the AppSprint Superwall integration.

AppSprint verifies the signature headers before accepting the payload. There is no need to invent a custom shared header in Superwall.

The current Superwall integration guide shows where to find the endpoint and signing-secret field.

Step 4: save appsprintId on the Superwall user

The webhook needs to identify the original install.

After AppSprint configures the SDK, get the AppSprint install ID and set it as a Superwall user attribute named appsprintId.

Use this order:

  1. Configure AppSprint.
  2. Read the AppSprint install ID.
  3. Set appsprintId through Superwall's user-attributes API.
  4. Continue to placements, paywalls, and purchases.

Superwall includes user attributes in webhook payloads. When the lifecycle event arrives, AppSprint reads appsprintId and attaches the event to the matching install.

A signed webhook without appsprintId can still be accepted. It simply cannot be joined to the Apple Ads source.

Step 5: understand the event mapping

AppSprint maps the main Superwall events into a consistent attribution model.

Superwall eventConditionAppSprint event
initial_purchaseTrial periodstart_trial
initial_purchaseNormal or introductory purchasepurchase
renewalIncludes trial conversionsubscribe
uncancellationSubscription reactivatedpurchase
non_renewing_purchaseOne-time purchasepurchase
cancellation, expiration, billing_issue, product_change, subscription_pausedLifecycle changeCustom event

Superwall's webhook payload includes transaction and lifecycle fields such as product, store, period type, price, proceeds, purchased currency, original transaction ID, and user attributes when available.

Keep the raw lifecycle context. A user can cancel auto-renewal while the current paid period remains active. Cancellation and expiration should not be treated as the same moment.

Step 6: validate without confusing sandbox and production

Test the flow in layers.

Verify the webhook

Send a valid Superwall sandbox delivery. Confirm AppSprint accepts the Svix signature and marks the integration verified.

Verify the user identity

Open the Superwall user record and confirm appsprintId contains the value created by AppSprint for that install.

Verify the Apple attribution

For a controlled paid production install, check that AppSprint shows the Apple campaign, ad group, keyword or Search Match source, and country.

Verify production revenue

Complete a controlled production subscription when practical. Confirm the lifecycle webhook creates an attributed event and the revenue appears in the expected Apple Ads cohort.

AppSprint does not create production events or outbound ad conversions from Superwall sandbox deliveries. A successful sandbox webhook proves the signed connection, not final ROAS.

Build the keyword funnel

Start with a report that follows the user's decision path.

StageMetricWhat to investigate when it is weak
DeliveryImpressions and tapsBid, relevance, keyword demand
StoreAttributed installsProduct-page promise and conversion
ProductActivation and paywall reachOnboarding and placement timing
OfferTrial starts or purchasesPaywall message, price, and intent
RevenuePaid subscriptions and proceedsTrial quality and acquisition cost
RetentionRenewal and lifecycle eventsProduct value and subscriber fit

AppSprint does not need every Superwall interaction in the Apple Ads report. Use enough product context to locate the constraint, then use Superwall's own user and paywall views for the detailed investigation.

Respect trial maturity

A trial start is an early signal. It is not revenue.

Separate:

  • Active trials that are still running.
  • Mature trials that reached their paid decision.
  • Paid subscriptions.
  • Refunded or canceled outcomes.
  • Renewal revenue.

Compare keyword cohorts at the same age. A campaign launched three days ago should not rank below a campaign with a full renewal cycle simply because its revenue has not had time to arrive.

Use the free-trial ROAS workflow to define active, mature, and revenue-mature cohorts.

Diagnose the funnel before changing bids

Taps without installs

The ad earned interest, but the store page did not close the download. Check the first screenshots, subtitle, rating, and match between the search and the listing.

Installs without paywall reach

Use Superwall's placement and user journey data to see whether onboarding takes too long or the relevant placement never fires.

Paywall reach without trials

The offer may not fit the search promise. Compare the paywall copy, products, trial, and price with the intent of the keyword.

Trials without paid conversions

Look at trial quality, cancellation timing, product usage, and the promise made before install.

The keyword may convert but cost too much. Review the bid, price, proceeds, refund behavior, and renewal value before scaling.

Reconcile Superwall and Apple totals

Some differences are expected.

Apple Ads and Superwall can use different dates. Apple reports the ad interaction and install; Superwall reports the purchase lifecycle. Later revenue should be credited to the acquisition cohort for payback analysis.

Currencies can also differ. Superwall exposes USD price and proceeds fields alongside purchased-currency data. Pick one revenue definition and normalize it before calculating account-level ROAS.

Organic subscribers remain real revenue without an Apple keyword. Do not force unmatched users into paid campaigns to make totals agree.

Use the joined report

The result should help you decide where the constraint lives.

Mature patternNext move
Good ROAS, low Apple impression shareTest a careful bid increase
Good trials, weak paid conversionImprove offer or trial quality
Weak installs, healthy paywall conversionImprove the App Store page
Strong Superwall journey, expensive acquisitionLower bids or narrow keywords
Strong paid keyword and clear intentTest the same promise in ASO or a custom product page

The keyword ROAS playbook covers the campaign decisions after measurement is stable.

What to do next

Connect the Apple Ads API, create the signed Superwall webhook, and confirm appsprintId on one user. Then validate one production purchase from attributed install to revenue before changing a keyword bid.

Connect Superwall to AppSprint to attach trial, purchase, renewal, and lifecycle events to the Apple Ads source that produced the user.

Sources

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

AppSprint developer 1AppSprint developer 2AppSprint developer 3AppSprint developer 4AppSprint developer 5AppSprint developer 6AppSprint developer 7AppSprint developer 8

Loved by 544 users

Related articles

See all posts →