--- name: feed-health-check description: Scheduled feed health monitoring with anomaly detection across Google Merchant Center and Meta Commerce Manager. Tracks product counts, disapproval trends, feed freshness, and campaign impact. ALWAYS invoke when the user says 'feed health check', 'check my feeds', 'product count', 'are feeds working', 'feed monitoring', 'scheduled feed review', 'quick feed check', or any routine feed status request. model: opus context: fork argument-hint: "[client-name]" allowed-tools: Read, Grep, Glob, Bash, Write, Agent, mcp__google-ads__run_gaql, mcp__google-ads__execute_gaql_query, mcp__meta-ads__list_catalogs, mcp__meta-ads__list_product_sets, mcp__meta-ads__get_insights, mcp__google-analytics__run_report --- # Feed Health Check Streamlined feed health monitoring designed for regular cadence checks. This is the quick version of feed-diagnostics. It focuses on anomaly detection rather than deep investigation. When anomalies are detected, it triggers a full feed-diagnostics run. ## Context The user wants a quick health check on a client's product feeds. This is designed to run frequently (on demand, weekly, or as part of a client check in) and surface problems quickly. It does NOT do deep investigation. When it finds something wrong, it flags it for the feed-diagnostician agent or a full feed-diagnostics skill run. ## Arguments $ARGUMENTS should include: - Client name (required) - Google Ads Customer ID (required) - Check type: quick (5 min, counts only) | standard (15 min, counts + errors + trends) | deep (triggers full feed-diagnostics) ## Instructions ### Quick Check (5 minutes) Pull three data points per platform: **Google Merchant Center:** ```sql SELECT shopping_product.status, COUNT(*) FROM shopping_product GROUP BY shopping_product.status ``` Capture: total eligible, total disapproved, total pending. **Meta Commerce Manager:** ``` mcp__meta-ads__list_catalogs ``` Capture: catalog product counts. **Compare against baseline:** Read `clients/{client-name}/feed-health-baseline.json` (create if first run). Flag if: - Product count dropped >5% from baseline - Disapproval count increased >5% from baseline - Any platform shows zero products (catastrophic feed failure) Update baseline after each check. ### Standard Check (15 minutes) Everything in Quick Check, plus: **Disapproval breakdown (GMC):** ```sql SELECT segments.product_item_id, shopping_product.status, shopping_product.issues FROM shopping_product WHERE shopping_product.status = 'NOT_ELIGIBLE' LIMIT 50 ``` Classify top errors by taxonomy (DATA_QUALITY, POLICY, IMAGE, PRICE, etc.) **Product performance correlation:** ```sql SELECT segments.product_item_id, metrics.impressions, metrics.clicks, metrics.conversions FROM shopping_performance_view WHERE segments.date DURING LAST_7_DAYS AND metrics.impressions > 0 ORDER BY metrics.conversions DESC LIMIT 20 ``` Verify top converting products are not disapproved. **Meta product performance:** ``` mcp__meta-ads__get_insights with breakdowns=product_id, date_preset=last_7d ``` Check for products with spend but zero conversions (possible feed/tracking mismatch). **Feed freshness (Chrome if needed):** Check last feed upload timestamp on both platforms. Flag if >6 hours old. ### Anomaly Detection Triggers If any of these fire, escalate to full feed-diagnostics: | Trigger | Threshold | Action | |---|---|---| | Product count drop | >5% from baseline | ALERT + full diagnostics | | Disapproval spike | >5% increase from baseline | ALERT + full diagnostics | | Zero products on any platform | 0 eligible products | CRITICAL ALERT + immediate investigation | | Top performer disapproved | Top 10 by conversions has status != ELIGIBLE | HIGH ALERT | | Feed stale | >12 hours since last upload | HIGH ALERT | | Cross platform count mismatch | >10% difference between GMC and Meta | MEDIUM ALERT | ### Baseline Management Store baselines per client: ``` clients/{client-name}/feed-health-baseline.json { "last_check": "2026-03-25T06:00:00Z", "gmc": { "eligible": 1250, "disapproved": 23, "pending": 5, "last_feed_upload": "2026-03-25T04:00:00Z" }, "meta": { "total_products": 1245, "last_feed_upload": "2026-03-25T03:30:00Z" } } ``` Update baseline after every standard or deep check. Quick checks compare against but do not update (prevents slow drift from masking problems). ## Output Format ### Quick Check Output ``` Feed Health: [Client Name] | [DATE] [TIME] GMC: [X] eligible, [Y] disapproved ([Z]%) | Meta: [X] products Status: [OK | ALERT | CRITICAL] [One line per alert if any] ``` ### Standard Check Output ``` ## Feed Health Check: [Client Name] Date: [DATE] | Metric | GMC | Meta | Baseline | Status | |---|---|---|---|---| | Active products | [X] | [Y] | [Z] | [OK/ALERT] | | Disapproved | [X] ([%]) | [Y] | [Z] | [OK/ALERT] | | Feed freshness | [timestamp] | [timestamp] | | [OK/STALE] | Top Errors: [Top 3 error categories with counts] Top Performers Status: [All OK / [X] at risk] Alerts: [List any triggered anomalies] Next Check: [Recommended timing] ``` ## References - Full diagnostics: `.claude/skills/feed-diagnostics/SKILL.md` - Feed safety: `.claude/rules/feed-change-safety.md` - Merchant Center audit: `.claude/skills/merchant-center-audit/SKILL.md` - Feed specs: `.claude/skills/feed-catalog-optimization/references/platform-feed-specs.md`