Short answer: trace the event in order. If it is missing in the MMP, check SDK timing and event names. If it reaches the MMP but not the network, check event mapping and the postback delivery log. On Meta iOS campaigns, check AEM event configuration.
Where revenue events get lost
Postback: a message the MMP sends to an ad network or partner to report an install or in-app event, so the network can attribute and optimise on it.
A purchase passes through three hops: app to MMP, MMP to network, network to report. Each hop has its own failure modes, so find the hop first.
Is the event missing in the MMP or only in the network?
Check the MMP's raw event log for a test purchase. If it is there, the problem is between the MMP and the network; if not, it is in the app or server set-up.
Likely causes
- Event fires before the SDK has started, or under a different name from the MMP set-up (general practice).
- Server events without the install's identifier, so the MMP cannot join them to a campaign (general practice).
- Event not mapped to the network, so no postback is sent (general practice).
- Network rejects the postback, for example a wrong conversion ID or label on Google.
- Not AEM-eligible on Meta iOS. Meta lists ineligible events among the reasons iOS results differ, and allows 8 prioritised events.
- Currency or value mismatch. Google lists mismatched value settings among discrepancy causes.
- Failed purchases. Google says Play excludes failed purchases, so its counts can be lower.
How to confirm it
- Make a test purchase on a device with a known install.
- Look for the event in the MMP's raw event log, with its name, value and currency.
- Open the network's event mapping in your MMP and check the event is switched on.
- Read the postback delivery log for errors from the network.
- For Meta iOS, check AEM event prioritisation in Events Manager.
MMPs such as Linkrunner, Tenjin or Kochava document how revenue should be sent to them, including the currency field; compare your implementation against your MMP's guide.
How to fix it
- Start the SDK on first open and queue events until it is ready.
- Use one list of event names across app, server and MMP.
- Pass the MMP's identifier to your server and include it on server-side events.
- Map each revenue event to each network and switch postbacks on.
- Send an ISO currency code with every revenue event.
| Where it is missing | Look at |
|---|---|
| MMP event log | SDK timing, event name, server identifier |
| Network, Android or web | Event mapping, postback log |
| Meta iOS only | AEM configuration |
| Values only | Currency, refunds, failed purchases |
The events and revenue troubleshooter walks through these hops, and if counts match but values do not, see ROAS differs although counts match. If installs themselves are unattributed, start with paid installs showing as organic.