An MCP (Model Context Protocol) server that gives Claude (or any MCP-compatible client) direct access to the Google Ads API — read campaign performance, adjust bids and budgets, manage keywords and negatives, and more, all from a chat interface.
Includes a standalone daily digest script for cron-based reporting.
Campaigns & reporting
- List campaigns, get campaign metrics (overall and by device)
- Get keyword-level and ad-group-level metrics
- Search terms report, conversion actions list
Budgets, bids & status
- Update campaign budgets and keyword/ad-group bids
- Set campaign bidding strategy
- Enable/pause campaigns, ad groups, and ads (status is intentionally restricted to
ENABLED/PAUSED— removal is not exposed, since it's irreversible via the API) - Update ad copy
Keywords & ad groups
- Create keywords and ad groups
- Set keyword status
- List/add/remove campaign- and ad-group-level negative keywords
- Add a negative keyword directly from a search term
Bid adjustments
- Geo (location) targeting: list/add/remove campaign locations, list/set geo bid adjustments, search geo targets
- Device bid adjustments
- Ad schedule bid adjustments
- Audience (user list) bid adjustments
Multi-account convenience
set_default_customer/get_default_customer— set a default Google Ads customer ID so you don't have to pass it on every call
Daily digest
daily_digest.pyis a standalone cron script that pulls campaign metrics daily and writes a formatted report tologs/
See CLAUDE.md for architecture details and full setup/commands reference.
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp google-ads.yaml.example google-ads.yaml # fill in your credentialsgoogle-ads.yaml requires:
developer_token— Google Ads API Center (Manager Account → Tools → API Center)client_id/client_secret— Google Cloud Console → OAuth 2.0 credentialsrefresh_token— generated via a one-time OAuth flow (see the Google Ads Python client quickstart)login_customer_id— your Manager account ID, digits only
This file is gitignored — never commit real credentials.
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"google-ads": {
"command": "/ABSOLUTE/PATH/TO/.venv/bin/python",
"args": ["-m", "google_ads_mcp.server"]
}
}
}Use absolute paths, then restart Claude Desktop.
pytest tests/ -v