Runbook: Marketing Attribution Drop

Use this runbook when marketing partners report that paid installs are under-counted and organic traffic is over-counted. The most common cause is a new Appsflyer campaign whose deeplink URLs were never registered with the Flutter app, so Android sends the traffic to the Play Store instead of an app intent.

Datadog Resources

  • Monitor: N/A — incidents are reported by the marketing team, not Datadog.

  • Logs: Flutter deeplink logs

  • APM: N/A

Symptoms

  • Marketing partners or the MX team report a drop in attributed installs for one or more campaigns.

  • Appsflyer dashboards show a large spike in organic installs that coincides with the drop in paid installs.

  • Affected campaigns are typically new — created within the last few weeks.

  • The drop is usually more pronounced on Android than iOS because of how Android resolves App Links.

Likely Causes

  1. A new Appsflyer campaign was created but its deeplink URLs were never registered in the Flutter app, so Android cannot route the URL to an app intent.

  2. A recent change to the Flutter router config (floatme-flutter) broke an existing deeplink path.

  3. The Appsflyer SDK was upgraded or reconfigured in a recent app release.

Diagnosis

  1. Ask the MX team which campaigns are affected and when they first noticed the drop.

  2. List all Appsflyer campaigns created in the 30 days before the drop. Compare creation dates against the symptom-onset date.

  3. Pull the campaign’s OneLink template from the Appsflyer console and check whether the host and path are present in the Flutter app’s Android intent filters and iOS associated domains.

  4. Review the floatme-flutter git history for router and deeplink changes in the same window. The April 2026 incident traced back to router changes on April 14 and April 16.

  5. Open the affected OneLink on an Android test device. If it lands on the Play Store listing instead of the app, the URL is not registered as an App Link.

Mitigation / Resolution

  1. Register the campaign URL with the Flutter app — see Register an Appsflyer campaign.

  2. Bundle the registration into the next mobile hotfix. There is no server-side mitigation; the fix must ship in a new app build.

  3. Once the hotfix is released, ask the MX team to confirm that attributed installs return for the affected campaigns.

Escalation

  1. Open an incident huddle as soon as the report is confirmed — see Open an incident huddle.

  2. Pull in the mobile lead for routing and deeplink consultation (Tobenna, Daniel, or Kyler).

  3. Notify the MX team of the root cause and ETA in the main incident channel once identified.

  4. If a Flutter release is blocked, escalate to the engineering on-call manager so the hotfix is prioritized.