Google Ads MCP
by cohnen
Verified
- mcp-google-ads
- docs
## Advanced GAQL Query Examples
### 1. Multi-level Performance Analysis with Geographic and Device Segmentation
```sql
SELECT
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
segments.geo_target_region,
segments.device,
segments.day_of_week,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.conversion_value,
metrics.cost_micros,
metrics.cost_per_conversion,
metrics.conversion_rate,
metrics.return_on_ad_spend
FROM ad_group
WHERE
campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND segments.date DURING LAST_90_DAYS
AND metrics.impressions > 100
ORDER BY
segments.geo_target_region,
segments.device,
metrics.return_on_ad_spend DESC
LIMIT 1000
```
This query provides a comprehensive performance breakdown by geography, device type, and day of week, helping identify specific combinations that drive the best return on ad spend.
### 2. Bidding Strategy Effectiveness Analysis
```sql
SELECT
campaign.id,
campaign.name,
campaign.bidding_strategy_type,
bidding_strategy.id,
bidding_strategy.name,
bidding_strategy.type,
campaign.target_cpa.target_cpa_micros,
campaign.target_roas.target_roas,
segments.date,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.conversion_value,
metrics.cost_micros,
metrics.average_cpc,
metrics.cost_per_conversion
FROM campaign
WHERE
campaign.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
AND metrics.impressions > 0
ORDER BY
campaign.bidding_strategy_type,
segments.date
```
This query helps analyze the effectiveness of different bidding strategies by comparing key performance metrics across campaigns using various automated bidding approaches.
### 3. Ad Performance by Landing Page with Quality Score Analysis
```sql
SELECT
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
ad_group_ad.ad.id,
ad_group_ad.ad.final_urls,
ad_group_ad.ad.type,
ad_group_ad.ad.expanded_text_ad.headline_part1,
ad_group_ad.ad.expanded_text_ad.headline_part2,
ad_group_criterion.keyword.text,
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.conversions,
metrics.conversion_value,
metrics.cost_micros,
metrics.average_cpc,
metrics.ctr
FROM ad_group_ad
WHERE
campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND ad_group_ad.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
AND metrics.impressions > 100
ORDER BY
metrics.conversion_value DESC,
ad_group_criterion.quality_info.quality_score DESC
```
This query examines ad performance in relation to landing pages and quality scores, helping identify high-performing ad creatives and their associated landing pages.
### 4. Keyword Performance Analysis with Impression Share and Position Metrics
```sql
SELECT
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
ad_group_criterion.criterion_id,
ad_group_criterion.keyword.text,
ad_group_criterion.keyword.match_type,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.conversion_value,
metrics.cost_micros,
metrics.absolute_top_impression_percentage,
metrics.top_impression_percentage,
metrics.search_impression_share,
metrics.search_rank_lost_impression_share,
metrics.search_budget_lost_impression_share
FROM keyword_view
WHERE
campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND ad_group_criterion.status = 'ENABLED'
AND segments.date DURING LAST_90_DAYS
AND metrics.impressions > 10
ORDER BY
metrics.conversion_value DESC,
metrics.search_impression_share ASC
```
This query helps identify keywords that are performing well but may be limited by impression share, indicating opportunities for bid or budget adjustments.
### 5. Complex Audience Segmentation Performance Analysis
```sql
SELECT
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
segments.audience.id,
segments.audience.name,
segments.audience.type,
segments.date,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.conversion_value,
metrics.cost_micros,
metrics.average_cpc,
metrics.ctr,
metrics.conversion_rate,
metrics.value_per_conversion
FROM ad_group
WHERE
campaign.advertising_channel_type = 'DISPLAY'
AND campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND segments.date DURING LAST_90_DAYS
AND segments.audience.id IS NOT NULL
ORDER BY
segments.audience.type,
metrics.conversion_value DESC
```
This query analyzes the performance of different audience segments across display campaigns, helping identify the most valuable audience types.
### 6. Shopping Campaign Product Performance Analysis
```sql
SELECT
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
segments.product_item_id,
segments.product_title,
segments.product_type_l1,
segments.product_type_l2,
segments.product_type_l3,
segments.product_type_l4,
segments.product_type_l5,
segments.product_brand,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.conversion_value,
metrics.cost_micros,
metrics.ctr,
metrics.conversion_rate,
metrics.return_on_ad_spend
FROM shopping_performance_view
WHERE
campaign.advertising_channel_type = 'SHOPPING'
AND campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
AND metrics.impressions > 0
ORDER BY
metrics.return_on_ad_spend DESC
```
This query provides a detailed breakdown of shopping campaign performance by product attributes, helping identify high-performing products and product categories.
### 7. Ad Schedule Performance with Bid Modifier Analysis
```sql
SELECT
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
ad_schedule_view.day_of_week,
ad_schedule_view.start_hour,
ad_schedule_view.end_hour,
campaign_criterion.bid_modifier,
segments.date,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.conversion_value,
metrics.cost_micros,
metrics.ctr,
metrics.conversion_rate,
metrics.value_per_conversion
FROM ad_schedule_view
WHERE
campaign.status = 'ENABLED'
AND segments.date DURING LAST_14_DAYS
ORDER BY
ad_schedule_view.day_of_week,
ad_schedule_view.start_hour
```
This query analyzes performance across different ad schedules and compares it with the applied bid modifiers, helping identify opportunities for schedule-based bid adjustments.
### 8. Cross-Campaign Asset Performance Analysis
```sql
SELECT
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
asset.id,
asset.type,
asset.name,
asset.text_asset.text,
asset.image_asset.full_size.url,
asset_performance_label,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.cost_micros,
metrics.ctr
FROM asset_performance_label_view
WHERE
campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
ORDER BY
asset.type,
metrics.conversions DESC
```
This query helps analyze performance of assets (images, text, etc.) across campaigns, helping identify high-performing creative elements.
### 9. Geographic Performance with Location Bid Modifier Analysis
```sql
SELECT
campaign.id,
campaign.name,
geographic_view.country_criterion_id,
geographic_view.location_type,
geographic_view.geo_target_constant,
campaign_criterion.bid_modifier,
segments.date,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.conversion_value,
metrics.cost_micros,
metrics.ctr,
metrics.conversion_rate
FROM geographic_view
WHERE
campaign.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
ORDER BY
geographic_view.country_criterion_id,
metrics.conversion_value DESC
```
This query analyzes performance across different geographic locations and compares it with location bid modifiers, helping identify opportunities for geographic bid adjustments.
### 10. Advanced Budget Utilization and Performance Analysis
```sql
SELECT
campaign.id,
campaign.name,
campaign.status,
campaign_budget.amount_micros,
campaign_budget.total_amount_micros,
campaign_budget.delivery_method,
campaign_budget.reference_count,
campaign_budget.has_recommended_budget,
campaign_budget.recommended_budget_amount_micros,
segments.date,
metrics.cost_micros,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.conversion_value,
(metrics.cost_micros * 1.0) / (campaign_budget.amount_micros * 1.0) AS budget_utilization_rate
FROM campaign
WHERE
campaign.status IN ('ENABLED', 'PAUSED')
AND segments.date DURING LAST_30_DAYS
ORDER BY
segments.date DESC,
budget_utilization_rate DESC
```
This query helps analyze budget utilization across campaigns, with a calculated field for budget utilization rate, helping identify campaigns that consistently use their full budget or need budget adjustments.
## Practical Applications of These Queries
These advanced GAQL queries can help you:
1. **Identify performance trends** across different dimensions (geographic, temporal, device-based)
2. **Optimize bidding strategies** by comparing performance across different automated bidding approaches
3. **Improve quality scores** by analyzing the relationship between landing pages, ad creatives, and performance metrics
4. **Maximize impression share** for high-performing keywords and ad groups
5. **Refine audience targeting** by identifying the most valuable audience segments
6. **Optimize product feeds** for shopping campaigns by analyzing performance at the product level
7. **Fine-tune ad scheduling** based on day and hour performance analysis
8. **Improve creative assets** by identifying high-performing images, text, and other creative elements
9. **Adjust geographic targeting** based on performance differences across locations
10. **Optimize budget allocation** to maximize return on ad spend