# Build a custom Google Ads report with GAQL

> Tier: recipe. Operating recipe: real tool sequence, core rules, known traps.

A GAQL query built field-by-field, validated, then run: the escape hatch for every bespoke question.

**Intent.** The exact table nothing pre-built provides, validated before it runs.

## When to use

- The question fits no packaged tool.
- Recurring bespoke exports.

## When not to use

- When a dedicated tool already answers it: bespoke queries are a maintenance debt.

## Sources

Required: Google Ads

## Preconditions

- The account is ticked in the dashboard, confirmed via list_accounts.

## Inputs

- `window`: Analysis window. Default: last 30 days.

## Procedure

1. Find the right resources and fields. — tools: `google_ads_search_fields`
2. Validate the query before running. — tools: `google_ads_validate_query`
3. Run it. — tools: `google_ads_run_gaql`

## Decision rules

- **When** The query mixes incompatible resources → **conclude** Validation says so before the API does: fix the FROM, not the WHERE.

## Evidence requirements

- Every figure carries its account, metric and window.
- Anything below a readable sample size is reported as unjudged, not as zero.

## Human approval boundary

- The readout changes nothing. Any change it motivates goes through Safe Writes: preview, human confirmation, then apply.

## Failure modes

- Metrics without their segment context read as totals when they are slices.

## Output

- **Readout**: The figures, with windows and accounts named.
- **Flags**: What deserves a deeper skill or a human decision.
