mcpField
G
gaql-query-patterns

gaql-query-patterns

github.com/fourteenwmMarketing & growth7732 installsUpdated 9w ago
Repository

About gaql-query-patterns

gaql-query-patterns is a collection of read-only Google Ads Query Language templates for common PPC analysis. It is for analysts who need query examples; execution and result diagnosis are handled by other tools or skills.

Key features

  1. 01Campaign spend and pacing queries
  2. 02Impression share analysis templates
  3. 03Search term and keyword reports
  4. 04Ad and conversion queries
  5. 05Geographic and device breakdowns
  6. 06GAQL field and date guidance

Use cases

  1. 01Review campaign budgets and pacing
  2. 02Find costly non-converting search terms
  3. 03Audit keyword quality scores
  4. 04Prepare account-level performance reports

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/fourteenwm/ppc-ai-skills --skill gaql-query-patterns

After installing, type/gaql-query-patternsin Claude Code to confirm it loaded.

Bundled filesREADME.md

Details

From the project README

GAQL Query Patterns

Ready-to-use GAQL (Google Ads Query Language) query templates for common PPC analysis tasks.

What This Skill Deliberately Does NOT Do

  • Run the queries. These are copy-paste templates, not a runner — paste them into your own API client, Google Ads Scripts, or google-ads-query to actually execute and export.
  • Mutate anything. Every template is a read-only SELECT; nothing here changes an account.
  • Cover change-history queries. Pulling what changed and when needs a finite date window and a LIMIT, and lives in change-history-checker — a windowless change query won't run.
  • Diagnose the results. The "Use for" and "Interpreting results" notes point you at the analysis; the actual root-causing lives in the diagnostic skills (e.g. impression-share-diagnostics for the impression-share query).

Campaign Queries

7-Day Campaign Spend Analysis
SELECT
    campaign.id,
    campaign.name,
    campaign.status,
    campaign.advertising_channel_type,
    campaign.bidding_strategy_type,
    campaign_budget.amount_micros,
    campaign_budget.explicitly_shared,
    metrics.cost_micros,
    metrics.impressions,
    metrics.clicks,
    metrics.conversions,
    metrics.conversions_value
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
ORDER BY campaign.name

Use for: Recent spend analysis, budget utilization, campaign health checks


Month-to-Date Pacing
SELECT
    campaign.id,
    campaign.name,
    campaign_budget.amount_micros,
    metrics.cost_micros
FROM campaign
WHERE segments.date DURING THIS_MONTH
ORDER BY campaign.name

Use for: Monthly pacing calculations, budget tracking


Campaign Settings Audit
SELECT
    campaign.id,
    campaign.name,
    campaign.status,
    campaign.advertising_channel_type,
    campaign.bidding_strategy_type,
    campaign.target_cpa.target_cpa_micros,
    campaign.target_roas.target_roas,
    campaign_budget.amount_micros,
    campaign_budget.explicitly_shared
FROM campaign
WHERE campaign.status = 'ENABLED'

Use for: Configuration audits, bidding strategy checks, budget review


Impression Share

Search Impression Share Analysis
SELECT
    campaign.id,
    campaign.name,
    campaign.advertising_channel_type,
    metrics.search_impression_share,
    metrics.search_budget_lost_impression_share,
    metrics.search_rank_lost_impression_share,
    metrics.impressions
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
  AND campaign.advertising_channel_type IN ('SEARCH', 'PERFORMANCE_MAX')
ORDER BY metrics.search_budget_lost_impression_share DESC

Use for: Diagnosing underspending, identifying budget constraints vs. quality issues

Interpreting results:

  • High Budget Lost IS → increase budget to capture more impressions
  • High Rank Lost IS → quality/relevance issue (not a budget problem)
  • Both high → budget is primary constraint, but quality also needs work

Search Terms

Search Term Report (Last 30 Days)
SELECT
    search_term_view.search_term,
    campaign.name,
    ad_group.name,
    metrics.impressions,
    metrics.clicks,
    metrics.cost_micros,
    metrics.conversions,
    search_term_view.status
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS
  AND metrics.impressions > 0
ORDER BY metrics.cost_micros DESC

Use for: Negative keyword discovery, search term audits, intent analysis


High-Spend Non-Converting Search Terms
SELECT
    search_term_view.search_term,
    campaign.name,
    metrics.clicks,
    metrics.cost_micros,
    metrics.conversions
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS
  AND metrics.conversions = 0
  AND metrics.cost_micros > 0
ORDER BY metrics.cost_micros DESC

Use for: Finding wasted spend, negative keyword candidates


Keywords

Keyword Performance with Quality Score
SELECT
    ad_group.name,
    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,
    metrics.impressions,
    metrics.clicks,
    metrics.cost_micros,
    metrics.conversions
FROM keyword_view
WHERE segments.date DURING LAST_30_DAYS
  AND ad_group_criterion.status = 'ENABLED'
ORDER BY metrics.cost_micros DESC

