google_ads_performance_analyze
Diagnose a single Google Ads campaign's performance by comparing current vs previous metrics, top search terms, Google recommendations, and recent change history to surface issues and actionable insights.
Instructions
Diagnose a single Google Ads campaign by composing current-vs-previous comparison, top search terms, Google recommendations, and recent change history. Returns {campaign_id, period, campaign (get_campaign shape), performance_current, performance_previous, changes:{impressions_change_pct, clicks_change_pct, cost_change_pct, conversions_change_pct}, cpa_current? (only when current-period conversions > 0), cpa_previous? (only when previous-period conversions > 0), cpa_change_pct? (only when both above are present), top_search_terms (top 20 by cost), recommendations_from_google (up to 10), recent_changes (up to 10), issues:[strings], insights:[strings], recommendations:[strings]}. Any subcomponent that fails is replaced with the string 'Retrieval failed' rather than aborting the call. Read-only. Default period is LAST_7_DAYS. For cost-spike root-cause analysis use google_ads_cost_increase_investigate; for account-wide health use google_ads_health_check_all.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Reporting window for the metrics. Default 'LAST_7_DAYS' — this tool is tuned for short-horizon comparison. Use LAST_14_DAYS or LAST_30_DAYS for longer baselines. This tool also reads the equal-length window immediately before the one you request, so only fixed-length windows are accepted — calendar constants such as THIS_MONTH are rejected rather than silently replaced. Also accepts an explicit range in GAQL spelling — "BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'", both endpoints inclusive, in the account's time zone — for a window no trailing constant can reach (e.g. a single past calendar month). One asymmetry to know about: every constant except LAST_90_DAYS is resolved by Google Ads in the account's reporting time zone, whereas LAST_90_DAYS has no API constant and is expanded by mureo into the 90 days ending yesterday **on the server's date**, so its edges can differ by a day when the server and the account are in different zones. Pass an explicit range when the exact boundary matters. | |
| campaign_id | Yes | Campaign ID as a numeric string without dashes (e.g. '23743184133'). Obtain via google_ads_campaigns_list. | |
| customer_id | No | Google Ads customer ID as a 10-digit string without dashes (e.g. '1234567890'). Optional — falls back to GOOGLE_ADS_CUSTOMER_ID / GOOGLE_ADS_LOGIN_CUSTOMER_ID from the configured credentials when omitted. |