Skip to content
Tolinku
Tolinku
Sign In Start Free
Analytics & Attribution · · 5 min read

Attribution Data Clean Rooms: Privacy-Safe Measurement

By Tolinku Staff
|
Tolinku analytics measurement dashboard screenshot for analytics blog posts

Data clean rooms are secure environments where two parties (typically an advertiser and a publisher or ad network) can match their first-party data without either party seeing the other's raw data. In mobile attribution, clean rooms let you measure campaign performance without sharing user-level data with ad networks, and without ad networks sharing their user data with you.

This guide explains how data clean rooms work for mobile attribution. For attribution and privacy regulations, see mobile attribution under GDPR. For SKAdNetwork, see SKAdNetwork and SKAN 5.0: complete developer guide.

Why Data Clean Rooms Exist

Traditional mobile attribution works by sharing user-level data between parties:

  1. Ad network shares click data (device ID, timestamp, campaign).
  2. Attribution provider matches clicks to installs using device IDs.
  3. Results are shared back to the ad network.

This model requires both parties to share raw user data, which conflicts with privacy regulations (GDPR, CCPA) and platform restrictions (ATT, Privacy Sandbox).

Data clean rooms solve this by providing a neutral environment where matching happens without data exposure.

How Clean Rooms Work

The Basic Flow

1. Advertiser uploads first-party data (user IDs, conversion events)
   → Data is encrypted/hashed before upload

2. Publisher/Ad Network uploads campaign data (impressions, clicks, user IDs)
   → Data is encrypted/hashed before upload

3. Clean room matches records using hashed identifiers
   → Neither party sees the other's raw data

4. Clean room outputs aggregate results
   → "Campaign X drove 1,200 installs with $45,000 revenue"
   → No user-level data is exposed

Privacy Protections

Clean rooms enforce privacy through several mechanisms:

Protection How It Works
Data isolation Each party's data is stored separately and encrypted
No raw data export Neither party can export the other's raw data
Aggregate-only output Results are aggregated (no individual user records)
Minimum thresholds Results with fewer than a minimum number of users (e.g., 50) are suppressed
Query restrictions Only pre-approved queries are allowed (no arbitrary SQL)
Audit logging All queries and access are logged for compliance

Clean Room Providers

Major Platforms

Provider Type Strengths
Google Ads Data Hub Walled garden Access to Google's ad data (Search, YouTube, Display)
Meta Advanced Analytics Walled garden Access to Meta's ad data (Facebook, Instagram)
AWS Clean Rooms Infrastructure Flexible, use with any data partner
Snowflake Data Clean Rooms Infrastructure SQL-based, integrates with existing Snowflake data
InfoSum Independent Decentralized (data never leaves your infrastructure)
LiveRamp Data Collaboration Independent Identity resolution + clean room

Walled Garden vs. Infrastructure Clean Rooms

Walled garden clean rooms (Google, Meta) are built by the ad platform itself. You bring your conversion data; they have the ad exposure data. You can only measure campaigns on that specific platform.

Infrastructure clean rooms (AWS, Snowflake) provide the technology, and you choose your data partners. More flexible but require more setup.

Clean Rooms for Mobile Attribution

Measuring Install Campaigns

Instead of sharing device IDs with an ad network for real-time attribution, you can use a clean room for aggregate measurement:

-- Example clean room query (aggregate results only)
SELECT
  campaign_id,
  ad_group_id,
  COUNT(DISTINCT matched_users) AS attributed_installs,
  SUM(revenue_30d) AS revenue,
  SUM(revenue_30d) / COUNT(DISTINCT matched_users) AS revenue_per_install
FROM
  advertiser_installs
JOIN
  publisher_impressions
ON
  hashed_user_id = hashed_user_id
WHERE
  impression_time < install_time
  AND install_time - impression_time < INTERVAL '7 days'
GROUP BY
  campaign_id, ad_group_id
HAVING
  COUNT(DISTINCT matched_users) >= 50  -- minimum threshold

Comparing to Traditional Attribution

Aspect Traditional Attribution Clean Room Attribution
Data sharing User-level data shared between parties No raw data shared
Granularity User-level (real-time) Aggregate (batch)
Latency Real-time (seconds to minutes) Batch (hours to days)
Campaign optimization Real-time bidding optimization Post-campaign analysis
Privacy compliance Requires consent for data sharing Privacy-safe by design
Cost Included in attribution provider fee Separate cost (query fees, infrastructure)
Complexity Low (SDK integration) High (data engineering required)

When Clean Rooms Make Sense

Good Use Cases

  • Measuring walled garden campaigns. Google and Meta campaigns where you want deeper analysis than the standard dashboard provides.
  • Cross-publisher measurement. Comparing performance across multiple ad networks without sharing data between them.
  • Privacy-regulated markets. EU markets where GDPR restricts user-level data sharing.
  • Post-ATT iOS measurement. Supplementing SKAdNetwork data with aggregate clean room analysis.
  • High-spend campaigns. When campaign budgets justify the cost and complexity of clean room setup.

When Clean Rooms Are Overkill

  • Small ad budgets. If you spend less than $50,000/month on mobile ads, the standard attribution provider reports are sufficient.
  • Real-time optimization. Clean rooms provide batch results, not real-time signals for bidding.
  • Simple attribution needs. If last-click attribution from your provider meets your needs, clean rooms add complexity without proportional value.

Implementation Considerations

Data Preparation

Your first-party data must be prepared before upload:

import hashlib

def prepare_for_clean_room(user_data):
    prepared = []

    for user in user_data:
        record = {
            # Hash PII before upload
            'hashed_email': hashlib.sha256(
                user['email'].lower().strip().encode()
            ).hexdigest(),
            'hashed_phone': hashlib.sha256(
                user['phone'].strip().encode()
            ).hexdigest() if user.get('phone') else None,

            # Non-PII conversion data (sent as-is)
            'install_date': user['install_date'],
            'revenue_7d': user['revenue_7d'],
            'revenue_30d': user['revenue_30d'],
            'subscription_status': user['subscription_status'],
            'country': user['country']
        }
        prepared.append(record)

    return prepared

Match Rates

Clean rooms match users based on shared identifiers (typically hashed email or phone). Match rates vary:

Identifier Typical Match Rate
Hashed email 30-60% (depends on whether users signed up with the same email on both platforms)
Hashed phone 20-40%
MAID (device ID) Declining (ATT, Privacy Sandbox)
Combined (email + phone) 40-70%

A 50% match rate means half of your users cannot be measured through the clean room. Factor this into your analysis.

Cost

Clean room costs include:

  • Infrastructure fees. AWS Clean Rooms charges per query. Snowflake charges per compute credit.
  • Data preparation. Engineering time to format and upload data.
  • Analysis. Data science time to write queries and interpret results.
  • Ongoing maintenance. Regular data uploads and query updates.

Expect $5,000-$50,000/month depending on scale and complexity.

Tolinku for Privacy-Safe Attribution

Tolinku's analytics provide deep link attribution without requiring user-level data sharing with third parties. Click and conversion data stays in your Tolinku dashboard. Configure privacy-safe tracking in the Tolinku dashboard.

For mobile attribution, see mobile attribution: a developer's guide. For GDPR compliance, see mobile attribution under GDPR.

Get deep linking tips in your inbox

One email per week. No spam.

Ready to add deep linking to your app?

Set up Universal Links, App Links, deferred deep linking, and analytics in minutes. Free to start.