Use for: Quality score audits, keyword performance analysis


Non-Serving Keywords (Zero Impressions)
SELECT
    campaign.name,
    ad_group.name,
    ad_group_criterion.keyword.text,
    ad_group_criterion.keyword.match_type,
    ad_group_criterion.status,
    metrics.impressions
FROM keyword_view
WHERE segments.date DURING LAST_180_DAYS
  AND campaign.status = 'ENABLED'
  AND ad_group.status = 'ENABLED'
  AND ad_group_criterion.status = 'ENABLED'
  AND metrics.impressions = 0

Use for: Finding dead keywords to clean up, account hygiene


Ads

RSA Performance
SELECT
    campaign.name,
    ad_group.name,
    ad_group_ad.ad.id,
    ad_group_ad.ad.responsive_search_ad.headlines,
    ad_group_ad.ad.responsive_search_ad.descriptions,
    ad_group_ad.ad_strength,
    metrics.impressions,
    metrics.clicks,
    metrics.conversions,
    metrics.cost_micros
FROM ad_group_ad
WHERE segments.date DURING LAST_30_DAYS
  AND ad_group_ad.ad.type = 'RESPONSIVE_SEARCH_AD'
  AND ad_group_ad.status = 'ENABLED'
ORDER BY metrics.impressions DESC

Use for: Ad performance review, RSA optimization


Conversions

Conversion Actions List
SELECT
    conversion_action.id,
    conversion_action.name,
    conversion_action.type,
    conversion_action.status,
    conversion_action.category,
    conversion_action.value_settings.default_value,
    conversion_action.counting_type,
    conversion_action.attribution_model_settings.attribution_model
FROM conversion_action
WHERE conversion_action.status = 'ENABLED'
ORDER BY conversion_action.name

Use for: Conversion tracking audits, identifying misconfigured actions


Conversion Performance by Action
SELECT
    segments.conversion_action_name,
    segments.conversion_action_category,
    metrics.conversions,
    metrics.conversions_value,
    metrics.all_conversions,
    metrics.cost_micros
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.conversions DESC

Use for: Understanding which conversion actions are firing, value distribution


Geographic Performance

SELECT
    geographic_view.country_criterion_id,
    geographic_view.location_type,
    campaign.name,
    metrics.impressions,
    metrics.clicks,
    metrics.cost_micros,
    metrics.conversions
FROM geographic_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC

Use for: Geographic bid adjustments, location targeting audits


Device Performance

SELECT
    campaign.name,
    segments.device,
    metrics.impressions,
    metrics.clicks,
    metrics.cost_micros,
    metrics.conversions,
    metrics.average_cpc
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
ORDER BY campaign.name, segments.device

Use for: Device bid adjustments, mobile vs. desktop analysis


Account-Level Summary

SELECT
    customer.id,
    customer.descriptive_name,
    metrics.cost_micros,
    metrics.impressions,
    metrics.clicks,
    metrics.conversions,
    metrics.conversions_value
FROM customer
WHERE segments.date DURING LAST_30_DAYS

Use for: High-level account overview, executive reporting


Date Range Reference

KeywordMeaning
YESTERDAYYesterday only
TODAYToday only
LAST_7_DAYSLast 7 days
LAST_14_DAYSLast 14 days
LAST_30_DAYSLast 30 days
THIS_MONTHCurrent month to date
LAST_MONTHPrevious calendar month
THIS_WEEK_MON_TODAYThis week (Monday to today)

Key Field Notes

Micros Conversion

The API returns monetary values in micros (1,000,000 = $1):

50000000 micros = $50.00
1234567 micros = $1.23

Always divide by 1,000,000 when displaying to users.

Impression Share Returns Decimals

The API returns impression share as decimals (0.0 - 1.0), NOT percentages:

  • API value 0.2464 = 24.64% actual impression share
  • Always multiply by 100 when displaying
Metrics Require Date Segmentation

Any query with metrics.* fields MUST include a WHERE segments.date clause. Without it, the query will fail.

Impression Share is Search/PMax Only

search_impression_share, search_budget_lost_impression_share, and search_rank_lost_impression_share are only available for Search and Performance Max campaigns.

AND vs OR

GAQL doesn't support OR. Use IN instead:

-- Wrong
WHERE campaign.status = 'ENABLED' OR campaign.status = 'PAUSED'

-- Correct
WHERE campaign.status IN ('ENABLED', 'PAUSED')

When to Load Other Skills

SkillWhen
google-ads-queryTo run these templates against an account and export the results to CSV — this skill is the templates, that one is the runner
change-history-checkerFor "what changed and when" queries — they require a finite date window (90-day / 30-day) and a LIMIT that these general templates don't carry
impression-share-diagnosticsTo interpret the impression-share query — Search IS, Budget Lost IS, and Rank Lost IS root-causing lives there

Several skills reach for these templates when they outgrow their own — underspending-investigation, budget-recommendation-calculator, and mcc-hack-audit all point back here for custom GAQL.

Comments

Markdown supported