Browser

google-ads

Try it

Query and audit Google Ads accounts via browser automation or the Google Ads API, including keyword pauses.

What it does

Two modes cover the main Google Ads workflows. Browser Mode uses an attached browser session at ads.google.com to snapshot campaign tables, filter for zero-conversion keywords, and pause items in the UI. API Mode uses the google-ads Python SDK with `~/.google-ads.yaml` plus a developer token to run GAQL queries for campaign performance, zero-conversion keywords, and bulk keyword pauses. An audit checklist covers zero-conv keywords, empty ad groups, policy violations, optimization score, and conversion tracking. Reports render as tables with per-campaign status and recommended actions.

When to use it

  • Audit an account for wasted spend on zero-conversion keywords
  • Snapshot campaign performance (cost, conversions, CPA) over the last 30 days
  • Pause underperforming keywords via API bulk operations
  • Download CSV reports from the Google Ads UI

The skill document

Manage Google Ads accounts via API or browser automation.

Mode Selection

Check which mode to use:

  1. API Mode - If user has google-ads.yaml configured or GOOGLE_ADS_* env vars
  2. Browser Mode - If user says "I don't have API access" or just wants quick checks
# Check for API config
ls ~/.google-ads.yaml 2>/dev/null || ls google-ads.yaml 2>/dev/null

If no config found, ask: "Do you have Google Ads API credentials, or should I use browser automation?"


Browser Automation Mode (Universal)

Requirements: User logged into ads.google.com in browser

Setup

  1. User opens ads.google.com and logs in
  2. User clicks Clawdbot Browser Relay toolbar icon (badge ON)
  3. Use browser tool with profile="chrome"

Common Workflows

Get Campaign Performance

1. Navigate to: ads.google.com/aw/campaigns
2. Set date range (top right date picker)
3. Snapshot the campaigns table
4. Parse: Campaign, Status, Budget, Cost, Conversions, Cost/Conv

Find Zero-Conversion Keywords (Wasted Spend)

1. Navigate to: ads.google.com/aw/keywords
2. Click "Add filter" → Conversions → Less than → 1
3. Click "Add filter" → Cost → Greater than → [threshold, e.g., $500]
4. Sort by Cost descending
5. Snapshot table for analysis

Pause Keywords/Campaigns

1. Navigate to keywords or campaigns view
2. Check boxes for items to pause
3. Click "Edit" dropdown → "Pause"
4. Confirm action

Download Reports

1. Navigate to desired view (campaigns, keywords, etc.)
2. Click "Download" icon (top right of table)
3. Select format (CSV recommended)
4. File downloads to user's Downloads folder

For detailed browser selectors: See references/browser-workflows.md


API Mode (Power Users)

Requirements: Google Ads API developer token + OAuth credentials

Setup Check

# Verify google-ads SDK
python -c "from google.ads.googleads.client import GoogleAdsClient; print('OK')"

# Check config
cat ~/.google-ads.yaml

Common Operations

Query Campaign Performance

from google.ads.googleads.client import GoogleAdsClient

client = GoogleAdsClient.load_from_storage()
ga_service = client.get_service("GoogleAdsService")

query = """
    SELECT campaign.name, campaign.status,
           metrics.cost_micros, metrics.conversions,
           metrics.cost_per_conversion
    FROM campaign
    WHERE segments.date DURING LAST_30_DAYS
    ORDER BY metrics.cost_micros DESC
"""

response = ga_service.search(customer_id=CUSTOMER_ID, query=query)

Find Zero-Conversion Keywords

query = """
    SELECT ad_group_criterion.keyword.text,
           campaign.name, metrics.cost_micros
    FROM keyword_view
    WHERE metrics.conversions = 0
      AND metrics.cost_micros > 500000000
      AND segments.date DURING LAST_90_DAYS
    ORDER BY metrics.cost_micros DESC
"""

Pause Keywords

operations = []
for keyword_id in keywords_to_pause:
    operation = client.get_type("AdGroupCriterionOperation")
    operation.update.resource_name = f"customers/{customer_id}/adGroupCriteria/{ad_group_id}~{keyword_id}"
    operation.update.status = client.enums.AdGroupCriterionStatusEnum.PAUSED
    operations.append(operation)

service.mutate_ad_group_criteria(customer_id=customer_id, operations=operations)

For full API reference: See references/api-setup.md


Audit Checklist

Quick health check for any Google Ads account:

CheckBrowser PathWhat to Look For
Zero-conv keywordsKeywords → Filter: Conv<1, Cost>$500Wasted spend
Empty ad groupsAd Groups → Filter: Ads=0No creative running
Policy violationsCampaigns → Status columnYellow warning icons
Optimization ScoreOverview page (top right)Below 70% = action needed
Conversion trackingTools → ConversionsInactive/no recent data

Output Formats

When reporting findings, use tables:

## Campaign Performance (Last 30 Days)
| Campaign | Cost | Conv | CPA | Status |
|----------|------|------|-----|--------|
| Branded  | $5K  | 50   | $100| ✅ Good |
| SDK Web  | $10K | 2    | $5K | ❌ Pause |

## Recommended Actions
1. **PAUSE**: SDK Web campaign ($5K CPA)
2. **INCREASE**: Branded budget (strong performer)

Troubleshooting

Browser Mode Issues

  • Can't see data: Check user is on correct account (top right account selector)
  • Slow loading: Google Ads UI is heavy; wait for tables to fully load
  • Session expired: User needs to re-login to ads.google.com

API Mode Issues

  • Authentication failed: Refresh OAuth token, check google-ads.yaml
  • Developer token rejected: Ensure token is approved (not test mode)
  • Customer ID error: Use 10-digit ID without dashes

Related skills

Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.

by fly0pants4.3k installs296 stars

Post videos, photos, text, and documents to 10 social platforms through a single REST API call.

by victorcavero14375 installs50 stars

Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.

by johnpatternai21 installs8 stars

Search, read, and manage YouTube videos, playlists, channels, subscriptions, and comments via managed OAuth.

by byungkyu880 installs145 stars

Query and manage Linear issues, projects, teams, cycles, labels, and comments through a managed OAuth GraphQL endpoint.

by byungkyu518 installs18 stars

More from jdrhyne

Browse all skills

Natural-language Jira interaction that reads, drafts, creates, and updates issues.

by Jonathan Rhyne310 installs16 stars

Reconstruct missing conversation context after compaction or truncation using channel and session APIs.

by jdrhyne208 installs3 stars

Query Google Search Console data from the CLI for search analytics and indexing checks.

by jdrhyne252 installs23 stars

Upload documents to Nudocs.ai for rich editing and pull back the results as docx, md, or pdf.

by jdrhyne92 installs1 stars

Convert, OCR, extract, redact, watermark, and sign PDF and Office documents inside OpenClaw via the Nutrient DWS plugin.

by jdrhyne125 installs4 stars

Persistent TODO scratch pad for tracking tasks across sessions. Use when the user asks to add, list, complete, remove, or summarize tasks in a portable workspace Markdown file. Uses stable task IDs and exact matching; heartbeat reporting is opt-in and count-only.

by jdrhyne323 installs1 stars