ODM + ICM - The definitive list of requisites to run this sh***

davamosk

Administrator
I'm dealing with Google in 3 different accounts and 3 different apps to test the infamous ODM+ICM for iOS apps so I want to leave this guide here as a special "gift" for all the people in this community.

Before starting, I want to say that it's embarrassing that a TRILLIONAIRE company is making this whole process this complicated for everyone.
They are YEARS behind the industry in terms of iOS advertising and when they finally come up with something, everyone struggles to understand the process and have campaigns running with a decent discrepancy.

Because of that, I wanted to create this thread so everyone can have a "definitive" list to at least, have all the technical elements in place to test these campaigns.

Please keep in mind that ICM+ODM is NOT available in Europe! I'm mainly targeting US so if you want to target another non-European country, talk to your Google rep to see if this feature is available there!

With all of that being said, let's start this guide

1st STEP - Implement On-Device Measurement (ODM Event Data):
  • GA4F SDK(Firebase Integration): Your app must integrate the Google Analytics for Firebase (GA4F) SDK, updated to at least version 11.14.0. The latest available release is always recommended.

  • Bidding on GA4F Events: Currently, bidding on native GA4F events is required to fully leverage the campaign performance benefits derived from ODM data.
2nd STEP - Enable Integrated Conversion Measurement (ICM) via your MMP:
  • Update 3rd party MMP SDK: (e.g., AppsFlyer, Adjust, Branch, Singular, etc.) to update their SDK to the latest version that supports ICM. The specific version required varies by MMP so you must check with your MMP. And yes, YOU NEED A MMP TO HAVE ICM!
  • Enable Probabilistic Attribution: Within your MMP's UI or settings, ensure that "probabilistic attribution" is turned on. I'll leave here the top 3 MMPs:
    • For AppsFlyer, this is often labeled "Advanced Data Sharing." + ensure the "Aggregated Advanced Privacy (AAP)" toggle is OFF in your AppsFlyer iOS app settings.
    • For Adjust, it's typically found under Attribution Settings as a "Probabilistic modeling" option.
    • For Singular, you also have a "probabilistic attribution" within the setup module.
3rd STEP - Ensure that you have imported AppsFlyer's first_open and session_start events into Google Ads.
ICM relies on these being correctly imported. Importing other post-install events is also highly recommended.

4th STEP - If you are using Consent Mode, verify that the ad_storage parameter is set to "granted".
ODM Event Data will not operate if ad_storage is "denied".

5th STEP - Verify the integration.
Enable debug mode by adding -FIRDebugEnabled under Arguments Passed on Launch in Xcode's scheme editor.
Delete the app in the Simulator or device. Upon launching the app in Xcode, verify that a message like the following appears in the Xcode debug console:
1772091175918.png
That "_psmvalue_gads" won't appear unless you test with a real device!

6th STEP - Set up your Campaign & Check the data

I have talked to 3 different reps and ALL of them have confirmed that you MUST use FIREBASE events for your CPA (in-app action) campaign. ROAS optimization is still NOT ready but it will be available soon.

I also had some people that used the MMP event and apparently, there was not any issue but I haven't tested it.

After running the campaign for a few days, compare the data in both the MMP and Google dashboard. According to my experience, deviations can be high in the first days but the gap gets smaller with the time so you have to be patient.


I hope it helps!
And please, if someone knows any other steps that are required, please feel free to share them on this thread and I'll be editing the original post so we always have this guide updated.

Have a nice rest of the week dear anonymous friends.

Btw, I'll be sharing this on LinkedIn. You know me but I don't know you so if you can react, that will help to attract more people to the community :)
 
Last edited:
First of all — thank you for putting this guide together. Seriously.


I’ve had to go through something very similar myself, and beyond realizing that iOS UAC is an absolute masterpiece (yes, that’s sarcasm), the reality is there are a couple more important nuances worth mentioning.


⚠️ 1. SDK Initialization Order Actually Matters​

There seems to be an underlying issue between Google and the MMPs regarding how each SDK initializes.

If the MMP SDK initializes too quickly, there are cases where the install fires without odm_info present. Surprising, huh? Not really - something like this has been happening with ATT and MMPs SDKs for quite a while...

And considering that ICM is essentially the bridge that enriches deterministic data with this new probabilistic layer (let’s not call it fingerprinting… oops) — missing that piece at install time can absolutely affect campaign performance and signal quality.

I’ve been told Google Product is “working on it.” We’ll see.



💰 2. About tROAS… Let’s Be Honest​

Even if tROAS were fully “ready,” the current limitation still applies:

Google only allows tROAS optimization using Firebase events. I’ve tried 20 different ways to bypass this and push MMP events through Firebase cleanly. It doesn’t work.

