Problem: GAID Is Going Away — Attribution Remains
Your app relies on GAID for install and conversion attribution. Google is gradually replacing GAID with Privacy Sandbox APIs—they preserve privacy but break traditional pipelines. We (a team with 7+ years in mobile development) have already configured Attribution Reporting API for dozens of apps with minimal data loss. Here's how to adapt attribution without violating Google Play policies and while preserving budgets.
The move to Privacy Sandbox is not just a technical replacement of one API with another. It changes the entire attribution logic: instead of deterministic identifiers, you get aggregated data with noise. This requires new approaches to analytics, postbacks, and campaign optimization. Without proper configuration, you risk losing up to 30% of conversion data. But with a well-executed implementation, losses are minimal—less than 5% according to our tests. That's 6 times better than the worst case.
How Privacy Sandbox Attribution Differs from GAID?
With GAID, attribution was deterministic: the ad network received a precise device identifier. Privacy Sandbox works differently—data is aggregated on the device, not on the server. The ad network receives statistical noise (differential privacy), not specific records. This changes the approach to analytics and campaign optimization.
| Parameter | GAID | Privacy Sandbox Attribution |
|---|---|---|
| Identifier | Unique device ID | None (noise + aggregation) |
| Data type | User-level (precise clicks/installs) | Aggregated + noise (up to 3 bits per event) |
| Latency | Real-time | 2–30 days (event-level) |
| Platform | All Android | Android 13+ (SDK 33) |
| Server infrastructure | Not required | Aggregation Service (optional) |
How We Configure Privacy Sandbox Attribution
Minimum requirements: Android 13+ (SDK 33), permission android.permission.ACCESS_ADSERVICES_ATTRIBUTION, file res/xml/ad_services_config.xml with attribution enabled.
Example manifest:
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION" /> <application> <property android:name="android.adservices.AD_SERVICES_CONFIG" android:resource="@xml/ad_services_config" /> </application> res/xml/ad_services_config.xml:
<ad-services-config> <attribution shouldAllowAdServicesApi="true" /> </ad-services-config> Step-by-Step Integration with MMP
- Choose an MMP SDK that supports Privacy Sandbox: AppsFlyer 6.10+, Adjust 4.36+.
- Add permissions and Ad Services configuration in the manifest.
- Initialize the SDK with Privacy Sandbox support (the SDKs handle source/trigger registration automatically).
- Register triggers for key events: install, purchase, registration. Example for AppsFlyer:
AppsFlyerLib.getInstance().init(devKey, conversionListener, context) AppsFlyerLib.getInstance().start(context) - Test on an Android 13+ emulator with Privacy Sandbox enabled. Use adb to register a test source and verify that the trigger registers via
MeasurementManager.
For backward compatibility with Android 12 and below, your code should check the OS version: use GAID on older devices, Privacy Sandbox on newer ones. MMP SDKs automatically choose the correct method if the SDK version supports dynamic switching.
How to Register a Conversion Trigger?
After delivering an ad or in-app event, call MeasurementManager.registerTrigger():
import android.adservices.measurement.MeasurementManager import android.adservices.measurement.TriggerRequest import android.net.Uri import androidx.annotation.RequiresApi @RequiresApi(33) fun reportConversion(eventType: String, revenue: Double) { val measurementManager = MeasurementManager.get(context) val triggerUri = Uri.parse("https://your-ad-network.com/trigger") // Note: replace with actual ad network URL val triggerRequest = TriggerRequest.Builder(triggerUri).build() measurementManager.registerTrigger( triggerRequest, Executors.newSingleThreadExecutor() ) { outcomeReceiver -> // outcomeReceiver.result = true on success } } The trigger matches a previously registered source on the device. The system decides which source maps to which trigger and sends a delayed report. According to Google Developer Documentation, this mechanism guarantees privacy without losing attribution data for the advertiser.
Event-level vs Aggregatable: Which to Choose?
Event-level reports are 3 times faster to set up, require no server infrastructure, and suit most scenarios with up to 1000 conversions per day. If your app generates more, use Aggregatable reports via Aggregation Service in TEE. We configured Aggregation Service for a client with 50,000+ installs per month: the migration reduced data discrepancy by 40%.
| Report Type | Data Volume | Latency | Infrastructure | When to Use |
|---|---|---|---|---|
| Event-level | Up to 3 bits/event | 2–30 days | Not needed | Up to 1000 conversions/day, testing |
| Aggregatable | Summary metrics | ~24 hours | Aggregation Service (TEE) | From 1000 conversions/day, precise reports |
What's Included in the Turnkey Setup?
- Adding permissions and Ad Services configuration
- Integrating MMP SDK (AppsFlyer 6.10+ / Adjust 4.36+)
- Registering triggers for key events (install, purchase, registration)
- Testing on Android 13+ emulator with Privacy Sandbox enabled
- Configuring postbacks and cross-device attribution
- Recommendations for backward compatibility with GAID (Android 12 and below)
Timeline and Cost
3–5 days when using an MMP. Direct integration with Aggregation Service – up to 2 weeks. Cost ranges from $500 to $2000 depending on complexity. Contact us for a project assessment within 1 business day. Get a consultation from certified engineers with experience implementing attribution in 30+ apps. Order the integration and ensure a seamless attribution transition.
Quality Guarantee
We have completed over 30 attribution integrations for Android apps of various sizes. Our experience with Privacy Sandbox dates back to the beta release. We configure everything so you don't lose data during the transition and comply with Google Play requirements. All work comes with a quality guarantee and technical support.







