AI Max Readiness Tool — Scope
Status: Draft, awaiting answers to 4 open questions (see end). Last updated: 2026-05-02 Trigger: All FCR ads → AI Max by September 2026 (~4 months from draft date).
Context
Google is migrating Ads accounts to AI Max-style automated bidding by September 2026. AI Max performs poorly on accounts with conversion-tracking gaps, weak signal volume, missing audience signals, or no PMax history. Optimisers need a way to identify which of their accounts will break post-migration while there is still time to fix them — and a portfolio-wide view so the Ads team can plan the migration as a campaign, not a fire drill.
This is not a job for the existing prospect_intel channel — that's market intel for new business. Optimisers work with existing ad clients and need different categorical questions answered ("show me all my accounts with PMax > 60% spend that have no brand exclusion list").
Five-Pillar Readiness Checklist
A RED account has a critical issue that will tank performance after the September flip. AMBER is fixable in 4 months. GREEN is migration-ready today.
1. Conversion tracking
- Enhanced Conversions enabled
- GCLID capture rate
- Attribution model = data-driven
- No double-firing (cf. accesstowershop.ie thank-you bug 2026-04-27)
- Cross-domain tracking working
2. PMax history
- Months on PMax (cold-starts under-perform)
- Search-cannibalisation by PMax (brand-search leakage)
- Brand-exclusion list configured
3. Account structure
- Audience signals (≥3)
- Asset library populated (images, headlines, descriptions, sitelinks)
- Branded keywords ring-fenced or excluded from PMax
- Final-URL coverage
4. Signal strength
- Monthly conversions ≥30 (Smart Bidding floor)
- Multiple conversion events feeding bidding
- Seasonality cushion (account isn't a single-event-per-year shape)
5. Tech health
- Site has GA4 tag
- Conversion linker present on the site
- Final URLs returning 200 (not 404 / soft-redirect chains)
- Acceptable PageSpeed (slow LP = bad AI Max attribution)
What we can compute today (no new data dependency)
Using existing worker handlers (copysheet-ads-stats, ads-quality, ga4-stats, gsc-stats, dashboard-sitepro):
| Check | Source | Confidence |
|---|---|---|
| Monthly conversion volume (≥30) | ads-stats | High |
| GSC ↔ Ads click reconciliation (tracking sanity) | gsc-stats vs ads-stats | High |
| GA4 ↔ Ads session reconciliation (linker check) | ga4 vs ads-stats | High |
| Conversion-tracking dedup smell (sudden conversion spikes, suspicious ratios) | ads-stats history | Medium |
| Quality Score distribution + low-QS keyword count | ads-quality (gated to SEA spend ≥€250/mo retail) | High |
| PMax vs Search spend split (already in ads-stats by campaign type) | ads-stats | High |
| Final-URL HTTP probe (200 / 404 / redirects) | new live HEAD probe | High |
| GA4 tag + conversion linker on site | new HTML scrape (extends crawl_website) |
High |
What's gated on Google Ads API access (Phase 2)
These all need live Google Ads API. Per project_keyword_planner.md the worker's only Ads API integration is currently blocked on MCC OAuth. Same blocker affects this tool.
- Enhanced Conversions on/off per account
- Attribution model per conversion event
- Brand-exclusion list present/missing
- Audience signals configured count
- Conversion-event setup (which events feeding bidding)
Two paths around the blocker:
- Unblock the MCC OAuth (separate project; would also unlock Keyword Planner).
- Optimiser-confirmed manual checklist — Optimiser confirms these flags per account in a UI / sheet, we ingest into BQ. Lower automation, ships now.
MVP Shape
New advisor tool: get_aimax_readiness
Input:
subscriberId(single-account drill-down) ORam(portfolio cut for one Account Manager)summary=true(flag — counts only, no per-account detail)
Output (single-account):
{
"subscriberId": "...",
"businessName": "...",
"am": "...",
"monthlyAdSpend": 1500,
"daysToDeadline": 122,
"readinessScore": 65,
"status": "AMBER",
"automatedChecks": {
"conversion_tracking": [
{ "check": "GCLID capture rate", "value": "67%", "expected": ">95%", "severity": "high" },
{ "check": "GA4-Ads session delta", "value": "31%", "severity": "warning" }
],
"pmax_history": [...],
"structure": [...],
"signal_strength": [...],
"tech_health": [...]
},
"manualChecks": [
{ "check": "Enhanced Conversions enabled", "settingsLink": "https://ads.google.com/...", "lastConfirmed": null },
{ "check": "Attribution model = data-driven", "settingsLink": "...", "lastConfirmed": null }
],
"topFixes": [
"Enable Enhanced Conversions",
"Switch to data-driven attribution",
"Add brand exclusion list"
]
}
Output (portfolio mode):
{
"asOf": "...",
"totalAccounts": 240,
"byStatus": { "GREEN": 47, "AMBER": 89, "RED": 104 },
"byAM": [...],
"topGaps": [
{ "issue": "No Enhanced Conversions", "count": 154 },
{ "issue": "Last-click attribution", "count": 121 },
{ "issue": "<30 monthly conversions", "count": 76 }
],
"criticalAccounts": [...]
}
New worker handler: dashboard-aimax-readiness
- BQ-first: pulls last 90 days of
ads-stats+ga4-stats+gsc-statsper subscriber - Live HEAD probe on the final URL (cached daily)
- Live HTML scrape for GA4 + conversion linker (cached daily)
- Returns the readiness card
Dashboard panel (Phase 1.5)
Account view gets a card showing the readiness card + one-click links to the Ads settings pages that need attention. Smaller follow-up after the advisor tool is shipped and exercised.
Phased Plan
| Phase | Scope | Estimate | Blocked by |
|---|---|---|---|
| Phase 1 (auto-only) | Per-account + portfolio readiness using existing BQ + live site probe; manualChecks return as "needs Optimiser confirmation" placeholders | 1-2 weeks | Nothing |
| Phase 1.5 (dashboard panel) | Account-view card + deep-links to Ads settings | 1 week after Phase 1 | Phase 1 |
| Phase 2 (Ads API) | manualChecks become automatedChecks via live Google Ads API | depends on MCC OAuth unblock | MCC OAuth |
| Phase 2.5 (manual ingestion fallback) | If MCC OAuth stays blocked, build a UI / sheet for Optimisers to confirm the gated checks; ingest answers into BQ | 1-2 weeks | Decision on whether to ship this or wait for OAuth |
| Phase 3 (cadence) | Weekly /schedule run that posts AMBER/RED list to Optimisers + Slack/email | 2-3 days after Phase 1 | None |
Open Questions (need answers from Cathal)
MCC OAuth — is anyone working the unblock? If yes, when is it expected to land? If no, do we want to track it as a separate scoping doc?
Optimiser-confirmed manual checks — if MCC OAuth stays blocked, where do Optimisers log their answers?
- (a) Lightweight Google Sheet they fill in (we ingest via n8n)
- (b) Small UI on the dashboard (one panel per account, checkbox per check)
- (c) Roam command (e.g.
/aimax-confirm 38007492 enhanced_conversions=yes) - (d) Defer Phase 2.5 entirely; wait for OAuth
Scope of accounts — readiness check runs on:
- (a) Every active SEA account (~240 if my numbers are right)
- (b) Optimiser-managed plans only (Plus / Pro / managed-fee tiers — narrower)
- (c) Spend threshold (e.g. accounts with retail spend ≥€250/mo, matching ads-quality's existing gate)
Deadline cadence — do you want:
- (a) Just
daysToDeadlinefield on the response (no proactive comms) - (b) Weekly /schedule run that posts AMBER/RED list to Optimiser team (Slack? email? Roam channel?)
- (c) Escalation tiers: T-90 days, T-60, T-30, T-7 with different audience per tier
- (a) Just
Recommendation if you want me to start before answers come back
Phase 1 (auto-only readiness via existing BQ + live site probe) ships in 1-2 weeks and is not blocked on any of the four questions. It's directly useful for Optimisers immediately ("here's what we can verify automatically; the rest you check in Ads UI"). Decisions 1-4 only become urgent when Phase 2 / 2.5 / 3 start.
If you green-light Phase 1, I'd start by:
- Building the readiness scoring logic against existing BQ data (single account mode)
- Adding the live site probe (HEAD + HTML scrape) for GA4 / conversion linker / final URL
- Wiring
get_aimax_readinessinto the advisor with single-account + portfolio modes - Smoke-testing on 5 known accounts representing different conditions (good, broken tracking, low conversion volume, no PMax history, etc.)
Ready when you are.
FCR Dashboard documentation · generated from docs/ · keep counts verified, not guessed.