Short answer: bad attribution data rarely shows up as a line item. It shows up as budget moved from a channel that works to one that only looks like it works. The cost is the installs you would have bought at the better channel's real CPI. Most of it comes from five fixable causes: mismatched definitions, missing deterministic signals on Android, broken SDK or event setup, wrong expectations of iOS data, and nobody checking the numbers each month.
Most teams never see a bill for bad attribution. They see a dashboard that says one channel is cheap and another is expensive, and they act on it. This post shows how that goes wrong, how to put a rupee figure on it, and what to fix first.
What Is Bad Attribution Data?
Bad attribution data is install and event data credited to the wrong campaign, or not credited at all, so the cost per install (CPI) and ROAS you see per channel differ from what each channel really delivers.
Attribution discrepancy: the gap between the numbers your MMP, your ad networks and your own analytics report for the same campaign.
Some discrepancy is normal, because each tool counts differently. It becomes bad data when the gap changes which channel you think is winning.
How Does Bad Data Waste Budget?
Bad data wastes budget through one decision: you move money towards the channel with the lowest reported CPI, and if that CPI is wrong, every rupee you move buys fewer installs than it did before.
The damage shows up in three ways:
- Misallocation. Spend shifts towards channels that are over-credited, for example a search campaign that collects the last click from users a video ad already convinced.
- Opportunity cost. The under-credited channel gets cut, so you lose installs you were buying cheaply.
- Bad optimisation signals. Ad networks optimise on the conversions you send back as postbacks. If events go missing or land on the wrong campaign, the network's algorithm learns from the wrong users.
How Much Can It Cost? A Worked Example in Rupees
In this illustrative example, misattribution makes a ₹15 lakh monthly budget lose roughly 4k installs a month, worth about ₹80k of spend, or around 5% of the budget.
Take an app spending ₹15 lakh a month on two channels. On Android, around 14k Meta-driven installs are being credited to Google because the Meta signal is not being read. Here is what the dashboard says against what really happened:
| Channel | Monthly spend | Reported installs | Reported CPI | True installs | True CPI |
|---|---|---|---|---|---|
| Meta | ₹9 lakh | 36k | ₹25 | 50k | ₹18 |
| ₹6 lakh | 39k | about ₹15 | 25k | ₹24 | |
| Total | ₹15 lakh | 75k | ₹20 | 75k | ₹20 |
Totals match, so nothing looks broken. But the team sees Google at about ₹15 and Meta at ₹25, and moves ₹3 lakh from Meta to Google.
- At Meta's true CPI of ₹18, ₹3 lakh would have bought roughly 16.7k installs.
- At Google's true CPI of ₹24, the same ₹3 lakh buys 12.5k installs.
- The gap is about 4k installs a month. At the ₹20 blended CPI, replacing them costs about ₹80k, roughly 5% of the budget, and close to ₹10 lakh a year.
This assumes CPI stays flat as spend moves. In practice, CPI tends to rise as you push more budget into one channel, which can make the real loss bigger.
What Has Changed on iOS?
On iOS, user-level attribution needs the user's App Tracking Transparency (ATT) permission; without it, measurement relies on Apple's SKAN and AdAttributionKit, which report aggregated results after a delay.
ATT: Apple's permission prompt that apps must show before they can track a user across other companies' apps and sites.
AdAttributionKit: Apple's privacy-preserving attribution framework, which builds on SKAN and can run alongside it.
What this means for budget decisions:
- Aggregated, not user-level. SKAN and AdAttributionKit postbacks tell a network a campaign drove a conversion, not which user. Cohort and LTV analysis by user is not possible from them.
- Delayed. Apple's documentation sets a minimum of 24 to 48 hours before a first-window postback reaches the ad network, so same-day optimisation on iOS is limited.
- One winner. When an app has both AdAttributionKit and SKAN impressions, Apple picks a single winning impression for each conversion, so the two do not double count.
Judge iOS channels over a week or more, not day by day, and do not compare SKAN-based numbers directly with user-level Android numbers.
What Are the Five Most Common Causes?
The five most common causes are definition mismatches, missing deterministic signals on Android, broken SDK or event setup, wrong expectations of iOS data, and no regular data checks.
1. Different definitions, not different data
When Linkrunner customers ask why their ROAS differs from Meta or Google, the usual answer from support is a definition gap rather than a fault: a 7-day click window against a 30-day or lifetime window, cohort against in-period counting, or view-through conversions counted on one side only. Real setup faults are the minority.
- Put both sides on the same window and counting method before you call it a discrepancy.
- Read why Meta ROAS and MMP ROAS don't match for the side-by-side checks.
2. Missing deterministic signals on Android
Deterministic attribution: matching an install to a click using an exact identifier, such as a click ID or an install referrer, rather than an estimate.
- Check that the Google Play Install Referrer is being read on first open.
- If you run Meta on Android, set up the Meta Install Referrer. Without it, Meta installs can be under-credited and other channels pick up the credit, as in the example above.
- Linkrunner matches deterministically first, using click IDs and install referrers, with IP and user-agent matching only as a fallback when no deterministic signal exists.
3. Broken SDK or event setup
- Late SDK initialisation. If the SDK starts after the first screen, a paid install can land as organic.
- Events lost after an app update. A new release that drops or renames an event breaks the postbacks networks optimise on.
- Renamed payment fields. Changing a revenue or order ID field can break de-duplication, so purchases are missed or counted twice.
4. Wrong expectations of iOS data
- Expecting user-level data, deferred deep links or event-level attribution from SKAN leads to the conclusion that iOS "isn't working".
- Launching before the prerequisites are done (ad network IDs in Info.plist, the conversion schema set up in each network) leaves early postbacks empty.
5. No one checks the numbers each month
- Discrepancies creep in after app releases, campaign renames and new network connections.
- A short monthly routine catches them before they move budget. Use the monthly MMP data quality checks, and the attribution discrepancy diagnostic guide when a gap appears.
What Does Good Data Look Like in Practice?
Good data shows up as CPI you can act on: two Linkrunner customers cut their CPI within three months using Linkrunner.
- Playo cut its Google Ads CPI by 34% in three months, from about ₹20 to about ₹13 between December 2025 and February 2026. Read the Playo story.
- Matiks cut its Meta CPI by 46% in three months, from about ₹22 to about ₹12, while growing from 65k to 108k monthly installs and spending 10% less. Read the Matiks story.
How Do You Fix It?
Start with an audit: line up your MMP, ad network and analytics numbers on the same definitions, then work through the five causes in order.
- Agree definitions. Same attribution window, same counting method, same time zone and currency across every report.
- Compare three sources. MMP, ad network and your own backend or analytics, by channel. Investigate any channel where the gap changes the ranking.
- Check Android signals. Play Install Referrer and Meta Install Referrer both working.
- Check the SDK and events. Initialisation at app start, events and revenue firing after the latest release.
- Set iOS expectations. Judge SKAN and AdAttributionKit results on a weekly view.
- Repeat monthly. Put the checks on the calendar and give them an owner.
If you are weighing up tools, compare what an MMP costs against the budget at risk in the worked example above.
FAQs
How much budget does bad attribution data waste?
It depends on how wrong the data is and how much budget you move because of it. In the worked example above, crediting about 14k Meta installs to Google and moving ₹3 lakh in response costs roughly 4k installs a month, around 5% of a ₹15 lakh budget. Run the same sums with your own reported and corrected CPIs.
Why do my MMP and ad network numbers never match exactly?
They count differently. Ad networks often use longer windows, include view-through conversions and credit themselves, while an MMP de-duplicates across networks and applies one attribution window. Align the definitions first; a small remaining gap is normal, but a gap that changes which channel looks best needs investigating.
Is SKAN or AdAttributionKit data accurate enough to set budgets?
Yes, for channel and campaign-level decisions over a week or more. Both are aggregated and delayed by design, so they cannot support user-level cohort analysis or same-day changes. Combine them with user-level data from users who grant ATT permission, and judge iOS campaigns on trends rather than single days.
The Bottom Line
Bad attribution data costs you through the decisions it drives, not the dashboard itself. Put a rupee figure on it with your own CPIs, fix the five common causes, and check the numbers every month so budget follows the channels that really work.
