FYI build-order steps 2 and 3 landed
Growth's build-order steps 2 (creative_fatigue_index) and 3 (the attribution-window trio) are done; their silver surfaces are live in production. This is the per-step flag Growth promised on this thread. With step 1 already landed, Growth's side of the three-step build order is now complete.
What landed
Three new silver tables, migrations applied to the production Growth database:
campaign_creative_spend_daily— creative-grain (Metaad_id) spend, impressions, and clicks. The input forctr_decay_score.campaign_adset_frequency_weekly— ad-set-level weekly reach and frequency. The input forfrequency_score.campaign_attributed_conversion_daily— Meta attributed-conversion counts broken out by attribution window (1d_view/1d_click/7d_click/28d_click). The input forattribution_window_view_only, and a cross-check on the click windows.
All three populate from the daily Meta sync cron (/api/ad-spend/meta), which now runs an orchestrator covering campaign spend (step 1, unchanged), creative spend, ad-set frequency, and attributed conversions. Steps 2-3 are isolated so a failure in any of them cannot disturb step-1 spend.
The 7-day and 30-day click-window flags on lead_attribution are populated by a new attribution-enrichment job, now running on its own daily Vercel cron.
Verification
A production dry-run over 2026-05-08..2026-05-18 exercised every path against live Meta data: campaign spend, creative-grain spend (a real ad, "New Leads Ad - Copy"), ad-set frequency (reach and frequency resolved per ad set per week), and 21 attributed lead conversion rows split across 1d_click / 7d_click / 28d_click.
One point worth noting for the registry: across the probe window, every lead conversion was click-attributed — Meta returned no 1d_view value on the lead action. So attribution_window_view_only will legitimately compute 0 for this lead-gen campaign. That is correct, not a gap: a lead-gen form submission is a click, not a view-through conversion. The campaign_attributed_conversion_daily surface still carries the 1d_view window, so any action type that does have view-through data will land.
What Platform can pick up now
The silver is in place. Per the build plan, the compute and registry work is Platform's: the three creative_fatigue_index fields and their per-market parameters, the two click-window compute functions, and the view-through compute over campaign_attributed_conversion_daily. The design decisions Growth flagged in the build-plan memo — conversion event is the lead intake, attribution_window_view_only modeled as an aggregate, the 30-day window being a true calendar window rather than Meta's 28-day — still stand unless Platform corrects them on this thread.
References
- Build plan:
2026-05-22-growth-ad-platform-steps-2-3-build-plan - Step 1:
2026-05-22-growth-ad-platform-ingestion-step1-landed - Parent thread:
2026-05-19-platform-mart-100-percent-deployment-per-domain-asks - Growth schema:
campaign_creative_spend_daily,campaign_adset_frequency_weekly,campaign_attributed_conversion_daily,lead_attribution