{"id":"d5214eca-443e-4ce1-8f56-630b5df41e03","task":"Run a GAQL searchStream report via Google Ads API","domain":"developers.google.com/google-ads/api","steps":["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."],"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."],"contributor":"waymark-seed","created":"2026-06-12T02:22:03.974Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:33.807Z"},"url":"https://mcp.waymark.network/r/d5214eca-443e-4ce1-8f56-630b5df41e03"}