Back to Blog
Apple Search Ads Attribution With AppsFlyer

Apple Search Ads Attribution With AppsFlyer

Peter Sutarik··12 min read
apple search adsappsflyerattributionskanconversion tracking

How Apple Search Ads AppsFlyer Attribution Actually Works

Apple Search Ads drives installs, but knowing which keyword, campaign, or ad group drove a profitable user requires a mobile measurement partner (MMP) like AppsFlyer. Apple's own attribution API returns campaign-level data — AppsFlyer extends that with post-install event tracking, cohort analysis, and cross-network deduplication across up to 10,000+ media sources source: [AppsFlyer integrations page]. Without an MMP, you see installs but not revenue per keyword.

The integration relies on two parallel data streams: deterministic attribution via the Apple Ads Attribution API (formerly iAd Attribution API) and privacy-preserving attribution via SKAdNetwork (SKAN). Since Apple deprecated the iAd framework in 2018 and replaced it with AdServices in iOS 14.3 source: [Apple Developer Documentation — AdServices], every attribution setup must handle both paths. I have tracked this evolution across dozens of app launches, and the gap between "set up Search Ads" and "actually measure ROI" is where most teams lose money.

If you are still deciding whether paid search is right for your app, start with our Apple Search Ads guide for indie developers — it covers the strategic case before you invest in attribution infrastructure.

The Two Attribution Paths: AdServices vs. SKAN 4.0

Apple provides two distinct attribution mechanisms, and AppsFlyer consumes both. Understanding which data each path delivers is the first step to accurate apple search ads conversion tracking.

FeatureAdServices APISKAN 4.0
Data granularityKeyword-level (with user consent)Campaign-level only (up to 4 digits)
Requires ATT consentYes, for full attributionNo — privacy-preserving by design
Postback timingReal-time (on first app open)24–144 hours, randomized source: [Apple SKAN docs]
Conversion valuesNot applicable (event-based)6-bit fine-grained + 2-bit coarse (high/medium/low)
Cross-network dedupYes (via MMP)Limited (single winning network)
iOS version requirediOS 14.3+iOS 16.1+ for SKAN 4.0

When a user taps a Search Ads result and installs, AppsFlyer first calls the AdServices token endpoint. If the user granted App Tracking Transparency (ATT) consent, the token resolves to keyword-level data — campaign name, ad group, keyword, match type, and cost source: [Apple Search Ads Attribution API]. If consent was denied, AppsFlyer falls back to SKAN postbacks, which return only a campaign identifier and a coarse conversion value.

For a deeper look at how ATT reshapes your funnel, see our piece on App Tracking Transparency and its conversion impact.

Side-by-side comparison of AdServices API and SKAN 4.0 attribution paths showing granularity, timing, consent requirements, and user coverage differences
AdServices delivers keyword-level data for consented users (~25%); SKAN 4.0 covers the remaining ~75% with campaign-level granularity.

Setting Up AppsFlyer for Apple Search Ads: Step by Step

Connecting AppsFlyer to Apple Search Ads takes about 15 minutes but requires credentials from three places: your AppsFlyer dashboard, Apple Search Ads, and App Store Connect. Here is the sequence.

  1. Generate Apple Search Ads API credentials. In your Apple Search Ads account, navigate to Settings > API and create a new API certificate. Download the PEM file — you will upload it to AppsFlyer source: [AppsFlyer Apple Search Ads integration guide].
  2. Enable the Apple Search Ads integration in AppsFlyer. Go to Configuration > Integrated Partners, search for "Apple Search Ads," toggle it on, and paste your API credentials.
  3. Configure SKAN conversion values. In AppsFlyer's SKAN Conversion Studio, map your in-app events (purchase, subscription, level complete) to the 64 fine-grained conversion values available in SKAN 4.0. This mapping determines what revenue data you get back from non-consented users.
  4. Enable AdServices token collection in your app. Add the AdServices framework to your Xcode project and call AAAttribution.attributionToken() on first launch. AppsFlyer's SDK handles this automatically if you use SDK version 6.2.3 or later source: [AppsFlyer SDK integration docs].
  5. Validate with a test install. Run a test campaign on a device, install the app, and confirm the attribution appears in AppsFlyer's dashboard within 60 seconds for AdServices or up to 48 hours for the first SKAN postback.

I recommend validating both paths separately — AdServices on a consented device and SKAN on a limited-ad-tracking device — because misconfigurations in either path are silent failures.

Measuring Apple Search Ads CPI and True ROI

