rocket_launch ASAPilot
Get Started

Glossary

Ad Services API

Apple's first-party attribution API specifically for Apple Search Ads. Confirms which app installs came from ASA campaigns, returning campaign, ad group, and keyword IDs without user identifiers.

Also known as: AdServices framework, AdAttributionKit (related)

What is the Ad Services API?

The Ad Services API (introduced in iOS 14.3, replacing the older iAd framework) is Apple’s first-party attribution API specifically for Apple Search Ads installs.

When a user taps an ASA ad and then installs your app, Apple knows the link deterministically because both the ad surface and the App Store are operated by Apple. The Ad Services API lets your app request this attribution data without exposing IDFA or any user-level identifier.

How it works

  1. User installs your app via an ASA ad tap.
  2. App calls AdServices.attributionToken() within the first session.
  3. App posts the token to Apple’s attribution endpoint: POST https://api-adservices.apple.com/api/v1/
  4. Apple returns a JSON payload with attribution detail:
    {
      "attribution": true,
      "campaignId": 12345678,
      "adGroupId": 87654321,
      "keywordId": 11223344,
      "creativeSetId": null,
      "orgId": 99887766,
      "countryOrRegion": "US",
      "clickDate": "2026-05-20T14:23:11Z",
      "conversionDate": "2026-05-20T14:24:42Z",
      "iad-purchase-date": "2026-05-20T14:24:42Z"
    }
  5. Your backend joins this with user-level data to compute attributed revenue, LTV, etc.

If "attribution": false, the install was not from ASA — could be organic, from another paid channel, or from a search query that did not match any of your campaigns.

What the response tells you

FieldWhat it means
campaignIdThe ASA campaign ID — join to your campaign list
adGroupIdThe ASA ad group ID — join to your ad group list
keywordIdThe keyword that triggered the tap (null for Search Match)
creativeSetIdCreative variant (rarely used since CPPs replaced creative sets)
orgIdYour Apple Search Ads org ID
countryOrRegionThe storefront where the install happened
clickDateWhen the tap happened
conversionDateWhen the install happened

Comparison with SKAdNetwork

AspectAd Services APISKAdNetwork
ScopeASA onlyAll ad networks
LatencyMinutesHours to days (3 postback windows in SKAN 4.0)
GranularityCampaign + ad group + keywordCampaign-level + conversion value
DeterminismDeterministicAggregated, privacy-preserving
User identifierNoneNone (intentionally)
Crowd anonymity tiersNoYes (suppresses low-volume data)
Best forASA-only optimizationCross-network attribution via MMP

How ASAPilot uses Ad Services API

ASAPilot reads Apple Search Ads campaign performance via the Apple Search Ads API (for campaign and spend data) and joins this with your backend’s attribution data sourced from the Ad Services API.

You set up Ad Services API integration in your app (one-time backend work). ASAPilot then joins your attribution events with ASA spend to compute CPI, CPA, ROAS per campaign / ad group / keyword — without needing an MMP.

Common implementation gotchas

  • Token must be fetched in the first session. If your app crashes or the user uninstalls before the token request, you lose that attribution.
  • Token validity is short. Tokens expire quickly; exchange them with Apple’s endpoint promptly.
  • Pre-iOS 14.3 fallback. If you support older iOS, you need the legacy iAd framework alongside Ad Services. Most apps have dropped iOS <15 by 2026.
  • attribution: false is not always “organic.” Some non-ASA installs come from Today Tab impressions, search recommendations, or older creatives where the token did not generate.