@soku-ai/cli 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -0
- package/dist/auth/device.d.ts +36 -0
- package/dist/auth/device.d.ts.map +1 -0
- package/dist/auth/device.js +66 -0
- package/dist/auth/device.js.map +1 -0
- package/dist/auth/store.d.ts +11 -0
- package/dist/auth/store.d.ts.map +1 -0
- package/dist/auth/store.js +89 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/commands/auth.d.ts +4 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +99 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/brand.d.ts +4 -0
- package/dist/commands/brand.d.ts.map +1 -0
- package/dist/commands/brand.js +53 -0
- package/dist/commands/brand.js.map +1 -0
- package/dist/commands/call.d.ts +4 -0
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +48 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/egress.d.ts +24 -0
- package/dist/commands/egress.d.ts.map +1 -0
- package/dist/commands/egress.js +197 -0
- package/dist/commands/egress.js.map +1 -0
- package/dist/commands/generated.d.ts +41 -0
- package/dist/commands/generated.d.ts.map +1 -0
- package/dist/commands/generated.js +106 -0
- package/dist/commands/generated.js.map +1 -0
- package/dist/commands/org.d.ts +4 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +49 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/resources.d.ts +4 -0
- package/dist/commands/resources.d.ts.map +1 -0
- package/dist/commands/resources.js +22 -0
- package/dist/commands/resources.js.map +1 -0
- package/dist/commands/review.d.ts +8 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +74 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/skill.d.ts +19 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +313 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +45 -0
- package/dist/config.js.map +1 -0
- package/dist/generated/capabilities.json +770 -0
- package/dist/http/client.d.ts +12 -0
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/client.js +91 -0
- package/dist/http/client.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/output/envelope.d.ts +45 -0
- package/dist/output/envelope.d.ts.map +1 -0
- package/dist/output/envelope.js +86 -0
- package/dist/output/envelope.js.map +1 -0
- package/dist/output/unwrap.d.ts +11 -0
- package/dist/output/unwrap.d.ts.map +1 -0
- package/dist/output/unwrap.js +33 -0
- package/dist/output/unwrap.js.map +1 -0
- package/dist/resolve.d.ts +24 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +24 -0
- package/dist/resolve.js.map +1 -0
- package/dist/skills/unzip.d.ts +14 -0
- package/dist/skills/unzip.d.ts.map +1 -0
- package/dist/skills/unzip.js +86 -0
- package/dist/skills/unzip.js.map +1 -0
- package/dist/update-check.d.ts +24 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +204 -0
- package/dist/update-check.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +61 -0
- package/skills/soku/SKILL.md +225 -0
- package/skills/soku/references/capability-flow.md +71 -0
|
@@ -0,0 +1,770 @@
|
|
|
1
|
+
{
|
|
2
|
+
"actions": [
|
|
3
|
+
{
|
|
4
|
+
"id": "action:ads/gaql_search",
|
|
5
|
+
"namespace": "ads",
|
|
6
|
+
"action": "gaql_search",
|
|
7
|
+
"description": "Realtime Google Ads GAQL fallback for native fields or segments not covered by cached query_* actions; no business-layer CPA/ROAS semantics.",
|
|
8
|
+
"long_description": "FALLBACK PATH for Google-native ads exploration.\n\nPrimary use:\nRealtime GAQL search for fields, segments, or dimension combinations that are not exposed by cached query_single_dimension or query_multi_dimension.\n\nUse when:\n- list_dimensions does not expose the field or segment the user needs.\n- query_multi_dimension returns unsupported_dimension_combination and a GAQL fallback is acceptable.\n- You need Google-native resource fields, raw.segments.*, or raw.metrics.*.\n\nDo not use when:\n- Cached business-layer analytics can answer the question. Use query_single_dimension or query_multi_dimension.\n- The user needs CPA, CPP, ROAS, Reg Rate, Pur Rate, or cg.{slug}.* fan-out. Use query_single_dimension.\n- The platform is Meta. This action is Google-only.\n\nWorkflow:\n1. Call list_dimensions first to confirm cached analytics cannot satisfy the query.\n2. Call get_resource_metadata if you do not know selectable/filterable/sortable Google fields for the target resource.\n3. Call this action with account_id, dimensions[], metrics[], optional filters, date_range, order_by, limit, and mode.\n\nOutput semantics:\n- Returns translated Google Ads query text in query.\n- columns contains normalized field arrays; rows may also be present for convenience.\n- account.data_freshness is realtime call time, not Parquet sync time.\n- No mapping-aware derived metrics or conversion-group fan-out are computed.",
|
|
9
|
+
"capability_mode": "read",
|
|
10
|
+
"priority": "advanced",
|
|
11
|
+
"requires_review": false,
|
|
12
|
+
"freshness_kind": "realtime",
|
|
13
|
+
"input_params": [
|
|
14
|
+
{
|
|
15
|
+
"name": "platform",
|
|
16
|
+
"type": "string",
|
|
17
|
+
"required": false,
|
|
18
|
+
"description": "Optional platform. Omit or use google; Meta is not supported."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "account_id",
|
|
22
|
+
"type": "string",
|
|
23
|
+
"required": true,
|
|
24
|
+
"description": "Google account id from list_ad_accounts.rows[].account_id. Use digits only with no dashes."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "dimensions",
|
|
28
|
+
"type": "list",
|
|
29
|
+
"required": true,
|
|
30
|
+
"description": "Dimension fields. Use L1.5 slugs such as date or campaign, or raw.segments.X fields discovered via get_resource_metadata."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "metrics",
|
|
34
|
+
"type": "list",
|
|
35
|
+
"required": true,
|
|
36
|
+
"description": "Metric fields. Use L1.5 slugs such as clicks or cost, or raw.metrics.X fields discovered via get_resource_metadata."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "date_range",
|
|
40
|
+
"type": "object",
|
|
41
|
+
"required": false,
|
|
42
|
+
"description": "{date_start, date_end} in YYYY-MM-DD format. Required for metric or segment queries; optional for pure metadata-style entity reads."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "filters",
|
|
46
|
+
"type": "object",
|
|
47
|
+
"required": false,
|
|
48
|
+
"description": "Filter expressions over fields marked filterable by get_resource_metadata."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "order_by",
|
|
52
|
+
"type": "list",
|
|
53
|
+
"required": false,
|
|
54
|
+
"description": "[{field, direction}] where direction is ASC or DESC; field must be sortable."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "limit",
|
|
58
|
+
"type": "integer",
|
|
59
|
+
"required": false,
|
|
60
|
+
"description": "Row cap. Omit to use the service default; hard budget still applies."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "mode",
|
|
64
|
+
"type": "string",
|
|
65
|
+
"required": false,
|
|
66
|
+
"description": "rows or summary."
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"output_shape": "{\"account\": {\"platform\": \"google\", \"account_id\": \"123\", \"data_freshness\": \"ISO\"}, \"columns\": {<field>: [...]}, \"rows\": [...], \"row_count\": N, \"query\": \"<translated GAQL string>\"}",
|
|
70
|
+
"see_also": [
|
|
71
|
+
"action:ads/query_single_dimension",
|
|
72
|
+
"action:ads/query_multi_dimension",
|
|
73
|
+
"action:ads/get_resource_metadata"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "action:ads/get_resource_metadata",
|
|
78
|
+
"namespace": "ads",
|
|
79
|
+
"action": "get_resource_metadata",
|
|
80
|
+
"description": "Discover selectable, filterable, and sortable Google Ads fields for a GAQL resource before building gaql_search raw.* inputs.",
|
|
81
|
+
"long_description": "FALLBACK PATH companion to gaql_search.\n\nPrimary use:\nGoogle Ads field discovery for a single GAQL resource such as campaign, ad_group, ad_group_criterion, or customer.\n\nUse when:\n- You plan to call gaql_search and need to know which native Google Ads fields exist.\n- You need to validate whether a field is selectable, filterable, or sortable.\n- A previous gaql_search failed because a raw field was unknown or not allowed.\n\nDo not use when:\n- You need cached business-layer analytics dimensions. Use list_dimensions.\n- You need conversion group business semantics. Use list_conversion_groups.\n- The platform is Meta. This action is Google-only.\n\nWorkflow:\n1. Choose the Google Ads GAQL resource name.\n2. Call this action to inspect fields.\n3. Use returned field names in gaql_search via raw.segments.X or raw.metrics.X, or use L1.5 slugs when available.\n\nOutput semantics:\n- selectable fields can be requested in gaql_search dimensions or metrics.\n- filterable fields can be used in gaql_search filters.\n- sortable fields can be used in gaql_search order_by.\n- data_type is the Google Ads API field data type.",
|
|
82
|
+
"capability_mode": "read",
|
|
83
|
+
"priority": "advanced",
|
|
84
|
+
"requires_review": false,
|
|
85
|
+
"freshness_kind": "realtime",
|
|
86
|
+
"input_params": [
|
|
87
|
+
{
|
|
88
|
+
"name": "platform",
|
|
89
|
+
"type": "string",
|
|
90
|
+
"required": false,
|
|
91
|
+
"description": "Optional platform. Omit or use google; Meta is not supported."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "account_id",
|
|
95
|
+
"type": "string",
|
|
96
|
+
"required": true,
|
|
97
|
+
"description": "Google account id from list_ad_accounts.rows[].account_id. Use digits only with no dashes."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "resource_name",
|
|
101
|
+
"type": "string",
|
|
102
|
+
"required": true,
|
|
103
|
+
"description": "Google Ads resource lowercase name, such as campaign or ad_group. Must match ^[a-z_]+$.",
|
|
104
|
+
"example": "ad_group"
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"output_shape": "{\"account\": {\"platform\": \"google\", \"account_id\": \"123\", \"data_freshness\": \"ISO\"}, \"resource\": \"ad_group\", \"fields\": [{\"name\": \"...\", \"category\": \"ATTRIBUTE\", \"selectable\": true, \"filterable\": true, \"sortable\": true, \"data_type\": \"STRING\"}]}",
|
|
108
|
+
"see_also": [
|
|
109
|
+
"action:ads/gaql_search"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "action:ads/list_ad_accounts",
|
|
114
|
+
"namespace": "ads",
|
|
115
|
+
"action": "list_ad_accounts",
|
|
116
|
+
"description": "Discover brand-granted Google/Meta ad accounts; returns account_id values required by later ads queries and ads-ops actions.",
|
|
117
|
+
"long_description": "Primary use:\nAccount discovery for the current brand. Use the returned account_id values as the only valid account_id inputs for later ads analytics or ads-ops calls.\n\nUse when:\n- The user did not provide an account_id.\n- The user asks which ad accounts are available.\n- You need to choose a Google or Meta account before querying metrics or running ads-ops actions.\n\nDo not use when:\n- You already have an account_id from this response in the same workflow.\n- You need campaign/ad/keyword metrics. Use list_dimensions plus query_* instead.\n\nWorkflow:\n1. Call this action, optionally filtering by platform.\n2. Pick one row's account_id and platform.\n3. Reuse that account_id in query_single_dimension, query_multi_dimension, gaql_search, get_resource_metadata, list_operation_records, or ads-ops actions.\n\nOutput semantics:\n- rows[].account_id is the external platform account id expected by later calls.\n- rows[].data_freshness is the latest completed ads sync run finish time for that account.\n\nConstraints:\n- Rows are filtered by ResourceBrandGrant for the sandbox brand.\n- An account absent from this response cannot be used in ads or ads-ops calls; the dispatcher returns 403.",
|
|
118
|
+
"capability_mode": "read",
|
|
119
|
+
"priority": "supporting",
|
|
120
|
+
"requires_review": false,
|
|
121
|
+
"freshness_kind": "synced",
|
|
122
|
+
"input_params": [
|
|
123
|
+
{
|
|
124
|
+
"name": "platform",
|
|
125
|
+
"type": "string",
|
|
126
|
+
"required": false,
|
|
127
|
+
"description": "Optional platform filter. Use google or meta; omit to list all granted accounts.",
|
|
128
|
+
"example": "google"
|
|
129
|
+
}
|
|
130
|
+
],
|
|
131
|
+
"output_shape": "{\"rows\": [{\"account_id\": \"1234567890\", \"platform\": \"google\", \"name\": \"...\", \"currency\": \"USD\", \"timezone\": \"America/Los_Angeles\", \"data_freshness\": \"ISO\"}]}",
|
|
132
|
+
"see_also": [
|
|
133
|
+
"action:ads/list_dimensions",
|
|
134
|
+
"action:ads/query_single_dimension",
|
|
135
|
+
"action:ads/query_multi_dimension"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "action:ads/list_conversion_actions",
|
|
140
|
+
"namespace": "ads",
|
|
141
|
+
"action": "list_conversion_actions",
|
|
142
|
+
"description": "List synced platform conversion actions that can be mapped into conversion groups for the caller's brand-granted ad accounts.",
|
|
143
|
+
"long_description": "Primary use:\nConversion action candidate discovery for maintaining conversion_group rules. Use this action when you need the platform conversion_action_id values that can be bound to a conversion group.\n\nUse when:\n- You are preparing to create or update conversion_group rules.\n- You need to know whether a platform conversion action is already mapped.\n- You need account-scoped conversion action metadata such as platform, customer_id, category, type, or status.\n\nDo not use when:\n- You need business conversion group slugs or derived metric labels. Use list_conversion_groups.\n- You need live platform inventory from ads-ops. This action returns synced Nex data limited to the current brand's granted ad accounts.\n\nOutput semantics:\n- conversion_actions[].account_id is the internal ad account id used by conversion mapping rules.\n- conversion_actions[].conversion_action_id is the platform action id used by rules.\n- conversion_actions[].data_freshness is the latest completed ads sync run finish time for the action's account.\n- mapped_to lists conversion_group slugs that already include the action.",
|
|
144
|
+
"capability_mode": "read",
|
|
145
|
+
"priority": "supporting",
|
|
146
|
+
"requires_review": false,
|
|
147
|
+
"freshness_kind": "synced",
|
|
148
|
+
"input_params": [
|
|
149
|
+
{
|
|
150
|
+
"name": "platform",
|
|
151
|
+
"type": "string",
|
|
152
|
+
"required": false,
|
|
153
|
+
"description": "Optional platform filter. Use google or meta; omit to list all synced actions.",
|
|
154
|
+
"example": "google"
|
|
155
|
+
}
|
|
156
|
+
],
|
|
157
|
+
"output_shape": "{\"conversion_actions\": [{\"id\": 11, \"account_id\": 5, \"customer_id\": \"1234567890\", \"platform\": \"google\", \"conversion_action_id\": \"act_purchase\", \"conversion_action_name\": \"Purchase\", \"category\": \"PURCHASE\", \"action_type\": \"WEBPAGE\", \"status\": \"ENABLED\", \"customer_name\": \"Account\", \"is_mapped\": true, \"data_freshness\": \"ISO\", \"mapped_to\": [\"payment-success\"]}]}",
|
|
158
|
+
"see_also": [
|
|
159
|
+
"action:ads/list_conversion_groups"
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "action:ads/list_conversion_groups",
|
|
164
|
+
"namespace": "ads",
|
|
165
|
+
"action": "list_conversion_groups",
|
|
166
|
+
"description": "Discover conversion group slugs and derived CPA/ROAS labels needed for cg.{slug}.* columns in query_single_dimension. Scoped to the caller's brand.",
|
|
167
|
+
"long_description": "Primary use:\nConversion Mapping Group discovery for business metrics such as CPA, CPP, ROAS, Reg Rate, and Pur Rate. Use the returned group slugs to build legal cg.{slug}.* column references for query_single_dimension.\n\nUse when:\n- The user asks for CPA, CPP, ROAS, registration rate, purchase rate, or other mapped conversion metrics.\n- You plan to request or interpret cg.{slug}.* fan-out columns.\n- You need to know the default attribution_window, time_field, value_field, or display labels for conversion-derived metrics.\n\nDo not use when:\n- You only need platform raw metrics such as clicks, impressions, spend_micros, ctr, or conversions.\n- You are using query_multi_dimension. Multi-dimensional queries do not support conversion-group fan-out or mapping-aware derived metrics.\n\nWorkflow:\n1. Call list_dimensions to confirm the dimension supports cg fan-out.\n2. Call this action to get legal group slugs, labels, metadata, and version tokens.\n3. Call query_single_dimension with cg.{slug}.* columns implied by the selected metrics.\n\nOutput semantics:\n- groups[].slug is the only legal slug in cg.{slug}.* column references.\n- groups[].brand_id echoes the caller's brand; same slug can mean a different configuration in another brand of the same org.\n- groups[].version is an opaque precondition token for conversion_group write actions.\n- derived_metrics explains the display label and denominator/value semantics.\n- metadata is a customer-defined list of key/value/description fields for agent interpretation.\n- attribution_window is the group default unless query_single_dimension overrides it.\n- Admin-Web fields such as color, sort_order, owner_admin_user_id, and summary_pin_slot are intentionally not exposed.",
|
|
168
|
+
"capability_mode": "read",
|
|
169
|
+
"priority": "supporting",
|
|
170
|
+
"requires_review": false,
|
|
171
|
+
"freshness_kind": "synced",
|
|
172
|
+
"input_params": [],
|
|
173
|
+
"output_shape": "{\"groups\": [{\"id\": 1, \"slug\": \"qualified-new-user\", \"name\": \"Qualified New User\", \"brand_id\": \"...\", \"version\": \"opaque\", \"time_field\": \"click_time\", \"value_field\": \"conversions_value\", \"attribution_window\": \"7d_click\", \"derived_metrics\": {\"cost_per_label\": \"CPA\", \"rate_label\": \"Reg Rate\", \"rate_denominator\": \"clicks\", \"value_label\": null, \"roas_label\": null}, \"metadata\": [{\"key\": \"business_stage\", \"value\": \"activation\", \"description\": \"How the agent should interpret this field.\"}]}]}",
|
|
174
|
+
"see_also": [
|
|
175
|
+
"action:ads/list_dimensions",
|
|
176
|
+
"action:ads/query_single_dimension",
|
|
177
|
+
"action:ads/list_conversion_actions"
|
|
178
|
+
]
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"id": "action:ads/list_conversions",
|
|
182
|
+
"namespace": "ads",
|
|
183
|
+
"action": "list_conversions",
|
|
184
|
+
"description": "Deprecated alias for list_conversion_groups. Returns conversion group business fields under rows for short-term compatibility.",
|
|
185
|
+
"long_description": "Deprecated compatibility alias.\n\nUse list_conversion_groups for new workflows. This action exists only so older agents that learned the legacy list_conversions name can still discover conversion group slugs and derived metric labels.\n\nOutput semantics:\n- rows[] contains conversion_group specs with the same field set as list_conversion_groups.groups[].\n- This action does not list platform conversion actions. Use list_conversion_actions for that.",
|
|
186
|
+
"capability_mode": "read",
|
|
187
|
+
"priority": "supporting",
|
|
188
|
+
"requires_review": false,
|
|
189
|
+
"freshness_kind": "synced",
|
|
190
|
+
"input_params": [],
|
|
191
|
+
"output_shape": "{\"rows\": [{\"id\": 1, \"slug\": \"qualified-new-user\", \"name\": \"Qualified New User\", \"brand_id\": \"...\", \"version\": \"opaque\", \"derived_metrics\": {\"cost_per_label\": \"CPA\", \"rate_label\": \"Reg Rate\", \"rate_denominator\": \"clicks\", \"value_label\": null, \"roas_label\": null}, \"metadata\": []}]}",
|
|
192
|
+
"see_also": [
|
|
193
|
+
"action:ads/list_conversion_groups",
|
|
194
|
+
"action:ads/list_conversion_actions",
|
|
195
|
+
"action:ads/query_single_dimension"
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "action:ads/list_dimensions",
|
|
200
|
+
"namespace": "ads",
|
|
201
|
+
"action": "list_dimensions",
|
|
202
|
+
"description": "Discover cached ads dimensions, metrics, filters, and scope caveats before building query_single_dimension or query_multi_dimension calls.",
|
|
203
|
+
"long_description": "Primary use:\nSchema discovery for cached ads analytics. This is the primary way to learn which business-layer dimensions, metrics, filters, scopes, and Parquet-backed views can be queried.\n\nUse when:\n- Before the first query_single_dimension or query_multi_dimension call in a workflow.\n- You need valid dimension slugs such as account, date, campaign, adgroup, ad, keyword, search_term, device, country, language, landing_page, age_range, or gender.\n- You need filterable_fields, parent_dimensions, scope_caveat, or cg fan-out support.\n- You need to know which raw and derived metrics are available.\n\nDo not use when:\n- You need Google Ads native fields not listed here. Use get_resource_metadata then gaql_search.\n- You need conversion group slugs for cg.{slug}.* columns. Use list_conversion_groups.\n\nWorkflow:\n1. Call list_ad_accounts if account_id is unknown.\n2. Call this action to select dimensions, filters, and metrics.\n3. Use query_single_dimension for one dimension or mapping-aware metrics.\n4. Use query_multi_dimension for valid multi-dimensional raw breakdowns.\n\nOutput semantics:\n- dimensions[].name is the dimension slug to pass as dimension or dimensions[].\n- dimensions[].filterable_fields are the only supported filter keys for that dimension.\n- dimensions[].supports_cg_fanout tells whether cg.{slug}.* columns can be requested.\n- metrics[].slug is the metric name to read from query output columns.",
|
|
204
|
+
"capability_mode": "read",
|
|
205
|
+
"priority": "supporting",
|
|
206
|
+
"requires_review": false,
|
|
207
|
+
"freshness_kind": "synced",
|
|
208
|
+
"input_params": [
|
|
209
|
+
{
|
|
210
|
+
"name": "platform",
|
|
211
|
+
"type": "string",
|
|
212
|
+
"required": false,
|
|
213
|
+
"description": "Optional platform filter. Use google or meta; omit to list all cached ads schemas.",
|
|
214
|
+
"example": "google"
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
"output_shape": "{\"dimensions\": [{\"slug\": \"campaign\", \"scope\": \"campaign\", \"source_view\": \"campaign_daily\", \"parquet_table\": \"campaign_daily\", \"filterable_fields\": [...], \"supports_cg_fanout\": true, \"caveat\": \"...\"}], \"metrics\": [{\"slug\": \"ctr\", \"unit\": \"ratio\", \"formula\": \"...\", \"depends_on\": [...], \"platform_support\": [...]}]}",
|
|
218
|
+
"see_also": [
|
|
219
|
+
"action:ads/query_single_dimension",
|
|
220
|
+
"action:ads/query_multi_dimension",
|
|
221
|
+
"action:ads/list_conversion_groups",
|
|
222
|
+
"action:ads/gaql_search"
|
|
223
|
+
]
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"id": "action:ads/list_operation_records",
|
|
227
|
+
"namespace": "ads",
|
|
228
|
+
"action": "list_operation_records",
|
|
229
|
+
"description": "List Nex-side ads-ops action records for an account and date range; not Google Ads external change history.",
|
|
230
|
+
"long_description": "Primary use:\nAudit Nex-side ads-ops actions that were recorded for a specific ad account and date range. This helps explain what Nex or an agent attempted to change.\n\nUse when:\n- The user asks what actions Nex or an agent performed on an ad account.\n- You need before/after payloads for Nex-recorded ads-ops writes.\n- You need operator_user_id, operator_display_name, action_type, target entity, and timestamp for internal troubleshooting.\n\nDo not use when:\n- The user asks for Google's external account change history. Use ads-ops.get_change_history.\n- The user asks for analytics metrics. Use query_single_dimension or query_multi_dimension.\n\nWorkflow:\n1. Call list_ad_accounts if account_id is unknown.\n2. Call this action with platform, account_id, date_start, and date_end.\n3. Use page and page_size for pagination when the result is large.\n\nOutput semantics:\n- rows[] contains Nex internal action records, not platform-native history.\n- before and after are the recorded operation payload snapshots when available.\n- Operator email is never returned to avoid PII leakage; use operator_user_id and operator_display_name only.",
|
|
231
|
+
"capability_mode": "read",
|
|
232
|
+
"priority": "supporting",
|
|
233
|
+
"requires_review": false,
|
|
234
|
+
"freshness_kind": "synced",
|
|
235
|
+
"input_params": [
|
|
236
|
+
{
|
|
237
|
+
"name": "platform",
|
|
238
|
+
"type": "string",
|
|
239
|
+
"required": true,
|
|
240
|
+
"description": "Ad platform for the selected account. Use google or meta."
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"name": "account_id",
|
|
244
|
+
"type": "string",
|
|
245
|
+
"required": true,
|
|
246
|
+
"description": "Account id from list_ad_accounts.rows[].account_id. For Google, use digits only with no dashes."
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"name": "date_start",
|
|
250
|
+
"type": "string",
|
|
251
|
+
"required": true,
|
|
252
|
+
"description": "Inclusive start date in YYYY-MM-DD format."
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"name": "date_end",
|
|
256
|
+
"type": "string",
|
|
257
|
+
"required": true,
|
|
258
|
+
"description": "Inclusive end date in YYYY-MM-DD format."
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"name": "page",
|
|
262
|
+
"type": "integer",
|
|
263
|
+
"required": false,
|
|
264
|
+
"description": "1-indexed page number. Defaults to 1."
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"name": "page_size",
|
|
268
|
+
"type": "integer",
|
|
269
|
+
"required": false,
|
|
270
|
+
"description": "Rows per page. Omit to use the service default."
|
|
271
|
+
}
|
|
272
|
+
],
|
|
273
|
+
"output_shape": "{\"account\": {\"platform\": \"google\", \"account_id\": \"123\", \"data_freshness\": \"ISO\"}, \"rows\": [{\"operator_user_id\": \"...\", \"operator_display_name\": \"...\", \"action_type\": \"create_campaign\", \"target_entity_type\": \"campaign\", \"target_entity_id\": \"...\", \"before\": null, \"after\": {...}, \"timestamp\": \"ISO\"}]}",
|
|
274
|
+
"see_also": [
|
|
275
|
+
"action:ads/list_ad_accounts",
|
|
276
|
+
"action:ads-ops/get_change_history"
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"id": "action:ads/query_multi_dimension",
|
|
281
|
+
"namespace": "ads",
|
|
282
|
+
"action": "query_multi_dimension",
|
|
283
|
+
"description": "Cached ads breakdown across multiple dimensions; returns column-oriented raw platform metrics without CPA/ROAS or cg.{slug}.* fan-out.",
|
|
284
|
+
"long_description": "PRIMARY PATH for cached multi-dimensional breakdowns.\n\nPrimary use:\nMulti-dimensional reporting over synced Nex ads data, such as campaign x country or campaign x device. Use it when the user needs more than one group-by dimension.\n\nUse when:\n- The user asks for a breakdown by two or more supported dimensions.\n- The requested combination is valid according to the service viable-combo table.\n- Raw platform metrics are sufficient.\n\nDo not use when:\n- The user needs CPA, CPP, ROAS, Reg Rate, Pur Rate, or cg.{slug}.* columns. Use query_single_dimension.\n- A single dimension is enough. Use query_single_dimension for richer semantics.\n- The dimension combination is unsupported and must use Google-native fields. Use get_resource_metadata then gaql_search.\n\nWorkflow:\n1. Call list_ad_accounts if account_id is unknown.\n2. Call list_dimensions to choose legal dimension slugs and filters.\n3. Prefer the most specific child dimension; the handler may drop redundant parent dimensions and report that in notice.\n4. Call this action with platform, account_id, date range, and dimensions[].\n\nOutput semantics:\n- Returns column-oriented data. Read data.columns.<column>[i], not data.rows.\n- Only platform-raw conversion metrics are available.\n- requested_dimensions preserves the original request when normalization occurs.\n- notice describes dropped parent dimensions; unsupported combinations return 400 unsupported_dimension_combination with nearest viable combos and a GAQL fallback hint.\n- For id-keyed dimensions (campaign / account / adgroup / ad), the response includes both the raw id column (e.g., adset_id) and the resolved name column (e.g., adset_name) for agent display. Use the id column for filters / drills; use the name column for user-facing output.",
|
|
285
|
+
"capability_mode": "read",
|
|
286
|
+
"priority": "primary",
|
|
287
|
+
"requires_review": false,
|
|
288
|
+
"freshness_kind": "synced",
|
|
289
|
+
"input_params": [
|
|
290
|
+
{
|
|
291
|
+
"name": "platform",
|
|
292
|
+
"type": "string",
|
|
293
|
+
"required": true,
|
|
294
|
+
"description": "Ad platform for the selected account. Use google or meta."
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"name": "account_id",
|
|
298
|
+
"type": "string",
|
|
299
|
+
"required": true,
|
|
300
|
+
"description": "Account id from list_ad_accounts.rows[].account_id. For Google, use digits only with no dashes."
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"name": "date_start",
|
|
304
|
+
"type": "string",
|
|
305
|
+
"required": true,
|
|
306
|
+
"description": "Inclusive start date in YYYY-MM-DD format."
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"name": "date_end",
|
|
310
|
+
"type": "string",
|
|
311
|
+
"required": true,
|
|
312
|
+
"description": "Inclusive end date in YYYY-MM-DD format."
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"name": "dimensions",
|
|
316
|
+
"type": "list",
|
|
317
|
+
"required": true,
|
|
318
|
+
"description": "Dimension slug list from list_dimensions.dimensions[].name. The service enforces valid combinations.",
|
|
319
|
+
"example": [
|
|
320
|
+
"campaign",
|
|
321
|
+
"country"
|
|
322
|
+
]
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"name": "filters",
|
|
326
|
+
"type": "object",
|
|
327
|
+
"required": false,
|
|
328
|
+
"description": "Map of field -> allowed values; field must appear in list_dimensions.filterable_fields for the selected dimensions."
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"name": "sort",
|
|
332
|
+
"type": "list",
|
|
333
|
+
"required": false,
|
|
334
|
+
"description": "[{field, order}] with order in {asc, desc}; field must exist in output columns."
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"name": "mode",
|
|
338
|
+
"type": "string",
|
|
339
|
+
"required": false,
|
|
340
|
+
"description": "rows (default) or summary."
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"name": "limit",
|
|
344
|
+
"type": "integer",
|
|
345
|
+
"required": false,
|
|
346
|
+
"description": "Row cap. Omit to use the service default; hard budget still applies."
|
|
347
|
+
}
|
|
348
|
+
],
|
|
349
|
+
"output_shape": "{\"account\": {\"platform\": \"google\", \"account_id\": \"123\", \"data_freshness\": \"ISO\"}, \"dimensions\": [\"campaign\", \"country\"], \"data_basis\": {...}, \"scope_caveat\": \"...\", \"row_count\": N, \"columns\": {<col>: [...]}, \"summary\": null}",
|
|
350
|
+
"see_also": [
|
|
351
|
+
"action:ads/query_single_dimension",
|
|
352
|
+
"action:ads/gaql_search",
|
|
353
|
+
"action:ads/list_dimensions"
|
|
354
|
+
]
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"id": "action:ads/query_single_dimension",
|
|
358
|
+
"namespace": "ads",
|
|
359
|
+
"action": "query_single_dimension",
|
|
360
|
+
"description": "Primary cached ads analytics query for one dimension; returns column-oriented business metrics, derived metrics, and cg.{slug}.* conversion fan-out.",
|
|
361
|
+
"long_description": "PRIMARY PATH for cached ads analytics.\n\nPrimary use:\nSingle-dimension reporting over synced Nex business-layer ads data. Use this for daily report KPIs, campaign/ad/adgroup/keyword/search-term/device/country breakdowns, cross-platform-consistent metrics, and mapping-aware derived metrics.\n\nUse when:\n- The analysis has exactly one group-by dimension.\n- The user asks for CPA, CPP, ROAS, Reg Rate, Pur Rate, or cg.{slug}.* metrics.\n- The result should use Nex cached Parquet data and business semantics.\n\nDo not use when:\n- The user needs multiple group-by dimensions. Use query_multi_dimension.\n- The field or segment is not exposed by list_dimensions. Use get_resource_metadata then gaql_search for Google-native exploration.\n- The user needs write or mutation history. Use ads-ops or list_operation_records.\n\nWorkflow:\n1. Call list_ad_accounts if account_id is unknown.\n2. Call list_dimensions to choose a valid dimension, filters, and metrics.\n3. Call list_conversion_groups only if conversion-group fan-out or CPA/ROAS-like metrics are needed.\n4. Call this action with platform, account_id, date_start, date_end, and dimension.\n\nOutput semantics:\n- Returns column-oriented data. Read data.columns.<column>[i], not data.rows.\n- spend_micros and cpc_micros are micros; ctr is a 0-1 ratio.\n- scope_caveat explains aggregation limits for the selected scope.\n- mode=summary returns summary data such as top rows, totals, and p95 where supported.\n- truncated or warning means the agent must mention partial result limits.\n- For id-keyed dimensions (campaign / account / adgroup / ad), dimension_label is the resolved entity name (e.g., adset name for adgroup dimension); falls back to the platform id when the entity record is missing or has no name.",
|
|
362
|
+
"capability_mode": "read",
|
|
363
|
+
"priority": "primary",
|
|
364
|
+
"requires_review": false,
|
|
365
|
+
"freshness_kind": "synced",
|
|
366
|
+
"input_params": [
|
|
367
|
+
{
|
|
368
|
+
"name": "platform",
|
|
369
|
+
"type": "string",
|
|
370
|
+
"required": true,
|
|
371
|
+
"description": "Ad platform for the selected account. Use google or meta.",
|
|
372
|
+
"example": "google"
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"name": "account_id",
|
|
376
|
+
"type": "string",
|
|
377
|
+
"required": true,
|
|
378
|
+
"description": "Account id from list_ad_accounts.rows[].account_id. For Google, use digits only with no dashes.",
|
|
379
|
+
"example": "1234567890"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"name": "date_start",
|
|
383
|
+
"type": "string",
|
|
384
|
+
"required": true,
|
|
385
|
+
"description": "Inclusive start date in YYYY-MM-DD format.",
|
|
386
|
+
"example": "2026-05-01"
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"name": "date_end",
|
|
390
|
+
"type": "string",
|
|
391
|
+
"required": true,
|
|
392
|
+
"description": "Inclusive end date in YYYY-MM-DD format.",
|
|
393
|
+
"example": "2026-05-18"
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"name": "dimension",
|
|
397
|
+
"type": "string",
|
|
398
|
+
"required": true,
|
|
399
|
+
"description": "Single dimension slug from list_dimensions.dimensions[].name.",
|
|
400
|
+
"example": "campaign"
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"name": "filters",
|
|
404
|
+
"type": "object",
|
|
405
|
+
"required": false,
|
|
406
|
+
"description": "Map of field -> allowed values; field must appear in the selected dimension's list_dimensions.filterable_fields."
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"name": "sort",
|
|
410
|
+
"type": "list",
|
|
411
|
+
"required": false,
|
|
412
|
+
"description": "[{field, order}] with order in {asc, desc}; default desc by total_spend_micros. Sort field must exist in output columns."
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"name": "mode",
|
|
416
|
+
"type": "string",
|
|
417
|
+
"required": false,
|
|
418
|
+
"description": "rows (default) or summary; summary returns top rows, totals, and p95."
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"name": "limit",
|
|
422
|
+
"type": "integer",
|
|
423
|
+
"required": false,
|
|
424
|
+
"description": "Row cap. Omit to use the service default; hard budget still applies."
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"name": "attribution_window",
|
|
428
|
+
"type": "string",
|
|
429
|
+
"required": false,
|
|
430
|
+
"description": "Override conversion-mapping default; one of 1d_click, 7d_click, 1d_view, 7d_view, 28d_view, 1d_click_1d_view, 7d_click_1d_view, 28d_click_1d_view, default"
|
|
431
|
+
}
|
|
432
|
+
],
|
|
433
|
+
"output_shape": "{\"account\": {\"platform\": \"google\", \"account_id\": \"123\", \"data_freshness\": \"ISO\"}, \"dimension\": \"campaign\", \"data_basis\": {\"view\": \"...\", \"parquet_table\": \"...\", \"selected_scope\": \"campaign\", \"cg_fan_out_available\": true}, \"scope_caveat\": \"...\", \"row_count\": 128, \"truncated\": false, \"warning\": null, \"columns\": {\"campaign_id\": [...], \"spend_micros\": [...], \"ctr\": [...], \"cg.qualified-new-user.all_conv\": [...]}, \"summary\": null}",
|
|
434
|
+
"see_also": [
|
|
435
|
+
"action:ads/query_multi_dimension",
|
|
436
|
+
"action:ads/gaql_search",
|
|
437
|
+
"action:ads/list_conversion_groups"
|
|
438
|
+
]
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"id": "action:ga4/get_conversion_overview",
|
|
442
|
+
"namespace": "ga4",
|
|
443
|
+
"action": "get_conversion_overview",
|
|
444
|
+
"description": "Cached GA4 key-event summary for a property over a date range; returns total key events, revenue, and top converting traffic sources.",
|
|
445
|
+
"long_description": "Primary use:\nConversion summary using GA4 v5+ key_events, together with the top sources that drove those events.\n\nUse when:\n- The user asks for total conversions or key events for a period.\n- The user asks which sources drove the most conversions.\n- You need a quick conversion + revenue snapshot without picking specific events.\n\nDo not use when:\n- The user needs event-level counts beyond conversions. Use list_events.\n- The user needs a daily key-event time series. Use get_daily_trend and read rows[].key_events.\n- The user needs per-page conversion breakdown. Use list_top_pages and read rows[].key_events.\n\nWorkflow:\n1. Call list_properties if property_id is unknown.\n2. Call this action with property_id, date_start, date_end.\n\nOutput semantics:\n- overview.total_key_events sums property-level key_events for the range.\n- overview.total_revenue_micros is in micros.\n- overview.top_converting_sources has the same row shape as list_traffic_sources, sorted by key_events DESC and capped at 10.\n- Returns zeros and an empty top_converting_sources when the property has no synced data for the range.",
|
|
446
|
+
"capability_mode": "read",
|
|
447
|
+
"priority": "primary",
|
|
448
|
+
"requires_review": false,
|
|
449
|
+
"freshness_kind": "synced",
|
|
450
|
+
"input_params": [
|
|
451
|
+
{
|
|
452
|
+
"name": "property_id",
|
|
453
|
+
"type": "string",
|
|
454
|
+
"required": true,
|
|
455
|
+
"description": "Property id from list_properties.rows[].property_id. account_id is accepted as an alias.",
|
|
456
|
+
"example": "123456789"
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"name": "date_start",
|
|
460
|
+
"type": "string",
|
|
461
|
+
"required": true,
|
|
462
|
+
"description": "Inclusive start date in YYYY-MM-DD format.",
|
|
463
|
+
"example": "2026-05-01"
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
"name": "date_end",
|
|
467
|
+
"type": "string",
|
|
468
|
+
"required": true,
|
|
469
|
+
"description": "Inclusive end date in YYYY-MM-DD format.",
|
|
470
|
+
"example": "2026-05-18"
|
|
471
|
+
}
|
|
472
|
+
],
|
|
473
|
+
"output_shape": "{\"property\": {\"property_id\": \"123456789\", \"data_freshness\": \"ISO\"}, \"overview\": {\"total_key_events\": N, \"total_revenue_micros\": micros, \"top_converting_sources\": [{\"session_source\": \"...\", \"session_medium\": \"...\", \"session_campaign_name\": \"...\", \"key_events\": N, \"total_revenue_micros\": micros, \"sessions\": N, \"total_users\": N, ...}]}}",
|
|
474
|
+
"see_also": [
|
|
475
|
+
"action:ga4/list_properties",
|
|
476
|
+
"action:ga4/get_daily_trend",
|
|
477
|
+
"action:ga4/list_traffic_sources",
|
|
478
|
+
"action:ga4/list_events"
|
|
479
|
+
]
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"id": "action:ga4/get_daily_trend",
|
|
483
|
+
"namespace": "ga4",
|
|
484
|
+
"action": "get_daily_trend",
|
|
485
|
+
"description": "Cached GA4 daily KPI time series for a property over a date range; returns one row per day for charting and anomaly detection.",
|
|
486
|
+
"long_description": "Primary use:\nPer-day GA4 KPI time series for a property.\n\nUse when:\n- The user asks for a daily chart, week-over-week or day-over-day comparison, or anomaly check.\n- You need report_date x property-level metrics ordered by day.\n\nDo not use when:\n- The user needs a single aggregated snapshot. Use get_property_overview.\n- The user needs per-page, per-source, or per-event daily breakdown. This action does not split by dimension.\n- The user wants daily ad spend. Use ads.query_single_dimension with dimension=date.\n\nWorkflow:\n1. Call list_properties if property_id is unknown.\n2. Call this action with property_id, date_start, date_end.\n\nOutput semantics:\n- rows[].report_date is ISO YYYY-MM-DD.\n- rows[].total_revenue_micros is in micros; rows[].bounce_rate is a 0-1 ratio; rows[].avg_session_duration_seconds is in seconds.\n- rows[].key_events replaces legacy 'conversions' (GA4 v5+).\n- Returns [] when the property has no synced data for the range.",
|
|
487
|
+
"capability_mode": "read",
|
|
488
|
+
"priority": "primary",
|
|
489
|
+
"requires_review": false,
|
|
490
|
+
"freshness_kind": "synced",
|
|
491
|
+
"input_params": [
|
|
492
|
+
{
|
|
493
|
+
"name": "property_id",
|
|
494
|
+
"type": "string",
|
|
495
|
+
"required": true,
|
|
496
|
+
"description": "Property id from list_properties.rows[].property_id. account_id is accepted as an alias.",
|
|
497
|
+
"example": "123456789"
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"name": "date_start",
|
|
501
|
+
"type": "string",
|
|
502
|
+
"required": true,
|
|
503
|
+
"description": "Inclusive start date in YYYY-MM-DD format.",
|
|
504
|
+
"example": "2026-05-01"
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"name": "date_end",
|
|
508
|
+
"type": "string",
|
|
509
|
+
"required": true,
|
|
510
|
+
"description": "Inclusive end date in YYYY-MM-DD format.",
|
|
511
|
+
"example": "2026-05-18"
|
|
512
|
+
}
|
|
513
|
+
],
|
|
514
|
+
"output_shape": "{\"property\": {\"property_id\": \"123456789\", \"data_freshness\": \"ISO\"}, \"rows\": [{\"report_date\": \"2026-05-01\", \"total_users\": N, \"new_users\": N, \"active_users\": N, \"sessions\": N, \"screen_page_views\": N, \"avg_session_duration_seconds\": seconds, \"bounce_rate\": 0..1, \"events_count\": N, \"key_events\": N, \"total_revenue_micros\": micros, \"currency\": \"USD\"}]}",
|
|
515
|
+
"see_also": [
|
|
516
|
+
"action:ga4/list_properties",
|
|
517
|
+
"action:ga4/get_property_overview",
|
|
518
|
+
"action:ga4/list_traffic_sources"
|
|
519
|
+
]
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
"id": "action:ga4/get_property_overview",
|
|
523
|
+
"namespace": "ga4",
|
|
524
|
+
"action": "get_property_overview",
|
|
525
|
+
"description": "Aggregate GA4 KPI snapshot for a property over a date range; returns one overview block with users, sessions, page views, key events, and revenue.",
|
|
526
|
+
"long_description": "Primary use:\nHeadline KPIs for a GA4 property over a date range, without dimensional breakdown. Use it for a one-shot snapshot answer.\n\nUse when:\n- The user asks for a property-level summary across a window.\n- You need total/new/active users, sessions, page views, key events, or revenue across the period.\n\nDo not use when:\n- The user needs per-page, per-channel, or per-event breakdown. Use list_top_pages, list_traffic_sources, or list_events.\n- The user needs a daily time series. Use get_daily_trend.\n- The user needs CPA / ROAS or ad spend. Use ads.query_single_dimension.\n\nWorkflow:\n1. Call list_properties if property_id is unknown.\n2. Call this action with property_id, date_start, date_end.\n\nOutput semantics:\n- overview.total_revenue_micros is in micros (1 USD = 1_000_000); pair with overview.currency for display.\n- overview.bounce_rate is a 0-1 ratio.\n- overview.avg_session_duration_seconds is in seconds.\n- overview.key_events is the GA4 v5+ replacement for the legacy 'conversions' concept.\n- Returns null overview when the property has no synced data for the range.",
|
|
527
|
+
"capability_mode": "read",
|
|
528
|
+
"priority": "primary",
|
|
529
|
+
"requires_review": false,
|
|
530
|
+
"freshness_kind": "synced",
|
|
531
|
+
"input_params": [
|
|
532
|
+
{
|
|
533
|
+
"name": "property_id",
|
|
534
|
+
"type": "string",
|
|
535
|
+
"required": true,
|
|
536
|
+
"description": "Property id from list_properties.rows[].property_id. account_id is accepted as an alias.",
|
|
537
|
+
"example": "123456789"
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
"name": "date_start",
|
|
541
|
+
"type": "string",
|
|
542
|
+
"required": true,
|
|
543
|
+
"description": "Inclusive start date in YYYY-MM-DD format.",
|
|
544
|
+
"example": "2026-05-01"
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"name": "date_end",
|
|
548
|
+
"type": "string",
|
|
549
|
+
"required": true,
|
|
550
|
+
"description": "Inclusive end date in YYYY-MM-DD format.",
|
|
551
|
+
"example": "2026-05-18"
|
|
552
|
+
}
|
|
553
|
+
],
|
|
554
|
+
"output_shape": "{\"property\": {\"property_id\": \"123456789\", \"data_freshness\": \"ISO\"}, \"overview\": {\"total_users\": N, \"new_users\": N, \"active_users\": N, \"sessions\": N, \"screen_page_views\": N, \"avg_session_duration_seconds\": seconds, \"bounce_rate\": 0..1, \"events_count\": N, \"key_events\": N, \"total_revenue_micros\": micros, \"currency\": \"USD\"}}",
|
|
555
|
+
"see_also": [
|
|
556
|
+
"action:ga4/list_properties",
|
|
557
|
+
"action:ga4/get_daily_trend",
|
|
558
|
+
"action:ga4/list_traffic_sources",
|
|
559
|
+
"action:ga4/list_top_pages"
|
|
560
|
+
]
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
"id": "action:ga4/list_events",
|
|
564
|
+
"namespace": "ga4",
|
|
565
|
+
"action": "list_events",
|
|
566
|
+
"description": "Cached GA4 event breakdown for a property over a date range; returns rows of event_name with event_count and event_value_micros.",
|
|
567
|
+
"long_description": "Primary use:\nEvent-level GA4 analytics — not limited to conversion events.\n\nUse when:\n- The user asks about any GA4 event volume (scroll, session_start, add_to_cart, purchase, etc.).\n- You need per-event counts and event value sums for a date range.\n\nDo not use when:\n- The user wants only conversion / key-event totals. Use get_conversion_overview.\n- The user wants per-page or per-source breakdown. Use list_top_pages or list_traffic_sources.\n\nWorkflow:\n1. Call list_properties if property_id is unknown.\n2. Call this action with property_id, date range, and optional event_names filter / limit.\n\nOutput semantics:\n- Default sort is event_count DESC.\n- rows[].event_value_micros sums GA4 event_value in micros; events without value report 0.\n- When event_names is omitted, returns top events ranked by event_count up to limit.\n- Returns [] when the property has no synced event data for the range.",
|
|
568
|
+
"capability_mode": "read",
|
|
569
|
+
"priority": "supporting",
|
|
570
|
+
"requires_review": false,
|
|
571
|
+
"freshness_kind": "synced",
|
|
572
|
+
"input_params": [
|
|
573
|
+
{
|
|
574
|
+
"name": "property_id",
|
|
575
|
+
"type": "string",
|
|
576
|
+
"required": true,
|
|
577
|
+
"description": "Property id from list_properties.rows[].property_id. account_id is accepted as an alias.",
|
|
578
|
+
"example": "123456789"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"name": "date_start",
|
|
582
|
+
"type": "string",
|
|
583
|
+
"required": true,
|
|
584
|
+
"description": "Inclusive start date in YYYY-MM-DD format.",
|
|
585
|
+
"example": "2026-05-01"
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
"name": "date_end",
|
|
589
|
+
"type": "string",
|
|
590
|
+
"required": true,
|
|
591
|
+
"description": "Inclusive end date in YYYY-MM-DD format.",
|
|
592
|
+
"example": "2026-05-18"
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
"name": "event_names",
|
|
596
|
+
"type": "list",
|
|
597
|
+
"required": false,
|
|
598
|
+
"description": "GA4 event_name slugs to filter (string list). Omit to list all events ranked by count. Empty/falsy entries are ignored.",
|
|
599
|
+
"example": [
|
|
600
|
+
"purchase",
|
|
601
|
+
"add_to_cart"
|
|
602
|
+
]
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"name": "limit",
|
|
606
|
+
"type": "integer",
|
|
607
|
+
"required": false,
|
|
608
|
+
"description": "Row cap. Default 100, hard cap 500. page_size accepted as an alias."
|
|
609
|
+
}
|
|
610
|
+
],
|
|
611
|
+
"output_shape": "{\"property\": {\"property_id\": \"123456789\", \"data_freshness\": \"ISO\"}, \"rows\": [{\"event_name\": \"page_view\", \"event_count\": N, \"event_value_micros\": micros}]}",
|
|
612
|
+
"see_also": [
|
|
613
|
+
"action:ga4/list_properties",
|
|
614
|
+
"action:ga4/get_conversion_overview",
|
|
615
|
+
"action:ga4/list_metrics"
|
|
616
|
+
]
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"id": "action:ga4/list_metrics",
|
|
620
|
+
"namespace": "ga4",
|
|
621
|
+
"action": "list_metrics",
|
|
622
|
+
"description": "Discover GA4 metric slugs, units, and formulas from the Metric Registry before reading them as field names in other ga4.* outputs.",
|
|
623
|
+
"long_description": "Primary use:\nMetric Registry discovery filtered to source=ga4. Same registry as the metrics block in ads.list_dimensions, but scoped to GA4 metrics only.\n\nUse when:\n- You are unsure which metric slug, unit, or formula a GA4 field uses.\n- You need to map a metric slug to its dependency chain or platform support.\n\nDo not use when:\n- You need a queryable dimension list. ga4 has no list_dimensions equivalent; other ga4.* actions return fixed column sets.\n- You need ads-side metric semantics. Use ads.list_dimensions.\n\nWorkflow:\n1. Call this action.\n2. Match returned slugs to columns in get_property_overview, get_daily_trend, list_top_pages, list_traffic_sources, or list_events output.\n\nOutput semantics:\n- rows[].slug is the canonical metric name (e.g. engagement_rate, total_users).\n- rows[].unit is the metric unit class (ratio, micros, seconds, count).\n- rows[].available_on lists the platforms exposing this metric; for source=ga4 it always includes 'ga4'.\n- This is metadata; no property_id or date range needed and no data is queried.",
|
|
624
|
+
"capability_mode": "read",
|
|
625
|
+
"priority": "supporting",
|
|
626
|
+
"requires_review": false,
|
|
627
|
+
"freshness_kind": "synced",
|
|
628
|
+
"input_params": [],
|
|
629
|
+
"output_shape": "{\"rows\": [{\"slug\": \"engagement_rate\", \"formula\": \"engaged_sessions / sessions\", \"unit\": \"ratio\", \"depends_on\": [...], \"platform_support\": [\"ga4\"], \"available_on\": [\"ga4\"], \"source\": \"ga4\", \"description\": \"...\"}]}",
|
|
630
|
+
"see_also": [
|
|
631
|
+
"action:ga4/get_property_overview",
|
|
632
|
+
"action:ga4/get_daily_trend",
|
|
633
|
+
"action:ga4/list_events"
|
|
634
|
+
]
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
"id": "action:ga4/list_properties",
|
|
638
|
+
"namespace": "ga4",
|
|
639
|
+
"action": "list_properties",
|
|
640
|
+
"description": "Discover org-bound GA4 properties; returns property_id values required by every other ga4.* action.",
|
|
641
|
+
"long_description": "Primary use:\nProperty discovery for the current organization. Use the returned property_id values as the only valid property_id inputs for later ga4.* analytics calls.\n\nUse when:\n- The user did not provide a property_id.\n- The user asks which GA4 properties are available.\n- You need to choose a GA4 property before querying overviews, trends, pages, sources, or events.\n\nDo not use when:\n- You already have a property_id from this response in the same workflow.\n- You need ad accounts. Use ads.list_ad_accounts instead.\n\nWorkflow:\n1. Call this action.\n2. Pick one row's property_id.\n3. Reuse that property_id (alias account_id is accepted) in any later ga4.* call.\n\nOutput semantics:\n- rows[].property_id is the external GA4 property id expected by later calls.\n- rows[].data_freshness is the latest completed GA4 sync run finish time; null when never synced.\n\nConstraints:\n- Rows are scoped to the caller's organization via the org-level GA4 binding; ResourceBrandGrant is not applied here.\n- A property absent from this response is not queryable by other ga4 actions.",
|
|
642
|
+
"capability_mode": "read",
|
|
643
|
+
"priority": "advanced",
|
|
644
|
+
"requires_review": false,
|
|
645
|
+
"freshness_kind": "synced",
|
|
646
|
+
"input_params": [
|
|
647
|
+
{
|
|
648
|
+
"name": "limit",
|
|
649
|
+
"type": "integer",
|
|
650
|
+
"required": false,
|
|
651
|
+
"description": "Max rows. Default 100, hard cap 500. page_size accepted as an alias."
|
|
652
|
+
}
|
|
653
|
+
],
|
|
654
|
+
"output_shape": "{\"rows\": [{\"property_id\": \"123456789\", \"property_name\": \"Main Web Property\", \"status\": \"active\", \"currency_code\": \"USD\", \"timezone\": \"America/Los_Angeles\", \"data_freshness\": \"ISO\"}]}",
|
|
655
|
+
"see_also": [
|
|
656
|
+
"action:ga4/get_property_overview",
|
|
657
|
+
"action:ga4/get_daily_trend",
|
|
658
|
+
"action:ga4/list_metrics"
|
|
659
|
+
]
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
"id": "action:ga4/list_top_pages",
|
|
663
|
+
"namespace": "ga4",
|
|
664
|
+
"action": "list_top_pages",
|
|
665
|
+
"description": "Cached GA4 top-page ranking for a date range; returns rows of page_path/page_title with views, users, engagement, and key events.",
|
|
666
|
+
"long_description": "Primary use:\nPage-level ranking over a property's synced GA4 data.\n\nUse when:\n- The user asks for most-viewed pages, top landing pages, or best-performing content.\n- You need page_path x per-page metrics for a date range.\n\nDo not use when:\n- The user needs a per-page time series. This action does not split by day.\n- The user needs traffic source breakdown. Use list_traffic_sources.\n- The user needs event-level breakdown. Use list_events.\n\nWorkflow:\n1. Call list_properties if property_id is unknown.\n2. Call this action with property_id, date range, and optional sort_by / limit.\n\nOutput semantics:\n- Default sort is screen_page_views DESC.\n- rows[].bounce_rate is a 0-1 ratio; rows[].avg_session_duration_seconds is in seconds.\n- rows[].key_events is page-level conversion count (GA4 v5+ naming).\n- Returns [] when the property has no synced page data for the range.",
|
|
667
|
+
"capability_mode": "read",
|
|
668
|
+
"priority": "primary",
|
|
669
|
+
"requires_review": false,
|
|
670
|
+
"freshness_kind": "synced",
|
|
671
|
+
"input_params": [
|
|
672
|
+
{
|
|
673
|
+
"name": "property_id",
|
|
674
|
+
"type": "string",
|
|
675
|
+
"required": true,
|
|
676
|
+
"description": "Property id from list_properties.rows[].property_id. account_id is accepted as an alias.",
|
|
677
|
+
"example": "123456789"
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
"name": "date_start",
|
|
681
|
+
"type": "string",
|
|
682
|
+
"required": true,
|
|
683
|
+
"description": "Inclusive start date in YYYY-MM-DD format.",
|
|
684
|
+
"example": "2026-05-01"
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
"name": "date_end",
|
|
688
|
+
"type": "string",
|
|
689
|
+
"required": true,
|
|
690
|
+
"description": "Inclusive end date in YYYY-MM-DD format.",
|
|
691
|
+
"example": "2026-05-18"
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"name": "limit",
|
|
695
|
+
"type": "integer",
|
|
696
|
+
"required": false,
|
|
697
|
+
"description": "Row cap. Default 20, hard cap 500. page_size accepted as an alias."
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
"name": "sort_by",
|
|
701
|
+
"type": "string",
|
|
702
|
+
"required": false,
|
|
703
|
+
"description": "Sort metric. One of screen_page_views (default), total_users, avg_session_duration_seconds, bounce_rate, key_events. Unknown values fall back to screen_page_views.",
|
|
704
|
+
"example": "total_users"
|
|
705
|
+
}
|
|
706
|
+
],
|
|
707
|
+
"output_shape": "{\"property\": {\"property_id\": \"123456789\", \"data_freshness\": \"ISO\"}, \"rows\": [{\"page_path\": \"/products/x\", \"page_title\": \"...\", \"screen_page_views\": N, \"total_users\": N, \"avg_session_duration_seconds\": seconds, \"bounce_rate\": 0..1, \"key_events\": N}]}",
|
|
708
|
+
"see_also": [
|
|
709
|
+
"action:ga4/list_properties",
|
|
710
|
+
"action:ga4/get_property_overview",
|
|
711
|
+
"action:ga4/list_traffic_sources",
|
|
712
|
+
"action:ga4/list_events"
|
|
713
|
+
]
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
"id": "action:ga4/list_traffic_sources",
|
|
717
|
+
"namespace": "ga4",
|
|
718
|
+
"action": "list_traffic_sources",
|
|
719
|
+
"description": "Cached GA4 traffic source ranking for a date range; returns rows of session_source/medium/campaign with users, sessions, page views, and revenue.",
|
|
720
|
+
"long_description": "Primary use:\nAcquisition breakdown across session_source x session_medium x session_campaign_name.\n\nUse when:\n- The user asks where traffic comes from, top channels, organic vs paid, or campaign-level acquisition.\n- You need session-level acquisition metrics for a date range.\n\nDo not use when:\n- The user needs page-level data. Use list_top_pages and join client-side.\n- The user needs event-level data. Use list_events.\n- The user needs ad spend, CPA, or ROAS. Use ads.query_single_dimension.\n\nWorkflow:\n1. Call list_properties if property_id is unknown.\n2. Call this action with property_id, date range, and optional sort_by / limit.\n\nOutput semantics:\n- Default sort is sessions DESC.\n- rows[].total_revenue_micros is in micros; rows[].bounce_rate is a 0-1 ratio; rows[].avg_session_duration_seconds is in seconds.\n- rows[].key_events replaces legacy 'conversions' (GA4 v5+).\n- Returns [] when the property has no synced source data for the range.",
|
|
721
|
+
"capability_mode": "read",
|
|
722
|
+
"priority": "primary",
|
|
723
|
+
"requires_review": false,
|
|
724
|
+
"freshness_kind": "synced",
|
|
725
|
+
"input_params": [
|
|
726
|
+
{
|
|
727
|
+
"name": "property_id",
|
|
728
|
+
"type": "string",
|
|
729
|
+
"required": true,
|
|
730
|
+
"description": "Property id from list_properties.rows[].property_id. account_id is accepted as an alias.",
|
|
731
|
+
"example": "123456789"
|
|
732
|
+
},
|
|
733
|
+
{
|
|
734
|
+
"name": "date_start",
|
|
735
|
+
"type": "string",
|
|
736
|
+
"required": true,
|
|
737
|
+
"description": "Inclusive start date in YYYY-MM-DD format.",
|
|
738
|
+
"example": "2026-05-01"
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
"name": "date_end",
|
|
742
|
+
"type": "string",
|
|
743
|
+
"required": true,
|
|
744
|
+
"description": "Inclusive end date in YYYY-MM-DD format.",
|
|
745
|
+
"example": "2026-05-18"
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"name": "limit",
|
|
749
|
+
"type": "integer",
|
|
750
|
+
"required": false,
|
|
751
|
+
"description": "Row cap. Default 20, hard cap 500. page_size accepted as an alias."
|
|
752
|
+
},
|
|
753
|
+
{
|
|
754
|
+
"name": "sort_by",
|
|
755
|
+
"type": "string",
|
|
756
|
+
"required": false,
|
|
757
|
+
"description": "Sort metric. One of sessions (default), total_users, new_users, screen_page_views, bounce_rate, avg_session_duration_seconds, key_events, total_revenue_micros. Unknown values fall back to sessions.",
|
|
758
|
+
"example": "key_events"
|
|
759
|
+
}
|
|
760
|
+
],
|
|
761
|
+
"output_shape": "{\"property\": {\"property_id\": \"123456789\", \"data_freshness\": \"ISO\"}, \"rows\": [{\"session_source\": \"google\", \"session_medium\": \"organic\", \"session_campaign_name\": \"...\", \"total_users\": N, \"new_users\": N, \"sessions\": N, \"screen_page_views\": N, \"bounce_rate\": 0..1, \"avg_session_duration_seconds\": seconds, \"key_events\": N, \"total_revenue_micros\": micros}]}",
|
|
762
|
+
"see_also": [
|
|
763
|
+
"action:ga4/list_properties",
|
|
764
|
+
"action:ga4/list_top_pages",
|
|
765
|
+
"action:ga4/get_daily_trend",
|
|
766
|
+
"action:ga4/get_conversion_overview"
|
|
767
|
+
]
|
|
768
|
+
}
|
|
769
|
+
]
|
|
770
|
+
}
|