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
- User installs your app via an ASA ad tap.
- App calls
AdServices.attributionToken()within the first session. - App posts the token to Apple’s attribution endpoint:
POST https://api-adservices.apple.com/api/v1/ - 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" } - 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
| Field | What it means |
|---|---|
campaignId | The ASA campaign ID — join to your campaign list |
adGroupId | The ASA ad group ID — join to your ad group list |
keywordId | The keyword that triggered the tap (null for Search Match) |
creativeSetId | Creative variant (rarely used since CPPs replaced creative sets) |
orgId | Your Apple Search Ads org ID |
countryOrRegion | The storefront where the install happened |
clickDate | When the tap happened |
conversionDate | When the install happened |
Comparison with SKAdNetwork
| Aspect | Ad Services API | SKAdNetwork |
|---|---|---|
| Scope | ASA only | All ad networks |
| Latency | Minutes | Hours to days (3 postback windows in SKAN 4.0) |
| Granularity | Campaign + ad group + keyword | Campaign-level + conversion value |
| Determinism | Deterministic | Aggregated, privacy-preserving |
| User identifier | None | None (intentionally) |
| Crowd anonymity tiers | No | Yes (suppresses low-volume data) |
| Best for | ASA-only optimization | Cross-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
iAdframework alongside Ad Services. Most apps have dropped iOS <15 by 2026. attribution: falseis not always “organic.” Some non-ASA installs come from Today Tab impressions, search recommendations, or older creatives where the token did not generate.
Related terms
- Apple Search Ads — the platform Ad Services API attributes for
- SKAdNetwork — the cross-network attribution standard
- Apple Search Ads API — the campaign-management API (different from this)