Authenticate using OAuth 2.0 and obtain a valid access token; include developer-token and login-customer-id headers on every request.
Construct a GAQL query selecting desired fields from a resource such as campaign, ad_group, or metrics, with optional WHERE and ORDER BY clauses.
Send a POST request to the GoogleAdsService.searchStream endpoint for the target customer ID, passing the query in the request body.
Consume the server-sent stream of SearchGoogleAdsStreamResponse chunks; each chunk contains a list of GoogleAdsRow objects.
Extract field values from each row using the nested proto structure that mirrors the GAQL resource names.
Handle partial failure errors returned in the response and implement exponential backoff for RESOURCE_EXHAUSTED status codes.
Known gotchas
searchStream returns a streaming response — do not use the non-streaming search endpoint if you need large result sets, as it is paginated and slower.
GAQL does not support SELECT * — every field must be explicitly listed, and incompatible field combinations will return a FIELD_NOT_COMPATIBLE error.
Date ranges in WHERE clauses must use segments.date or a date range type; omitting a date filter defaults to the last 30 days in some contexts but can return no data in others.
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