MMP API Integrations: Cohorts, Ad Revenue, and the End of CSV Reconciliation
AdsAgent ingests MMP data natively from AppsFlyer, Adjust, Singular, Branch, Kochava, GameAnalytics, and TenjinIO — API + postback, not nightly CSV dumps. The result is cohort tables, ad revenue attribution, and channel ROAS that all reconcile in one screen.
Platform dashboards tell you one thing about your paid media. Stripe tells you a different thing. Your MMP tells you a third thing. For most operators the three numbers never agree, and the resolution ritual — export CSVs, paste into Sheets, reconcile at the end of each month — eats more hours than most people admit. We shipped direct API integrations to the major MMPs so that reconciliation stops being a weekly human job.
AdsAgent ingests MMP data natively from AppsFlyer, Adjust, Singular, Branch, Kochava, GameAnalytics, and TenjinIO. The integration is real API + postback, not nightly CSV dumps, so cohort cuts stay current and channel-level truth stays a single click away instead of a separate export.
Why MMP data matters more than platform data
Platform-reported conversions are useful for intraday pacing. They are useless for cohort economics. Three specific failure modes, all of which MMPs fix:
- Cross-platform double counting. Meta and TikTok both claim 7-day view-through credit; platform totals sum to 200-300% of true installs. MMPs enforce last-touch attribution across channels with deterministic device graphs, which deduplicates natively. (Web purchase flows have a parallel double-counting trap inside Meta itself — see Meta CAPI and iOS in 2026 for the
event_iddedup mechanics.) - Post-install engagement. Platforms see the install event. MMPs see day-1 retention, day-7 retention, day-30 ARPU, purchase cohorts, and feature-level engagement. The channel with the highest install count often has the worst cohort quality, and you cannot see that from any ad manager.
- Ad revenue attribution. For publishers running ad-monetized apps, rewarded-video and interstitial revenue is the actual ROAS numerator. Platforms do not see this at all. MMPs that wire AdMob, AppLovin MAX, ironSource, and Unity mediation back through their own SDKs do, and AdsAgent surfaces it alongside IAP revenue in the same channel breakdown.
What AdsAgent surfaces via MMP
Once an MMP is connected — one OAuth or API-key step per provider — AdsAgent ingests and presents the following without any CSV work:
- Cohort tables cut by install date, campaign, ad set, creative, country, placement, or any combination. Each row shows installs, d1/d7/d30 retention, ARPU, LTV prediction, and ROAS against spend pulled from the matching ad platform.
- Per-product revenue depth. A saved product maps to one or more MMP events (signup, first purchase, key level reached). Each event has its own count, unique-user count, and revenue stream, with breakdown by country or placement.
- Channel-level ROAS that uses MMP-attributed revenue as the numerator and platform-reported spend as the denominator. This is the only ROAS number that treats cross-platform double-counting and post-install behavior correctly at the same time.
- Ad revenue integration for apps. For titles with ad monetization, AdsAgent layers rewarded/interstitial revenue data from MMP ad-revenue tracking into the same per-cohort table as IAP revenue. You see the full LTV picture on one screen.
- Freshness signals. Every MMP pull is background-synced; reads tell you whether the cohort you are looking at is
fresh,syncing,stale, ormissing. You never guess whether the number you are looking at is from two minutes ago or two days ago.
How the integration works
For each MMP we run a native connection flow:
- AppsFlyer: API V2 authentication against the master API token; we pull Pull API reports, cohort reports, and ad revenue reports on a scheduled cycle plus on-demand fetch.
- Adjust: Adjust Report Service API + deliverable-level push. Cohort reports arrive via scheduled Pull; SKAN attribution is handled through Adjust's server-side bundle.
- Singular: REST API for cohort reports and server-to-server postback validation. Custom cohort metrics map cleanly into the same AdsAgent cohort table.
- Branch and Kochava: similar shape — REST pulls for cohort tables plus event postbacks for near-real-time install + event attribution.
- GameAnalytics and TenjinIO: primarily read-side pulls for cohort cuts and revenue tables, biased toward game publishers.
Every connection is scoped per AdsAgent workspace. One workspace can host multiple MMP connections — separate AppsFlyer app tokens, multiple Adjust trackers — and cohort metadata stays isolated per connection_id. Switching MMPs mid-year is not a full data migration; it is adding a second connection and flipping the default source.
What this means for a marketing team
The concrete change: the weekly reconciliation meeting, the one where someone pulls ads-manager CSVs and the finance person pulls the MMP CSV and they argue about why numbers disagree by 18%, does not need to happen anymore. Both numbers live in the same dashboard, against the same spend denominator, with the same attribution policy.
The second-order change is that operators start asking better questions. When cohort ARPU is one click away from campaign spend, people stop optimizing for CPI and start optimizing for d30 ROAS, which is the number that actually decides whether the account lives or dies. The tooling you use shapes the decisions you can make — and for most ad accounts, the rate-limit on better decisions has been how hard it is to get MMP data next to platform data in the same frame. That is the rate limit we built against.
More from the blog
Google Ads
Google Marketing Live 2026: What AI Max, Ask Advisor, and the DSA Deadline Mean for Ad Operators
AI Max exits beta, DSA force-migrates in September, Smart Bidding Exploration hits PMax, and Gemini becomes the OS of Google Ads. What operators need to do before the deadlines land.
Meta Ads
Meta Will Auto-Attach Product Data to Your Pixel Events: What the 30-Day Window Means
Meta is rolling out AI-inferred page and product metadata as automatic enrichment on Pixel + CAPI events, auto-on after a 30-day notification. What to review in Events Manager before the window closes.