v152 · Privacy · Migration
Attribution Migration Guide
The Attribution Reporting API (ARA) is being removed in Chrome 152. This interactive wizard walks you through detecting your ARA usage, mapping to Privacy Sandbox alternatives, and verifying the migration.
1 Detect
2 Map
3 Code
4 Timeline
5 Checklist
Step 1: Which ARA features are you using?
Select the ARA features present in your codebase to get a tailored migration plan.
Feature probe — live browser check
Step 2: ARA → Privacy Sandbox alternatives
| ARA feature (removed) | Recommended alternative | Notes |
|---|---|---|
| Event-level reports | Protected Audience API — reporting worklets | Click/view attribution via PA auction reporting |
| Aggregatable reports | Private Aggregation API | Noisy aggregates from within PA or Shared Storage |
| Attribution-Reporting-Register-Source header | Topics API + server-side aggregation | Interest-based signals without cross-site identity |
| Attribution-Reporting-Register-Trigger header | Protected Audience conversion reporting | Trigger from within fenced frames |
| Aggregation coordinator | Private Aggregation API with TEE coordinator | Same coordinator infrastructure, different entry point |
| attributionsrc attribute | Fenced Frame + reportEvent() | Signal events from isolated ad frames |
Step 3: Code comparison
Old ARA header-based approach vs. new Privacy Sandbox alternative.
Old — ARA header (removed Chrome 152)
// Server sets on source registration:
Attribution-Reporting-Register-Source: {
"destination": "https://advertiser.example",
"source_event_id": "412444888111012",
"expiry": 604800,
"priority": 100,
"aggregation_keys": {
"campaignCounts": "0x159"
}
}
// Trigger registration:
Attribution-Reporting-Register-Trigger: {
"event_trigger_data": [{"trigger_data": "1"}],
"aggregatable_trigger_data": [...],
"aggregatable_values": {...}
}
New — Private Aggregation API
// In a Shared Storage worklet:
class MeasurementOperation {
async run(data) {
// Encode conversion signal
const bucket = BigInt(data.campaignId);
const value = data.converted ? 1 : 0;
// Report via TEE-based aggregation
// (no cross-site identity leaked)
privateAggregation
.contributeToHistogram({
bucket,
value
});
}
}
register('measure-conversion',
MeasurementOperation);
Step 4: Chrome 152 removal timeline
Chrome 104–148
ARA in origin trial / available
ARA headers and JS APIs available behind origin trial flag
Chrome 149
Deprecation intent announced
Console deprecation warnings added; blink-dev intent to remove published
Chrome 152 (current)
ARA removed from stable
attributionsrc, Attribution-Reporting-* headers, and JS registration APIs removed
Post-Chrome 152
Private Aggregation API stable
Full replacement surface available; Privacy Sandbox APIs stable for production use
Step 5: Migration checklist
Click each item to toggle pass/fail. Green = done, red = still outstanding.