2026-05-27 creators campaigns attribution issues
TL;DR. Creator-campaign attribution is broken on all three platform source paths (iOS, Android, Web). Each broke for a different reason at a different date. The dashboard appears to show "creators stopped converting", but the measurement pipeline is broken — not the campaigns.
Reporter: Blanche (Marketing) · Dashboard owner: Caio Priszculnik.
Report scope
This is the creator-campaign attribution report. Use Marketing Campaign Attribution home for the pipeline map and source changelog; use this page for the creator-campaign business impact and platform-specific diagnosis.
Executive status
Creator-matched installs collapsed from the 2023 peak because attribution sources broke, not because creator campaigns stopped performing.
Platform-source diagnosis
iOS, Android, and Web each have a different source-path failure. Those source pages are parked until curated.
Tests & freshness
Planned: add a small quality panel per source/model with freshness SLA, last successful load, row-volume checks, null-rate checks, and dbt/Dataform test status.
Incident log
Use the Attribution incident log for postmortems/changelog entries. Each major issue should include symptom, impact, root cause, fix status, and a Mermaid impact graph on the detailed page.
The headline issue
Creator-campaign attribution started collapsing in 2024, not 2025. By event year (not post cohort), creator-matched installs across all platforms halved from 64,052 (2023) → 29,255 (2024) → 9,261 (2025). Each platform broke for a different reason at a different date — but the dashboard makes it look like the creator program stopped working. It didn't. The measurement did.
| Event year | Android | iOS | Web | Total | YoY |
|---|---|---|---|---|---|
| 2022 | 10,880 | 26,612 | 5,687 | 43,179 | — |
| 2023 | 33,717 | 19,151 | 11,184 | 64,052 | peak |
| 2024 | 15,142 | 6,450 | 7,663 | 29,255 | −54% |
| 2025 | 4,869 | 2,849 | 1,543 | 9,261 | −68% |
iOS is the biggest absolute loss (26,612 → 2,849 = −89% over 3 years) and the only platform with two distinct breaks:
| Platform | Break point(s) | Diagnosis status | What we know | What we don't |
|---|---|---|---|---|
| iOS | Nov 2023 + April 2025 + Nov 2025 | All three confirmed | Three issues stacked: (1) Nov–Dec 2023 — creator-matched share collapsed (~1,500/mo → ~500/mo) while the source stayed healthy → tracking-link coverage issue, not source. (2) 2025-04-10 — Apple Ads registered with AdAttributionKit; total first-time download volume dropped 89% (12,205 → 1,348) — almost all of this was Apple Search Ads, NOT creators. (3) 2025-11-01 — THE BIG ONE: new Fivetran source landed, but the Dataform filter download_type = 'first-time download' now captures only 0–5 creator installs/month while 15k–25k creator-tagged installs/month are sitting in auto-update rows (Apple's post-AdAttributionKit persistent attribution). |
Whether AppsFlyer / PostHog give clean TRUE-new-install counts; auto-update is persistent attribution, not new installs |
| Android | August 2025 | Symptom confirmed, root cause not yet | Attributed installs collapsed 24,405 (Jul) → 92 (May 2026), a −99.6% drop. Both utm_campaign AND utm_source collapsed together. Total event volume unchanged (~9M/mo). Verified at the raw GA4 export — dbt is innocent, the Android client itself stopped sending UTM params. The 2025-07-22 source swap was NOT the cause (July was the peak). |
Why the Android client stopped sending UTMs. Could be app version, Firebase SDK upgrade, account-flow rewrite, SDK migration, or Android Privacy Sandbox. Needs Android team input. |
| Web | 2026-03 → 2026-04 | Root cause confirmed | Rudderstack client_web.signed_up is dying — flat utm_* 100% null since Apr 2026. Migration to PostHog (posthog.tracks filtered client = 'studio') is the active source. PostHog overtook RDK in May 2026 (168k vs 120k). |
Marketing's official cutover date for RDK → PostHog (likely sometime in 2026) |
At a glance
iOS
Android
account_created in Aug 2025 — July 22 source swap was NOT the cause. AppsFlyer + PostHog available as alternatives.Web
utm_campaign in Rudderstack since Apr 2026. Real cause: RDK → PostHog migration in progress.Pipeline freshness
main_pipeline cron changed daily → monthly on 2026-05-15 (commit 89f525a). Independent issue.Status by platform source path
| Priority | Source path | First affected | Root cause | Fix proposed | Detail |
|---|---|---|---|---|---|
| P0 | iOS / App Store | 2025-04-10 | Apple Ads + AdAttributionKit. Model filters only first-time download, where campaign is mostly null post-event. |
Split metrics: first_time vs campaign_attributed_non_first_time. Do NOT silently inflate installs. |
Not curated |
| P1 | Android / GA4 | Aug 2025 | Android client stopped sending utm_campaign / utm_source on account_created events. Attributed installs collapsed Jul (24,405) → May 2026 (92). The 2025-07-22 source swap was NOT the cause — Jul was actually the peak. Total event volume unchanged. |
Build source-tagged union in dbt: GA4 + AppsFlyer (4.6M Android rows already ingested) + PostHog (~700k Android events/mo). AppsFlyer and GA4 are complementary — only 9 campaigns overlap. | Not curated |
| P1 | Web / RDK → PostHog | 2026-03 transition; 2026-04 complete | Migration from Rudderstack client_web.signed_up to PostHog posthog.tracks (client = 'studio'). |
New dbt model unioning RDK (historical) + PostHog (current) with user_id dedup. |
Not curated |
Pipeline shape (high-level)
For the full upstream-to-downstream lineage graph with per-node health status, see Lineage graph. Quick view:
External
Platform sources: iOS/App Store + AdAttributionKit · Android/GA4 + AppsFlyer + PostHog · Web/RDK + PostHog
Marketing sources: Rebrandly · YouTube · Google Sheets
Commercial sources: Stripe · App Store purchases
↓
Raw / landing tables (Fivetran · Rudderstack · PostHog · GA4 export · Sheets)
↓
Prep (derived_marketing_prep — Dataform)
↓
Master (derived_marketing_master — Dataform)
↓
Report (moises_report.campaigns_funnel_creators — Dataform)
↓
Consumers
Tableau "Creators Campaigns / Overall" · dbt creators_campaigns_* · (future) Metabase
Tests & freshness (planned)
This is the missing operational layer. Add it once the dbt replacement models and source contracts stabilize.
| Check area | What the report should show | Status |
|---|---|---|
| Source freshness | Latest partition/event date per raw source, expected update cadence, and stale/not-stale badge. | Planned |
| Volume guardrails | Daily/monthly row counts by source path with alerts for sudden drops like Android UTM loss or Web RDK sunset. | Planned |
| Attribution completeness | Null-rate checks for campaign keys (utm_campaign, campaign_utm_ct, AppsFlyer campaign fields) by source and month. | Planned |
| Model tests | dbt/Dataform test results for uniqueness, relationships to campaign metadata, accepted platforms, and duplicate user/order handling. | Planned |
Attribution incident log
Treat this as the postmortem/changelog area. The naming I recommend is Attribution incident log: it is specific enough for broken measurement issues, but still works as a changelog when a source intentionally migrates. Detailed incident pages should include a small Mermaid graph showing source change → affected model → dashboard symptom.
| Date | Finding / incident |
|---|---|
| 2026-05-27 | Web root cause revised. Not array-format UTM parsing (small side-effect); real cause is RDK → PostHog migration. PostHog studio client now exceeds RDK in web signup volume (May 2026: 168k vs 120k). |
| 2026-05-27 | iOS root cause confirmed against Apple Ads official docs: "Apple Ads registered with AdAttributionKit on April 10, 2025" — exactly matches the observed −87% data collapse. |
| 2026-05-27 | Android root cause revised. The 2025-07-22 GA4 source swap was NOT the cause — Jun/Jul 2025 were the best months on record (peak 24,405 attributed installs in July). The real break is August 2025: both utm_campaign and utm_source collapsed together while total event volume stayed flat (~9M/mo) — meaning the Android client stopped sending UTM params on account_created. Impact on final table: attributed installs collapsed 24,405 → 92 (-99.6%) by May 2026. |
| 2026-05-27 | AppsFlyer evaluated as alternative for Android + iOS. Already ingested (DAG bq-import-appsflyer): 4.6M Android + 1.67M iOS non-organic rows. For Android, AppsFlyer and GA4 are complementary, not equivalent — only 9 campaigns overlap since Aug 2025 (AppsFlyer covers 37 of 1,500 creator campaigns, GA4 covers 48). AppsFlyer captures much higher install volume for shared campaigns (e.g. ig-bio: 1,314 vs 9). Web not covered by AppsFlyer. |
| 2026-05-27 | Dataform main_pipeline cron change (2026-05-15) noted as separate operational concern; does NOT explain 2024-2025 attribution issues. |
Stakeholders
- Dashboard owner
- Caio Priszculnik
- Issue reporter
- Blanche (Marketing)
- Data Platform
- Moises Data Platform team
- Repo (this folder)
moises-airflow/dags/domains/marketing/docs/creators_campaigns_attribution/- Dataform repo
moises-dataform/definitions/derived/marketing/campaigns_funnel/