Google Ads Tools
Tools for creating, reading, updating, and optimizing Google Ads campaigns, ad groups, keywords, and ads.
If you have only one Google Ads account connected, the customerId parameter is optional — Lever auto-resolves it. If multiple accounts are connected, you must specify the ID. Use list_connections to find your account IDs.
google_ads_list_campaigns
List all campaigns in the connected Google Ads account with performance metrics.
Type: read
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
Example prompt: “Show me all my Google Ads campaigns”
Returns: Campaign name, status, daily budget, CPA, and CTR for each campaign.
google_ads_get_campaign
Get details of a specific Google Ads campaign.
Type: read
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
campaignId | string | Yes | Campaign ID |
Example prompt: “Get details for Google Ads campaign 12345”
Returns: Campaign name, ID, status, budget, impressions, clicks, and CPA.
google_ads_query
Execute a raw GAQL (Google Ads Query Language) query for advanced reporting. Returns paginated results (default 50 rows) with cursor-based pagination.
Type: read
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
query | string | Yes | GAQL query string |
limit | number | No | Maximum rows per page (default: 50, max: 10000). Response includes a cursor for the next page. |
orderBy | string | No | Sort results, e.g. metrics.clicks DESC. Injected as ORDER BY if not already in the query. |
summary | boolean | No | When true, returns aggregated stats (total count, summary metrics, top 10 rows) instead of full row data. |
cursor | string | No | Pagination cursor from a previous response. Pass to fetch the next page. |
Default limit is 50 rows. Pass limit: 10000 for larger result sets, or use cursor for pagination.
GAQL does not support OFFSET — use cursor-based pagination instead.
summary cannot be combined with limit or cursor.
Example prompt: “Run a GAQL query to get campaign performance for the last 30 days”
Example prompt: “Get the top 25 search terms by clicks for campaign 12345”
→ Uses limit: 25, orderBy: "metrics.clicks DESC"
Example prompt: “Give me a summary of all search terms”
→ Uses summary: true
Example GAQL Queries
Campaign performance:
SELECT
campaign.name,
campaign.status,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
Ad group metrics:
SELECT
ad_group.name,
ad_group.status,
metrics.impressions,
metrics.clicks,
metrics.average_cpc
FROM ad_group
WHERE campaign.id = 12345
AND segments.date DURING LAST_7_DAYS
Keyword stats:
SELECT
ad_group_criterion.keyword.text,
ad_group_criterion.keyword.match_type,
metrics.impressions,
metrics.clicks,
metrics.conversions
FROM keyword_view
WHERE segments.date DURING LAST_7_DAYS
ORDER BY metrics.impressions DESC
LIMIT 20
Keywords in an ad group:
SELECT
ad_group_criterion.keyword.text,
ad_group_criterion.keyword.match_type,
ad_group_criterion.status
FROM ad_group_criterion
WHERE ad_group.id = 12345
AND ad_group_criterion.type = 'KEYWORD'
google_ads_update_campaign
Update a Google Ads campaign’s name, status, budget, end date, or targeting. Goes through draft-preview-confirm — returns a preview that must be confirmed before the change executes.
Type: write (draft-preview-confirm)
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
campaignId | string | Yes | Campaign ID |
campaignName | string | No | New campaign name |
status | ENABLED | PAUSED | No | New campaign status |
dailyBudget | number | No | New daily budget in account currency |
endDate | string | No | Campaign end date (YYYY-MM-DD) |
locationIds | string[] | No | Geo target constant IDs (replaces all existing locations) |
languageIds | string[] | No | Language constant IDs (replaces all existing languages) |
Example prompt: “Pause campaign 12345” or “Target the US and Canada for campaign 12345”
At least one field must be provided. Targeting updates replace all existing targets of that type. Common location IDs: 2840 (US), 2124 (Canada), 2826 (UK). Common language IDs: 1000 (English), 1003 (Spanish), 1001 (French).
Budget updates on shared budgets (budgets linked to multiple campaigns) are not yet supported.
Use the Google Ads UI for shared budget changes.
Returns: A draft preview showing the proposed changes and a draftId. Call confirm_draft to execute.
google_ads_create_ad_group
Create a new ad group with keywords and a responsive search ad in an existing Search campaign. Goes through draft-preview-confirm.
Type: write (draft-preview-confirm)
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
campaignId | string | Yes | Campaign ID |
adGroupName | string | Yes | Ad group name |
keywords | array | Yes | Keywords (1-20) |
keywords[].text | string | Yes | Keyword text (max 80 chars) |
keywords[].matchType | BROAD | PHRASE | EXACT | No | Match type (default: BROAD) |
headlines | string[] | Yes | RSA headlines (3-15, max 30 chars each) |
descriptions | string[] | Yes | RSA descriptions (2-4, max 90 chars each) |
finalUrl | string | Yes | Landing page URL |
Example prompt: “Create a new ad group ‘Running Shoes’ in campaign 12345 with keywords ‘running shoes’ and ‘athletic footwear’”
Only Search campaigns are supported. The ad group, keywords, and ad are created atomically — if any part fails, nothing is created.
Returns: A draft preview showing the ad group, keywords, and ad to be created with a draftId. Call confirm_draft to execute.
google_ads_update_ad_group
Update a Google Ads ad group’s name. Goes through draft-preview-confirm.
Type: write (draft-preview-confirm)
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
adGroupId | string | Yes | Ad group ID |
adGroupName | string | Yes | New ad group name |
Example prompt: “Rename ad group 12345 to ‘Brand Keywords’”
Returns: A draft preview with a draftId. Call confirm_draft to execute.
google_ads_manage_keywords
Add and/or remove keywords in an ad group. Goes through draft-preview-confirm.
Type: write (draft-preview-confirm)
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
adGroupId | string | Yes | Ad group ID |
add | array | No | Keywords to add (max 20) |
add[].text | string | Yes | Keyword text (max 80 chars) |
add[].matchType | BROAD | PHRASE | EXACT | Yes | Match type |
remove | string[] | No | Criterion IDs of keywords to remove (max 20) |
Example prompt: “Add ‘running shoes’ and remove keyword 456 from ad group 123”
At least one of add or remove must be provided. Additions are processed before removals. Get criterion IDs using google_ads_query on ad_group_criterion.
Returns: A draft preview with a draftId. Call confirm_draft to execute.
google_ads_update_keyword_bids
Update CPC bid overrides on keywords in an ad group. Goes through draft-preview-confirm.
Type: write (draft-preview-confirm)
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
adGroupId | string | Yes | Ad group ID |
keywords | array | Yes | Keywords with new bids (max 20) |
keywords[].criterionId | string | Yes | Keyword criterion ID |
keywords[].cpcBid | number | Yes | New CPC bid in account currency |
Example prompt: “Set the CPC bid for keyword 123 in ad group 789 to $2.50”
Returns: A draft preview with a draftId. Call confirm_draft to execute.
google_ads_update_ad
Update a Responsive Search Ad’s headlines, descriptions, or landing page URL. Goes through draft-preview-confirm.
Type: write (draft-preview-confirm)
| Parameter | Type | Required | Description |
|---|
customerId | string | No | Google Ads customer ID |
adGroupId | string | Yes | Ad group ID containing the ad |
adId | string | Yes | Ad ID to update |
headlines | string[] | No | New headlines (3-15, max 30 chars each) |
descriptions | string[] | No | New descriptions (2-4, max 90 chars each) |
finalUrl | string | No | New landing page URL |
Example prompt: “Update the headlines on ad 456 in ad group 123”
At least one field must be provided. When updating headlines or descriptions, provide the complete set — they replace all existing values. Only Responsive Search Ads are supported.
Returns: A draft preview with a draftId. Call confirm_draft to execute.