There is a workaround if you’re using Amplitude and sending RevenueCat events directly there — and then routing strategically — but that’s another rabbit hole. Happy to explain if people are interested.

Also, yes — there are whispers of tROAS betas “flying around.” BUT. Big BUT:

You need serious spend to even get considered.

Early feedback? Let’s just say… performance is still “suboptimal.” (wink, wink)



🚢 Where I Stand (For Now)​

I’m closely following all the “improvements coming soon” that Google keeps promising.

This quarter?
Next quarter?
Who knows.

But for now, I’m firmly on the Web-to-App (W2A) flow recommendation boat for iOS on Google.

And here’s the fun part: You might not even need a landing page if you know a bit of black magic from the UA world.
 
But for now, I’m firmly on the Web-to-App (W2A) flow recommendation boat for iOS on Google.
What do you recommend? Redirecting traffic for iOS from the websites and from YouTube in Google Display Network directly to the App Store?
 
Last edited:
Is there any advantage to using ODM + ICM if I’m running Google Search Ads Web-to-App campaigns?
AFAIK, there’s no clear incremental benefit from ODM + ICM for Search Web-to-App right now. But there are improvements in the pipeline, especially for next Q.
 
What do you recommend? Redirecting traffic for iOS from the websites and from YouTube in Google Display Network directly to the App Store?
For iOS, I’d honestly recommend trying not to rely too much on UAC in Google. In my experience, it tends to underperform more often than not, regardless of the inventory mix. If I were you, I’d focus on buying web inventory and always targeting mobile traffic.

As a first step — and for the sake of technical simplicity — I’d let the MMP send conversions directly back to Google. That’s the cleanest setup to start with. As a second step, though, I’d even consider removing the MMP from the loop when sending conversions back to Google.

In Google’s case, you can actually avoid needing a landing page altogether with some MMPs. With other ad networks, however, you’ll usually need a landing page if you’re using an MMP, since some browser-side parameters are extremely valuable from a match-rate perspective.

If you’re open to a slightly more advanced setup, you can integrate directly with each ad network’s API and manage all click parameters internally (DB or data warehouse). It requires more effort, but the control and signal quality you gain make it well worth it.
 
Thank you. One more quick question: I understand we need to add conversions (installs, purchases, etc.) from both Firebase/GA and our MMP as goals in Google Ads. However, is it better to optimize using Firebase events or MMP events? And how should we set primary vs. secondary conversions?
 
Thank you. One more quick question: I understand we need to add conversions (installs, purchases, etc.) from both Firebase/GA and our MMP as goals in Google Ads. However, is it better to optimize using Firebase events or MMP events? And how should we set primary vs. secondary conversions?
It really depends on what bidding strategy you’re using.

If you’re optimizing toward tCPA, I’d honestly recommend testing both (Firebase and MMP events) and seeing which one performs better. In my experience, especially on iOS, UAC almost always has discrepancies — so it’s more about which signal gives the algorithm more stability and volume.

Now, if you’re planning to test tROAS (and you’re in the beta), Google will currently force you to use Firebase events. When you’re inside the campaign setup, MMP events simply won’t show up as eligible for bidding. So in that case, you don’t really have a choice.

Ideally, this might change soon and they allow MMP events for VO bidding — especially since they’ve launched ODM + ICM. There are rumors that it might happen… but who knows :rolleyes:
 
Thanks for sharing this @davamosk 🙏
Only question I have relates to your suggestion to ensure the "Aggregated Advanced Privacy (AAP)" toggle is OFF. Just did a bit of digging and 'Aggregated Advanced Privacy' apparently Apple's privacy requirement operationalised through AppsFlyer. Turning it off for non-consenting users would mean sharing user-level data that those users explicitly said they didn't want shared. That would apparently put us at risk of Apple policy violations so this one concerns me to be honest. Any thoughts on this?

PS Just got off a call with our Google rep and asked about this. He said he couldn't see any documentation on how the "Aggregated Advanced Privacy (AAP)" relates to ICM+ODM. He was going to check with his team and get back to me so I will share that here when I hear anything :)
 
Apple is totally aware of how companies do fingerprinting and they don't care at all. If they forbade that, the industry would fall resoundingly and Apple would be the first party affected, receiving MUCH less money from apps that can't advertise iOS apps efficiently so they are the first ones that are not fully interested in doing that.

I have never had an issue and i have disabled that toggle in many many accounts. If you don't do that, you can't have probabilistic attribution.

Disabling the trigger allows to share user-level data but you still dont have the IDFA so the info that you normally share is device, IP, carrier, etc,etc which are the data points that ad networks like Facebook (with AEM) or TikTok (with ADC) or Applovin or any platform offering real-time signals use to match the click of the ad with the conversion.
 
Back
Top