Apple Search Ads CPI (cost per install) is the metric most teams start with, but it tells less than half the story. A keyword with a $1.50 CPI might generate $12 in 30-day LTV, while a $0.80 CPI keyword generates $2. AppsFlyer's cohort reports let you compare cost against revenue over 1, 7, 30, and 90-day windows, which is how you calculate true ROAS (return on ad spend) per keyword.

Here is the formula I use:

ROAS = (Revenue attributed to keyword cohort) / (Apple Search Ads spend on that keyword)

A ROAS above 1.0 means the keyword is profitable. In my experience working with subscription apps, keywords need 60–90 days of cohort data before ROAS stabilizes, because trial-to-paid conversion rates vary significantly by keyword intent [source: first-party observation across Sonar users].

Why keyword-level economics matter

Consider a keyword like "tip calculator." Sonar's keyword index puts "tip calculator" at iOS difficulty 42 and popularity 36, with 136 apps in the results — a moderately competitive keyword where accurate attribution tells you whether your ASA spend on it is actually delivering ROI (source: Sonar /api/v1/keywords/search, queried 2026-06-29). On Android, the same "tip calculator" keyword shows difficulty 22 and popularity 45 — a cross-platform contrast that makes per-store attribution essential for budget allocation (source: Sonar /api/v1/keywords/search, queried 2026-06-29).

If your apple search ads CPI on "tip calculator" is $1.20 but your 30-day LTV for users from that keyword is $0.90, you need AppsFlyer's data to catch that gap. Without keyword-level ROI, you would keep spending on a money-losing keyword while potentially underinvesting in higher-intent terms.

Take "budget planner" — Sonar puts its iOS difficulty at 65 with 191 apps in the results, meaning organic ranking is hard and paid campaigns need tight ROI tracking to justify spend (source: Sonar /api/v1/keywords/search, queried 2026-06-29). For keywords this competitive, the difference between a profitable and unprofitable campaign often comes down to bid optimization strategy.

What SKAN 4.0 Changes for Attribution

