Authenticate with OAuth 2.0 and prepare your developer token and customer ID.
Create a CampaignBudget resource by calling CampaignBudgetService.mutate with a desired amount_micros and delivery method; capture the returned resource name.
Create a Campaign resource via CampaignService.mutate, referencing the budget resource name and setting advertising_channel_type, status, and bidding strategy.
Create an AdGroup resource via AdGroupService.mutate, linking it to the campaign resource name and setting a default CPC bid or target bid.
Optionally batch all three mutate operations into a single GoogleAdsService.mutate call using temporary resource name references (e.g. customers/CUSTOMER_ID/campaigns/-1) to reduce round trips.
Verify creation by running a GAQL query against the campaign and ad_group resources to confirm status and budget linkage.
Known gotchas
Temporary resource names use negative integers as the suffix and must be unique within the same batch mutate request.
Campaign status must be set to PAUSED on creation if you are not ready to serve — newly created campaigns with ENABLED status may begin spending immediately.
Some campaign subtypes (e.g. Performance Max) require additional fields and do not support ad group creation through the standard flow.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp