MGID Tracking Health Monitor

Use when checking MGID conversion tracking health, diagnosing zero conversions with spend, or before running optimization — e.g. "is tracking working", "why no conversions", "tracking health check", "can we optimize".

MGID Tracking Health Monitor

Gate skill — validates conversion data before budget/source/creative actions.

Tools: tool reference
Schemas: schemas

Called standalone or as Phase 0 of mgid-auto-optimization-simulator.


Required inputs

Input Required Default
Scope Yes all active campaigns
Date range Yes last 7 days (end = yesterday)

MCP tools

Tool Purpose
get_account Wallet balance/credit
list_conversion_targets Account has conversion targets defined
list_campaigns Active campaign ids + config (status, type, conversionTracking, bidding)
get_portfolio_statistics One call — spend, clicks and conversions for every campaign
get_campaign Full config when list row insufficient
get_campaign_statistics Only for a campaign already flagged — daily rows answer "when did conversions stop"

There is no account-goals or inline stats in list_campaigns. Take the whole portfolio's numbers from get_portfolio_statistics; do not loop get_campaign_statistics over the account.

Campaign types search_feed and newsletter have no teaser-level conversion model — report them as out of scope rather than failing them.


Workflow

For each active campaign in scope:

1. Tracking configured

From get_campaign / list_campaigns → conversionTracking:

  • Sensors, postback stage, or URL target present → pass
  • Missing → critical

Cross-check list_conversion_targets is non-empty for account-level setup.

2. Spend with zero conversions

From get_campaign_statistics → totals:

  • ASSUMPTION: spent ≥ $50 AND conversionsBuy = 0 → critical
  • ASSUMPTION: spent ≥ $20 AND clicks ≥ 200 AND conversionsBuy = 0 → high

3. Implausible CVR

  • ASSUMPTION: clicks ≥ 500 AND conversionsBuy = 0 → high
  • ASSUMPTION: CVR > 50% with clicks ≥ 100 → medium

4. CPA campaign without tracking

bidding.strategy is cpa and check #1 fails → critical

5. Warming up

Campaign created < 3 days ago (if known) → warming_up: true, downgrade severity


Gate rule

gate_result = pass only if no campaign has critical or high on checks #1 or #2.


Output

Chat: human summary only (pass/warn/fail + bullet list).

Optional file: TrackingHealthReport JSON if user or simulator requests persistence.

Emit fix_tracking recommendations (no MCP write) when failed. Use readable ids e.g. fix-campaign-12061865-tracking.


Integration

On fail: simulator sets gates.tracking_health = fail, suppresses spend actions with blocked_by: ["tracking_unhealthy"].

No "test conversion recorded via API" check — no read tool supports it; ask user to confirm test conversion manually if needed.