SKAN 4.0, released with iOS 16.1 in October 2022 source: [Apple WWDC 2022 — What's new in SKAdNetwork], introduced three postbacks instead of one, finer conversion value control, and hierarchical source identifiers. For Apple Search Ads advertisers, these changes directly affect what AppsFlyer can measure from non-consented users.

Three postback windows

PostbackWindowConversion valueSource identifier digits
First0–2 daysFine-grained (6-bit, 64 values) or coarseUp to 4 digits
Second3–7 daysCoarse only (high/medium/low)2 digits
Third8–35 daysCoarse only2 digits

The first postback carries the most information. AppsFlyer's SKAN Conversion Studio lets you allocate those 64 fine-grained values to your highest-value events — I typically map values 0–10 to revenue ranges, 11–40 to engagement milestones, and 41–63 to subscription events. The second and third postbacks only return coarse values (high, medium, low), so they are best used for retention signals rather than precise revenue.

Crowd anonymity thresholds

Apple applies "crowd anonymity" tiers that determine how many source identifier digits you receive. Campaigns with fewer installs get fewer digits, meaning less granular campaign identification source: [Apple Privacy-Preserving Ad Attribution]. In practice, Apple Search Ads campaigns with under ~20 installs per day often return only 2-digit source identifiers, limiting your ability to distinguish ad groups.

Bridging the ATT Consent Gap

Apple reported a 25% global ATT opt-in rate as of their 2023 data release source: [Flurry Analytics ATT tracking data, updated 2023]. That means roughly 75% of your Apple Search Ads users will be attributed via SKAN rather than AdServices. AppsFlyer handles this with a modeled attribution approach that combines consented user patterns with SKAN aggregate data to estimate keyword-level performance for the full cohort.

Practical strategies for the consent gap

  • Optimize your ATT prompt. Apps that explain the value exchange ("Allow tracking so we can show you relevant offers") see opt-in rates 30–40% higher than those using the default prompt source: [AppsFlyer ATT prompt best practices]. More consent means more deterministic data.
  • Use SKAN conversion value mapping aggressively. Since SKAN gives you only 64 fine-grained values, encode your most important revenue thresholds first. I prioritize trial start, first payment, and 7-day retention as the three events that predict LTV.
  • Build blended models. Use consented users as a training set to infer keyword-level performance for SKAN-only users. AppsFlyer's Predict feature automates this for subscription apps source: [AppsFlyer Predict documentation].
  • Run structured campaigns with consistent naming conventions so that even 2-digit SKAN source identifiers map cleanly to campaign types (brand, competitor, generic, discovery).

Common AppsFlyer + Apple Search Ads Pitfalls

After helping teams debug Apple Search Ads AppsFlyer setups, I have compiled the mistakes that waste the most budget. Each one creates a gap between what your dashboard shows and what actually happened.

PitfallImpactFix
Not enabling AdServices framework in XcodeZero deterministic attribution — all installs attributed to organicAdd AdServices.framework and call the attribution token on first launch
Stale API credentialsAttribution stops silently after certificate expiration (certificates expire annually)Set a calendar reminder 30 days before expiration
SKAN conversion value conflictsMultiple SDKs overwrite each other's conversion valuesDesignate AppsFlyer as the sole SKAN handler and disable competing SDK calls
Ignoring redownloadsReturning users attributed as new installs, inflating CPIEnable redownload attribution in both Apple Search Ads settings and AppsFlyer
Not validating with test installsMisconfigurations remain hidden until budget is spentTest both AdServices and SKAN paths before scaling spend

The most expensive pitfall is SKAN conversion value conflicts. If you use multiple analytics SDKs (say AppsFlyer plus Firebase), both may try to call updatePostbackConversionValue(), and only the last call wins. I have seen this silently zero out revenue attribution for entire campaigns.

Connecting Attribution to ASO and Keyword Strategy

Attribution data from AppsFlyer should feed back into your organic ASO strategy, not stay siloed in paid reports. Keywords that convert well on Apple Search Ads are strong candidates for your app store keyword optimization — if users who search "budget planner" and click your ad convert at 8%, that keyword deserves organic investment too.

Use AppsFlyer's keyword-level ROAS data to build a priority matrix:

  • High ROAS, high difficulty: Keep paying — organic ranking will take time. Monitor CPI weekly.
  • High ROAS, low difficulty: Invest in organic ASO to reduce paid dependency. Shift budget elsewhere once organic ranking improves.
  • Low ROAS, high difficulty: Cut spend immediately. Neither paid nor organic will be profitable here.
  • Low ROAS, low difficulty: Test creative changes before cutting — the keyword may convert with better screenshots or a stronger value proposition. See our guide on improving app store conversion rates for tactical ideas.

This matrix turns apple search ads conversion tracking from a reporting exercise into a strategic tool. Every keyword in your account should have a clear path: scale, maintain, optimize, or cut.

FAQ

How do I connect AppsFlyer to Apple Search Ads?

In AppsFlyer, go to Configuration > Integrated Partners, search for "Apple Search Ads," and toggle the integration on. You will need to upload API credentials (a PEM certificate) generated from your Apple Search Ads account under Settings > API. The setup takes about 15 minutes and requires credentials from Apple Search Ads and App Store Connect source: [AppsFlyer integration guide].

What is the difference between AdServices and SKAN attribution?

AdServices provides deterministic, keyword-level attribution for users who grant ATT consent — you see the exact keyword, ad group, and campaign that drove the install. SKAN 4.0 provides privacy-preserving, campaign-level attribution for all users regardless of consent, but with limited granularity (coarse conversion values and randomized postback timing of 24–144 hours) source: [Apple SKAdNetwork documentation].

How do I calculate true ROI for Apple Search Ads?

Divide the revenue attributed to a keyword cohort by the Apple Search Ads spend on that keyword. This gives you ROAS (return on ad spend). A ROAS above 1.0 means the keyword is profitable. Use AppsFlyer's cohort reports with 30–90 day windows for subscription apps, since trial-to-paid conversions take weeks to materialize. Apple Search Ads CPI alone is insufficient because a low-CPI keyword can still lose money if its users do not convert to paying customers.

Why is my AppsFlyer attribution showing all installs as organic?

The most likely cause is a missing AdServices framework in your Xcode project. If the AAAttribution.attributionToken() call is not implemented (or fails silently), AppsFlyer cannot retrieve the attribution token from Apple, so every install defaults to organic. Verify the framework is added, the call executes on first launch, and your AppsFlyer SDK is version 6.2.3 or later source: [AppsFlyer SDK docs].

Can I use SKAN and AdServices attribution at the same time?

Yes — and you should. AdServices handles consented users with full keyword-level detail, while SKAN covers the ~75% of users who decline ATT tracking [source: Flurry ATT opt-in rate data, 2023]. AppsFlyer runs both paths in parallel and merges the data, giving you deterministic data where available and modeled estimates where it is not. This dual approach is the standard for apple search ads appsflyer attribution in 2026.

Want to see which keywords justify your Apple Search Ads spend? Try Sonar free — it shows search volume, difficulty, and competitor data for every App Store and Google Play keyword, so you can connect attribution insights to real keyword opportunities.

Sonar

Put this into practice

Keyword difficulty scores, search popularity data, competitor analysis, and rank tracking — start optimizing in minutes.

7-day free trial · Cancel anytime