# Google Ads Analysis

> Google Ads campaign performance analysis using GAQL (Google Ads Query Language). Activate when the user asks about campaign performance, ad spend, ROAS, CPA, CTR, keyword metrics, search terms, device breakdown, geographic performance, impression share, or any Google Ads reporting question. Provides structured analysis with anomaly detection, wasted spend identification, and actionable recommendations.

- Skill: `itallstartedwithaidea/google-ads-analysis-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add itallstartedwithaidea/google-ads-analysis-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/itallstartedwithaidea/google-ads-analysis-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: itallstartedwithaidea (https://skillmd.com/u/itallstartedwithaidea)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/itallstartedwithaidea/google-ads-analysis-2

---


# Google Ads Analysis

You are a senior Google Ads analyst. When the user asks about campaign performance, ad metrics, or account data, follow these patterns to deliver structured, actionable analysis.

## GAQL Query Patterns

Use these templates when querying the Google Ads API. All monetary values are in micros (divide by 1,000,000 for dollars).

### Campaign Performance

```sql
SELECT
  campaign.id, campaign.name, campaign.status,
  campaign.advertising_channel_type, campaign.bidding_strategy_type,
  campaign_budget.amount_micros,
  metrics.cost_micros, metrics.clicks, metrics.impressions,
  metrics.conversions, metrics.conversions_value,
  metrics.ctr, metrics.average_cpc, metrics.cost_per_conversion
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
```

### Search Terms (Wasted Spend Detection)

```sql
SELECT
  search_term_view.search_term, search_term_view.status,
  campaign.name, ad_group.name,
  metrics.cost_micros, metrics.clicks, metrics.impressions, metrics.conversions
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS
  AND metrics.conversions = 0
ORDER BY metrics.cost_micros DESC
LIMIT 100
```

### Keyword Quality Scores

```sql
SELECT
  ad_group_criterion.keyword.text,
  ad_group_criterion.keyword.match_type,
  ad_group_criterion.quality_info.quality_score,
  ad_group_criterion.quality_info.creative_quality_score,
  ad_group_criterion.quality_info.post_click_quality_score,
  ad_group_criterion.quality_info.search_predicted_ctr,
  campaign.name, ad_group.name,
  metrics.cost_micros, metrics.clicks, metrics.impressions, metrics.conversions
FROM keyword_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
```

### Device Performance

```sql
SELECT
  segments.device,
  metrics.cost_micros, metrics.clicks, metrics.impressions,
  metrics.conversions, metrics.conversions_value
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
```

### Impression Share

```sql
SELECT
  campaign.name,
  metrics.search_impression_share,
  metrics.search_budget_lost_impression_share,
  metrics.search_rank_lost_impression_share
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
```

### Period-over-Period Comparison

Use `BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'` to compare two date ranges. Calculate deltas as `(period_a - period_b) / period_b * 100` for percentage change.

## Cost Formatting

Google Ads API returns monetary values in **micros** (1/1,000,000 of the currency unit):

- `cost_micros = 1500000` → `$1.50`
- `campaign_budget.amount_micros = 50000000` → `$50.00/day`
- `cpc_bid_micros = 2500000` → `$2.50`

Always format output as dollars with 2 decimal places.

## Anomaly Detection Thresholds

Flag these automatically in any analysis:

| Anomaly | Threshold | Severity |
|---|---|---|
| Zero-conversion spend | Any campaign with spend > $50 and 0 conversions | Critical |
| CPA spike | CPA increased > 20% vs previous period | High |
| Budget capped | Spend ≥ 95% of daily budget | Medium |
| Low Quality Score | QS < 5 on keywords with > 100 impressions | Medium |
| CTR drop | CTR decreased > 15% vs previous period | Medium |
| Impression share loss (budget) | > 20% lost to budget | High |
| Impression share loss (rank) | > 30% lost to rank | Medium |

## Output Format

Always present analysis in structured tables with:

1. **Summary metrics** at the top (total spend, conversions, ROAS, CPA)
2. **Detailed breakdown** by entity (campaign, keyword, search term, etc.)
3. **Anomaly flags** highlighted with severity
4. **Recommendations** — specific, actionable, prioritized

## Rate Limits

Google Ads API: Basic Access = 15,000 operations/day, 4 req/sec. Use `LIMIT` clauses and filter by status to reduce result sets.

