---
title: "Explain why a metric moved"
method: POST
path: "/api/v1/tools/google_explain_performance_anomaly/execute"
tags: ["Google Ads"]
---

# Explain why a metric moved

`POST /api/v1/tools/google_explain_performance_anomaly/execute`

## Request

- Base URL: `https://adako.ai`
- URL: `https://adako.ai/api/v1/tools/google_explain_performance_anomaly/execute`
- Auth: HTTP bearer

Decomposes a period-over-period change in one metric across campaigns, devices, networks, countries and search terms, and ranks the segments by how much of the total change each one accounts for.
Use when: the user says something dropped, spiked or "looks wrong" and wants to know why. This is the right first tool for that question.
Do not use when: the user just wants the numbers (google_get_campaign_performance) or a single dimension they already suspect (google_get_device_performance, google_get_geo_performance).
Returns, per dimension, the segments that moved most, with their share of the total change. Read the top one or two lines and say what they mean — a change concentrated in one campaign is an account change, one spread evenly across every dimension is usually seasonality or an auction-wide shift you did not cause.
Two cautions worth repeating to the user: a short window makes everything look dramatic, and conversions keep arriving for days after the click, so the most recent days always look worse than they will turn out to be.
If you are unsure which account, campaign or period the user means, ask them — do not guess ids or dates.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object
    - `customer_id` string: Google Ads customer id (10 digits, dashes optional). Omit to use the primary account; list_connected_accounts shows the valid ids.
    - `metric` 'cost' | 'clicks' | 'impressions' | 'conversions' | 'conversion_value' | 'cpa' | 'roas': Which metric moved. Defaults to cost.
    - `campaign_id` string: Limit the whole analysis to one campaign.
    - `date_range` 'today' | 'yesterday' | 'last_7_days' | 'last_14_days' | 'last_30_days' | 'this_month' | 'last_month': Preset range. Alternatively pass start_date and end_date (YYYY-MM-DD). Never both.
    - `start_date` string: First day of the period (YYYY-MM-DD). Use with end_date.
    - `end_date` string: Last day of the period (YYYY-MM-DD). Use with start_date.
    - `include_search_terms` boolean: Include the search-term breakdown (default true). It is the slowest dimension.

## Response `200`

The tool ran. A write returns proposal_id and approve_url while the change waits for approval.

- SuccessEnvelope
  - `success` unknown, required
  - `tool` string, required
  - `data` object, required: Machine-readable result.
  - `markdown` string, required: The same result written for a person or a model.
  - `quota` Quota: Task usage for the current billing period.
    - `plan` string
    - `used` integer
    - `limit` integer
    - `period_end` string
    - `upgrade_url` string
  - `proposal_id` string: Present for writes. Nothing changes on the ad platform until it is approved.
  - `approve_url` string: Where a person approves the proposal.
  - `request_id` string, required

## Other responses

- `400`: Invalid arguments, or the ad account could not be resolved.
- `401`: Missing, invalid, revoked or expired API key.
- `402`: Monthly task quota used up, or the plan does not include this tool.
- `403`: The connected ad account lacks the access level this tool needs.
- `404`: Unknown tool name.
- `409`: Not connected, reconnect needed, confirmation required, a proposal already pending or no longer pending, an identical create that failed earlier today (proposal_failed_before), a create that duplicates an approved one (duplicate_create), the ad-account limit of the plan reached (account_limit), or an Idempotency-Key reused with different arguments.
- `429`: Rate limited by Adako or by the ad platform. See Retry-After.
- `500`: Unexpected error inside Adako.
- `502`: The ad platform returned an error.

---

[API](https://skmtc.dev/adako/apis/adako-rest-api.md) · [All operations](https://skmtc.dev/adako/apis/adako-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adako/apis/adako-rest-api/revisions/59ee60d48a56?raw)
