Answer in brief
During an MMP migration you ship one app build that contains both SDKs, send the same events to each, and compare their reports before you move any ad traffic. Keep the old MMP as the only one that sends conversions to ad platforms until cutover, so nothing is counted twice. Stop the parallel run when the gap between the two is stable and explained.
What you ship
You release a single build with two SDKs inside. Both initialise at launch, and every event you care about is sent to each of them. Three details decide whether the comparison is fair.
- Same events, same moment. Fire each event to both SDKs from one place in the code. If "purchase" is sent to one on the confirmation screen and to the other from the server, the totals will never match.
- Same consent handling. Whatever the user's privacy choice is, pass it to both SDKs in the same way.
- One owner of the deep link. Only one SDK should route an incoming link to a screen. Leave routing with the old SDK until cutover.
How to avoid double counting
The risk in a parallel run sits outside your app. If both MMPs send the same install or purchase to an ad platform, the platform may count it twice. Check each platform's documentation. Keep it simple: during the parallel run the old MMP stays connected to your ad channels and keeps sending postbacks. The new MMP only collects and reports.
This means the new MMP will label most installs as organic for now, because your ads still carry the old links. That is expected. In this phase you are checking counts, and attribution comes later.
What to compare, in order
- New installs per day, per platform. Leave out existing users who updated: the new SDK has never seen their devices and may record their first open as an install.
- Each key event per day. Trials, purchases, sign-ups. Check count and revenue amount.
- Attributed installs for one test channel. Move a single low-budget campaign to a new-MMP link and see whether its installs are credited as you expect.
Compare the same calendar days in the same time zone and currency, and only for app versions that contain both SDKs. A small steady gap is normal, because the two products define and deduplicate events slightly differently. The glossary entry on discrepancy lists the usual causes.
Signs that something is wrong
| What you see | Likely cause |
|---|---|
| New SDK shows far more installs | Existing users who updated are recorded as new installs. |
| New SDK shows far fewer installs | Users on older builds are included in the old MMP's total. |
| One event is missing on one side | The event is sent from a code path that only calls one SDK. |
| Revenue differs but counts match | Currency or tax handling is set up differently. |
| The gap changes from day to day | Time zone settings differ, so days are cut at different hours. |
When to stop and what to do next
End the parallel run when the gap has been stable for at least a week and you can explain it. Then schedule the cutover one channel at a time: move that channel's tracking links and reconnect the channel on the same day, then watch it before the next. Keep the old SDK in the app for one more release after that, in case you need to roll back, and then remove it.
While both SDKs run you pay both vendors. If the new one bills by event volume, the parallel weeks count toward that bill too, so check how its trial or first month treats them.
Questions and answers
Can two MMP SDKs run in the same app?
Yes. Two attribution SDKs can sit in one build and each records the same installs and events on its own. It adds some app size and a second set of network calls, so treat it as temporary.
How long should both SDKs stay in the app?
Long enough to cover your longest lookback window plus at least one full week, and until most active users have updated to the build that contains the new SDK.
Continue reading
Guide
A realistic MMP migration timelineA realistic MMP migration timeline for a small app team: five phases from audit to cutover, what sets the pace and where the schedule usually slips.
Guide
Moving live tracking links and deep links to a new MMPHow to move live tracking links and deep links to a new MMP: build an inventory, recreate each link, decide what to do with links you cannot edit.
Guide
What happens to historical data when you switch MMPsHistorical attribution data stays with your old MMP when you switch. What to export before the account closes, what cannot move and how to keep trends readable.
Guide
Reconnecting ad channels after a switchAfter an MMP switch, each ad channel must be linked to the new MMP: account access, event mapping, postbacks, cost data and audiences. A per-channel checklist.
Guide
When switching MMPs is not worth itSwitching MMPs costs engineering time, a break in your data and weeks of double running. Six situations where staying with your current MMP is the better choice.
Alternatives
Best MMP alternative to AppsFlyer and AdjustWhat to check in an AppsFlyer or Adjust plan, four alternatives with public entry prices, and a short checklist for switching MMPs.
Cite this page
Airbridge. “Running the old and new SDK side by side.” bestmmpalternative.com. Reviewed 2026-11-10. https://bestmmpalternative.com/running-two-sdks-in-parallel