Metrics by dimension and date range for a property.
Returns a customized report of your Google Analytics event data. Reports contain statistics derived from data collected by the Google Analytics tracking code. The data returned from the API is as a table with columns for the requested dimensions and metrics. Metrics are individual measurements of user activity on your property, such as active users or event count. Dimensions break down metrics across some common criteria, such as country or event name.
Job analytics.reports.run
telipot run google-analytics.reports.run \
--input-json '{"propertyId":"123456789","dateRanges":[{"startDate":"2026-09-01","endDate":"2026-09-30"}],"metrics":[{"name":"activeUsers"}]}' \
--quotePrice
Freegoogle-analytics.reports.run
Whose account it uses
What it sends
{
"propertyId": "123456789",
"dateRanges": [{"startDate":"2026-09-01","endDate":"2026-09-30"}],
"metrics": [{"name":"activeUsers"}]
}Your Google Analytics 4 login is added for you. Your AI never sees it.
What it costs
Free
no charge from the provider
Preview the price first. --quote runs nothing.
For developers · run it
Shell · runs the task on the named account
telipot run google-analytics.reports.run \
--input-json '{"propertyId":"123456789","dateRanges":[{"startDate":"2026-09-01","endDate":"2026-09-30"}],"metrics":[{"name":"activeUsers"}]}'propertyId string · required · path | The numeric id of a GA4 property, as google-analytics.accounts.summaries returns it after properties/ |
dateRanges array · required · body | Up to 4 ranges, each a startDate and an endDate, either YYYY-MM-DD or NdaysAgo, yesterday or today. With several, each row carries the index of its range. |
dimensions array · body | Up to 9 dimensions, each an object with the name of one the property offers, such as country or eventName; google-analytics.properties.metadata lists them |
metrics array · required · body | Up to 10 metrics, each an object with the name of one the property offers, such as activeUsers or eventCount; google-analytics.properties.metadata lists them |
dimensionFilter object · body | A filter expression over dimensions, applied before the metrics are aggregated |
metricFilter object · body | A filter expression over metrics, applied after the rows are aggregated, as a SQL HAVING clause is |
orderBys array · body | How the rows are ordered, each an order by a dimension or a metric |
limit integer · 1 to 250000 · default 10000 · body | Rows to return; a report can return fewer |
offset integer · at least 0 · default 0 · body | Zero-based index of the first row, for paging |
metricAggregations array · body | TOTAL, MINIMUM or MAXIMUM, each adding a row of that aggregate of every metric |
currencyCode string · body | An ISO 4217 code for currency metrics; the property's own currency when absent |
keepEmptyRows boolean · default false · body | Whether to return rows whose metrics are all 0 |
returnPropertyQuota boolean · default false · body | Whether to add the property's quota state to the answer |
dimensionHeaders object[] | |
metricHeaders object[] | |
rows object[] | Absent when no row matches. Each row holds the values of the dimension and metric headers, in their order. |
totals object[] | Present when metricAggregations asked for TOTAL |
maximums object[] | Present when metricAggregations asked for MAXIMUM |
minimums object[] | Present when metricAggregations asked for MINIMUM |
rowCount integer | Rows in the result before limit and offset |
metadata object | |
propertyQuota object | Present when returnPropertyQuota is true; each quota holds consumed and remaining |
kind string |
Full output schema · JSONNested fields and constraints
Output JSON Schema
{
"type": "object",
"properties": {
"dimensionHeaders": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
}
},
"metricHeaders": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string",
"description": "The kind of value such as TYPE_INTEGER or TYPE_CURRENCY"
}
}
}
},
"rows": {
"type": "array",
"description": "Absent when no row matches. Each row holds the values of the dimension and metric headers, in their order.",
"items": {
"type": "object",
"properties": {
"dimensionValues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
}
}
}
},
"metricValues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "A number as a string"
}
}
}
}
}
}
},
"totals": {
"type": "array",
"description": "Present when metricAggregations asked for TOTAL",
"items": {
"type": "object"
}
},
"maximums": {
"type": "array",
"description": "Present when metricAggregations asked for MAXIMUM",
"items": {
"type": "object"
}
},
"minimums": {
"type": "array",
"description": "Present when metricAggregations asked for MINIMUM",
"items": {
"type": "object"
}
},
"rowCount": {
"type": "integer",
"description": "Rows in the result before limit and offset"
},
"metadata": {
"type": "object",
"properties": {
"currencyCode": {
"type": "string"
},
"timeZone": {
"type": "string",
"description": "The property's time zone"
},
"dataLossFromOtherRow": {
"type": "boolean",
"description": "True when some dimension combinations are rolled into an (other) row"
},
"subjectToThresholding": {
"type": "boolean",
"description": "True when the report leaves out data below a privacy threshold"
},
"emptyReason": {
"type": "string"
}
}
},
"propertyQuota": {
"type": "object",
"description": "Present when returnPropertyQuota is true; each quota holds consumed and remaining"
},
"kind": {
"type": "string"
}
}
}A real answer
examples/google-analytics.reports.run.json
{
"dimensionHeaders": [
{
"name": "country"
}
],
"metricHeaders": [
{
"name": "activeUsers",
"type": "TYPE_INTEGER"
}
],
"rows": [
{
"dimensionValues": [
{
"value": "United States"
}
],
"metricValues": [
{
"value": "1842"
}
]
},
{
"dimensionValues": [
{
"value": "Germany"
}
],
"metricValues": [
{
"value": "311"
}
]
}
],
"rowCount": 37,
"metadata": {
"currencyCode": "USD",
"timeZone": "America/Los_Angeles"
},
"kind": "analyticsData#runReport"
}
