The AI command center for Google Ads, Reddit Ads, GA4, and tracking code.
AdLoop provides three tools with explicit schemas and descriptions. Naming is action-verb-forward (run_, estimate_, draft_) and clear. However, parameter descriptions are sparse and lack validation guidance, output schemas are not formally documented, and error handling is not visible in the code. Tool descriptions are adequate but could be more specific about preconditions and expected outcomes. The use of ToolAnnotations (readOnlyHint/destructiveHint) is present and correct, but overall parameter quality falls short of production baseline (94% of A+ tools have full param descriptions; AdLoop is closer to 40%).
Draft a new ConversionAction and return a PREVIEW with plan_id. Call confirm_and_apply to execute.
Forecast clicks, cost, and conversions for a set of keywords using KeywordPlanIdeaService.GenerateKeywordForecastMetrics.
Execute an arbitrary GAQL query and return formatted results.
Parameter descriptions lack validation constraints and format guidance. E.g., 'geo_target_id' and 'language_id' are described generically without explaining valid ranges, formats, or how to discover them. Per production baseline, 100% of A+ tool params have actionable descriptions with constraints.
Output schemas are not formally documented in the code. Tool descriptions mention what is returned (e.g., 'formatted results', 'PREVIEW with plan_id') but the actual response structure is not visible or schema-documented.
No visible error handling or recovery guidance in tool definitions. Tools that interact with external APIs (Google Ads, GA4) will fail, but descriptions do not guide LLMs on what to do next. E.g., 'If customer_id lookup fails, try…' is absent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
'draft_create_conversion_action' has an unusually high parameter count (13 required/optional fields) without clear guidance on which combinations are valid or which are mutually exclusive. E.g., 'phone_call_duration_seconds' only applies when 'type_' is PHONE_CALL; this dependency is not documented.
Parameters like 'format' in run_gaql use free-form string descriptions ('table', 'csv', or 'json') rather than explicit enums. Free-form strings invite hallucinated values.
'estimate_budget' accepts 'keywords' as a complex array of objects with nested 'text', 'match_type', and 'max_cpc' fields. The description mentions the structure but does not validate: are all fields required? What are valid match_type values? What range for max_cpc? LLMs will guess wrong.