Stay organized with collectionsSave and categorize content based on your preferences.
This guide explains how to create a basic report for your Analytics data using
the Google Analytics Data API v1. Reports from the Data API v1 are similar to
the reports you can generate in theReportssection of theGoogle Analytics
UI.
This guide covers core reporting, the general reporting feature of the Data
API. The Data API v1 also has specializedRealtime
reportingandFunnel reporting.
runReportis the recommended method
for queries, and is used in all examples throughout this guide. Seeadvanced
featuresfor an overview of other core reporting methods. Try theQuery Explorerto test your
queries.
Reports overview
Reportsare tables of event data for aGoogle Analytics property. Each report table has the
dimensions and metrics requested in your query, with data in individual rows.
Usefiltersto return only rows matching a certain condition, andpaginationto navigate through results.
Here's a sample report table that shows one dimension (Country) and one metric
(activeUsers):
Country
Active Users
Japan
2541
France
12
Specify a data source
EveryrunReportrequest requires you to specify aGoogle Analytics property
ID. The Analytics property you specify is used as the dataset for
that query. Here's an example:
POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport
The response from this request includes only data from the Analytics property
you specify as theGA_PROPERTY_ID.
If you use theData API client libraries, specify the data
source in thepropertyparameter, in the form ofproperties/GA_PROPERTY_ID. See thequick start guidefor examples of using the
client libraries.
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.DimensionHeader;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.MetricHeader;importcom.google.analytics.data.v1beta.Row;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;/*** Google Analytics Data API sample application demonstrating the creation of a basic report.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportSample"* }</pre>*/publicclassRunReportSample{publicstaticvoidmain(String...args)throwsException{/*** TODO(developer): Replace this variable with your Google Analytics 4 property ID before* running the sample.*/StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReport(propertyId);}// Runs a report of active users grouped by country.staticvoidsampleRunReport(StringpropertyId)throwsException{// Using a default constructor instructs the client to use the credentials// specified in GOOGLE_APPLICATION_CREDENTIALS environment variable.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDimensions(Dimension.newBuilder().setName("country")).addMetrics(Metric.newBuilder().setName("activeUsers")).addDateRanges(DateRange.newBuilder().setStartDate("2020-09-01").setEndDate("2020-09-15")).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);printRunResponseResponse(response);}}// Prints results of a runReport call.staticvoidprintRunResponseResponse(RunReportResponseresponse){System.out.printf("%s rows received%n",response.getRowsList().size());for(DimensionHeaderheader:response.getDimensionHeadersList()){System.out.printf("Dimension header name: %s%n",header.getName());}for(MetricHeaderheader:response.getMetricHeadersList()){System.out.printf("Metric header name: %s (%s)%n",header.getName(),header.getType());}System.out.println("Report result:");for(Rowrow:response.getRowsList()){System.out.printf("%s, %s%n",row.getDimensionValues(0).getValue(),row.getMetricValues(0).getValue());}}}
fromgoogle.analytics.data_v1betaimportBetaAnalyticsDataClientfromgoogle.analytics.data_v1beta.typesimport(DateRange,Dimension,Metric,MetricType,RunReportRequest,)defrun_sample():"""Runs the sample."""# TODO(developer): Replace this variable with your Google Analytics 4# property ID before running the sample.property_id="YOUR-GA4-PROPERTY-ID"run_report(property_id)defrun_report(property_id="YOUR-GA4-PROPERTY-ID"):"""Runs a report of active users grouped by country."""client=BetaAnalyticsDataClient()request=RunReportRequest(property=f"properties/{property_id}",dimensions=[Dimension(name="country")],metrics=[Metric(name="activeUsers")],date_ranges=[DateRange(start_date="2020-09-01",end_date="2020-09-15")],)response=client.run_report(request)print_run_report_response(response)defprint_run_report_response(response):"""Prints results of a runReport call."""print(f"{response.row_count}rows received")fordimensionHeaderinresponse.dimension_headers:print(f"Dimension header name:{dimensionHeader.name}")formetricHeaderinresponse.metric_headers:metric_type=MetricType(metricHeader.type_).nameprint(f"Metric header name:{metricHeader.name}({metric_type})")print("Report result:")forrowIdx,rowinenumerate(response.rows):print(f"\nRow{rowIdx}")fori,dimension_valueinenumerate(row.dimension_values):dimension_name=response.dimension_headers[i].nameprint(f"{dimension_name}:{dimension_value.value}")fori,metric_valueinenumerate(row.metric_values):metric_name=response.metric_headers[i].nameprint(f"{metric_name}:{metric_value.value}")
// TODO(developer): Uncomment this variable and replace with your// Google Analytics 4 property ID before running the sample.// propertyId = 'YOUR-GA4-PROPERTY-ID';// Imports the Google Analytics Data API client library.const{BetaAnalyticsDataClient}=require('@google-analytics/data');// Initialize client that will be used to send requests. This client only// needs to be created once, and can be reused for multiple requests.constanalyticsDataClient=newBetaAnalyticsDataClient();// Runs a report of active users grouped by country.asyncfunctionrunReport(){const[response]=awaitanalyticsDataClient.runReport({property:`properties/${propertyId}`,dimensions:[{name:'country',},],metrics:[{name:'activeUsers',},],dateRanges:[{startDate:'2020-09-01',endDate:'2020-09-15',},],});printRunReportResponse(response);}// Prints results of a runReport call.functionprintRunReportResponse(response){console.log(`${response.rowCount}rows received`);response.dimensionHeaders.forEach(dimensionHeader=>{console.log(`Dimension header name:${dimensionHeader.name}`);});response.metricHeaders.forEach(metricHeader=>{console.log(`Metric header name:${metricHeader.name}(${metricHeader.type})`);});console.log('Report result:');response.rows.forEach(row=>{console.log(`${row.dimensionValues[0].value},${row.metricValues[0].value}`);});}runReport();
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;/*** Google Analytics Data API sample application demonstrating the creation of a basic report.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithMultipleMetricsSample"* }</pre>*/publicclassRunReportWithMultipleMetricsSample{publicstaticvoidmain(String...args)throwsException{// TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReportWithMultipleMetrics(propertyId);}// Runs a report of active users, new users and total revenue grouped by date dimension.staticvoidsampleRunReportWithMultipleMetrics(StringpropertyId)throwsException{// Initialize client that will be used to send requests. This client only needs to be created// once, and can be reused for multiple requests. After completing all of your requests, call// the "close" method on the client to safely clean up any remaining background resources.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDimensions(Dimension.newBuilder().setName("date")).addMetrics(Metric.newBuilder().setName("activeUsers")).addMetrics(Metric.newBuilder().setName("newUsers")).addMetrics(Metric.newBuilder().setName("totalRevenue")).addDateRanges(DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("today")).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);}}}
use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;use Google\Analytics\Data\V1beta\DateRange;use Google\Analytics\Data\V1beta\Dimension;use Google\Analytics\Data\V1beta\Metric;use Google\Analytics\Data\V1beta\MetricType;use Google\Analytics\Data\V1beta\RunReportRequest;use Google\Analytics\Data\V1beta\RunReportResponse;/*** @param string $propertyID Your GA-4 Property ID* Runs a report of active users grouped by three metrics.*/function run_report_with_multiple_metrics(string $propertyId){// Create an instance of the Google Analytics Data API client library.$client = new BetaAnalyticsDataClient();// Make an API call.$request = (new RunReportRequest())->setProperty('properties/' . $propertyId)->setDimensions([new Dimension(['name' => 'date'])])->setMetrics([new Metric(['name' => 'activeUsers']),new Metric(['name' => 'newUsers']),new Metric(['name' => 'totalRevenue'])])->setDateRanges([new DateRange(['start_date' => '7daysAgo','end_date' => 'today',])]);$response = $client->runReport($request);printRunReportResponseWithMultipleMetrics($response);}/*** Print results of a runReport call.* @param RunReportResponse $response*/function printRunReportResponseWithMultipleMetrics(RunReportResponse $response){printf('%s rows received%s', $response->getRowCount(), PHP_EOL);foreach ($response->getDimensionHeaders() as $dimensionHeader) {printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);}foreach ($response->getMetricHeaders() as $metricHeader) {printf('Metric header name: %s (%s)' . PHP_EOL,$metricHeader->getName(),MetricType::name($metricHeader->getType()));}print 'Report result: ' . PHP_EOL;foreach ($response->getRows() as $row) {printf('%s %s' . PHP_EOL,$row->getDimensionValues()[0]->getValue(),$row->getMetricValues()[0]->getValue());}}
fromgoogle.analytics.data_v1betaimportBetaAnalyticsDataClientfromgoogle.analytics.data_v1beta.typesimport(DateRange,Dimension,Metric,RunReportRequest,)fromrun_reportimportprint_run_report_responsedefrun_sample():"""Runs the sample."""# TODO(developer): Replace this variable with your Google Analytics 4# property ID before running the sample.property_id="YOUR-GA4-PROPERTY-ID"run_report_with_multiple_metrics(property_id)defrun_report_with_multiple_metrics(property_id="YOUR-GA4-PROPERTY-ID"):"""Runs a report of active users, new users and total revenue grouped bydate dimension."""client=BetaAnalyticsDataClient()# Runs a report of active users grouped by three dimensions.request=RunReportRequest(property=f"properties/{property_id}",dimensions=[Dimension(name="date")],metrics=[Metric(name="activeUsers"),Metric(name="newUsers"),Metric(name="totalRevenue"),],date_ranges=[DateRange(start_date="7daysAgo",end_date="today")],)response=client.run_report(request)print_run_report_response(response)
// TODO(developer): Uncomment this variable and replace with your// Google Analytics 4 property ID before running the sample.// propertyId = 'YOUR-GA4-PROPERTY-ID';// Imports the Google Analytics Data API client library.const{BetaAnalyticsDataClient}=require('@google-analytics/data');// Initialize client that will be used to send requests. This client only// needs to be created once, and can be reused for multiple requests.constanalyticsDataClient=newBetaAnalyticsDataClient();// Runs a report of active users grouped by three metrics.asyncfunctionrunReportWithMultipleMetrics(){const[response]=awaitanalyticsDataClient.runReport({property:`properties/${propertyId}`,dimensions:[{name:'date',},],metrics:[{name:'activeUsers',},{name:'newUsers',},{name:'totalRevenue',},],dateRanges:[{startDate:'7daysAgo',endDate:'today',},],});printRunReportResponse(response);}runReportWithMultipleMetrics();// Prints results of a runReport call.functionprintRunReportResponse(response){console.log(`${response.rowCount}rows received`);response.dimensionHeaders.forEach(dimensionHeader=>{console.log(`Dimension header name:${dimensionHeader.name}`);});response.metricHeaders.forEach(metricHeader=>{console.log(`Metric header name:${metricHeader.name}(${metricHeader.type})`);});console.log('Report result:');response.rows.forEach(row=>{console.log(`${row.dimensionValues[0].value},${row.metricValues[0].value}`);});}
Here's a sample response that shows 1135 Active Users, 512 New Users, and
73.0841 Total Revenue in your Analytics property's currency on the date20231025(October 25, 2023).
Dimensionsare qualitative attributes you can use
to group and filter your data. For example, thecitydimension indicates the
city, likeParisorNew York, where each event originated. Dimensions are
optional forrunReportrequests, and you can use up to nine dimensions per
request.
See theAPI dimensionsfor a full list of the
dimensions you can use to group and filter your data.
Group
Here's a sample request that groups active users into three dimensions:
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;/*** Google Analytics Data API sample application demonstrating the creation of a basic report.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithMultipleDimensionsSample"* }</pre>*/publicclassRunReportWithMultipleDimensionsSample{publicstaticvoidmain(String...args)throwsException{// TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReportWithMultipleDimensions(propertyId);}// Runs a report of active users grouped by three dimensions.staticvoidsampleRunReportWithMultipleDimensions(StringpropertyId)throwsException{// Initialize client that will be used to send requests. This client only needs to be created// once, and can be reused for multiple requests. After completing all of your requests, call// the "close" method on the client to safely clean up any remaining background resources.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDimensions(Dimension.newBuilder().setName("country")).addDimensions(Dimension.newBuilder().setName("region")).addDimensions(Dimension.newBuilder().setName("city")).addMetrics(Metric.newBuilder().setName("activeUsers")).addDateRanges(DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("today")).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);}}}
use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;use Google\Analytics\Data\V1beta\DateRange;use Google\Analytics\Data\V1beta\Dimension;use Google\Analytics\Data\V1beta\Metric;use Google\Analytics\Data\V1beta\MetricType;use Google\Analytics\Data\V1beta\RunReportRequest;use Google\Analytics\Data\V1beta\RunReportResponse;/*** @param string $propertyID Your GA-4 Property ID* Runs a report of active users grouped by three dimensions.*/function run_report_with_multiple_dimensions(string $propertyId){// Create an instance of the Google Analytics Data API client library.$client = new BetaAnalyticsDataClient();// Make an API call.$request = (new RunReportRequest())->setProperty('properties/' . $propertyId)->setDimensions([new Dimension(['name' => 'country']),new Dimension(['name' => 'region']),new Dimension(['name' => 'city']),])->setMetrics([new Metric(['name' => 'activeUsers'])])->setDateRanges([new DateRange(['start_date' => '7daysAgo','end_date' => 'today',])]);$response = $client->runReport($request);printRunReportResponseWithMultipleDimensions($response);}/*** Print results of a runReport call.* @param RunReportResponse $response*/function printRunReportResponseWithMultipleDimensions(RunReportResponse $response){printf('%s rows received%s', $response->getRowCount(), PHP_EOL);foreach ($response->getDimensionHeaders() as $dimensionHeader) {printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);}foreach ($response->getMetricHeaders() as $metricHeader) {printf('Metric header name: %s (%s)' . PHP_EOL,$metricHeader->getName(),MetricType::name($metricHeader->getType()));}print 'Report result: ' . PHP_EOL;foreach ($response->getRows() as $row) {printf('%s %s' . PHP_EOL,$row->getDimensionValues()[0]->getValue(),$row->getMetricValues()[0]->getValue());}}
fromgoogle.analytics.data_v1betaimportBetaAnalyticsDataClientfromgoogle.analytics.data_v1beta.typesimport(DateRange,Dimension,Metric,RunReportRequest,)fromrun_reportimportprint_run_report_responsedefrun_sample():"""Runs the sample."""# TODO(developer): Replace this variable with your Google Analytics 4# property ID before running the sample.property_id="YOUR-GA4-PROPERTY-ID"run_report_with_multiple_dimensions(property_id)defrun_report_with_multiple_dimensions(property_id="YOUR-GA4-PROPERTY-ID"):"""Runs a report of active users grouped by three dimensions."""client=BetaAnalyticsDataClient()request=RunReportRequest(property=f"properties/{property_id}",dimensions=[Dimension(name="country"),Dimension(name="region"),Dimension(name="city"),],metrics=[Metric(name="activeUsers")],date_ranges=[DateRange(start_date="7daysAgo",end_date="today")],)response=client.run_report(request)print_run_report_response(response)
// TODO(developer): Uncomment this variable and replace with your// Google Analytics 4 property ID before running the sample.// propertyId = 'YOUR-GA4-PROPERTY-ID';// Imports the Google Analytics Data API client library.const{BetaAnalyticsDataClient}=require('@google-analytics/data');// Initialize client that will be used to send requests. This client only// needs to be created once, and can be reused for multiple requests.constanalyticsDataClient=newBetaAnalyticsDataClient();// Runs a report of active users grouped by three dimensions.asyncfunctionrunReportWithMultipleDimensions(){const[response]=awaitanalyticsDataClient.runReport({property:`properties/${propertyId}`,dimensions:[{name:'country',},{name:'region',},{name:'city',},],metrics:[{name:'activeUsers',},],dateRanges:[{startDate:'7daysAgo',endDate:'today',},],});printRunReportResponse(response);}runReportWithMultipleDimensions();// Prints results of a runReport call.functionprintRunReportResponse(response){console.log(`${response.rowCount}rows received`);response.dimensionHeaders.forEach(dimensionHeader=>{console.log(`Dimension header name:${dimensionHeader.name}`);});response.metricHeaders.forEach(metricHeader=>{console.log(`Metric header name:${metricHeader.name}(${metricHeader.type})`);});console.log('Report result:');response.rows.forEach(row=>{console.log(`${row.dimensionValues[0].value},${row.metricValues[0].value}`);});}
Here's a sample report row for the previous request. This row shows that there
were 47 active users during the specified date range with events from Cape Town,
South Africa.
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.Filter;importcom.google.analytics.data.v1beta.FilterExpression;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;/*** Google Analytics Data API sample application demonstrating the usage of dimension and metric* filters in a report.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.dimension_filter* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithDimensionFilterSample"* }</pre>*/publicclassRunReportWithDimensionFilterSample{publicstaticvoidmain(String...args)throwsException{// TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReportWithDimensionFilter(propertyId);}// Runs a report using a dimension filter. The call returns a time series report of `eventCount`// when `eventName` is `first_open` for each date.// This sample uses relative date range values.// See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange// for more information.staticvoidsampleRunReportWithDimensionFilter(StringpropertyId)throwsException{// Initialize client that will be used to send requests. This client only needs to be created// once, and can be reused for multiple requests. After completing all of your requests, call// the "close" method on the client to safely clean up any remaining background resources.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDimensions(Dimension.newBuilder().setName("date")).addMetrics(Metric.newBuilder().setName("eventCount")).addDateRanges(DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("yesterday")).setDimensionFilter(FilterExpression.newBuilder().setFilter(Filter.newBuilder().setFieldName("eventName").setStringFilter(Filter.StringFilter.newBuilder().setValue("first_open")))).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);}}}
use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;use Google\Analytics\Data\V1beta\DateRange;use Google\Analytics\Data\V1beta\Dimension;use Google\Analytics\Data\V1beta\Filter;use Google\Analytics\Data\V1beta\Filter\StringFilter;use Google\Analytics\Data\V1beta\FilterExpression;use Google\Analytics\Data\V1beta\Metric;use Google\Analytics\Data\V1beta\MetricType;use Google\Analytics\Data\V1beta\RunReportRequest;use Google\Analytics\Data\V1beta\RunReportResponse;/*** @param string $propertyId Your GA-4 Property ID* Runs a report using a dimension filter. The call returns a time series* report of `eventCount` when `eventName` is `first_open` for each date.* This sample uses relative date range values. See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange* for more information.*/function run_report_with_dimension_filter(string $propertyId){// Create an instance of the Google Analytics Data API client library.$client = new BetaAnalyticsDataClient();// Make an API call.$request = (new RunReportRequest())->setProperty('properties/' . $propertyId)->setDimensions([new Dimension(['name' => 'date'])])->setMetrics([new Metric(['name' => 'eventCount'])])->setDateRanges([new DateRange(['start_date' => '7daysAgo','end_date' => 'yesterday',])])->setDimensionFilter(new FilterExpression(['filter' => new Filter(['field_name' => 'eventName','string_filter' => new StringFilter(['value' => 'first_open']),]),]));$response = $client->runReport($request);printRunReportResponseWithDimensionFilter($response);}/*** Print results of a runReport call.* @param RunReportResponse $response*/function printRunReportResponseWithDimensionFilter(RunReportResponse $response){printf('%s rows received%s', $response->getRowCount(), PHP_EOL);foreach ($response->getDimensionHeaders() as $dimensionHeader) {printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);}foreach ($response->getMetricHeaders() as $metricHeader) {printf('Metric header name: %s (%s)' . PHP_EOL,$metricHeader->getName(),MetricType::name($metricHeader->getType()));}print 'Report result: ' . PHP_EOL;foreach ($response->getRows() as $row) {printf('%s %s' . PHP_EOL,$row->getDimensionValues()[0]->getValue(),$row->getMetricValues()[0]->getValue());}}
fromgoogle.analytics.data_v1betaimportBetaAnalyticsDataClientfromgoogle.analytics.data_v1beta.typesimport(DateRange,Dimension,Filter,FilterExpression,Metric,RunReportRequest,)fromrun_reportimportprint_run_report_responsedefrun_sample():"""Runs the sample."""# TODO(developer): Replace this variable with your Google Analytics 4# property ID before running the sample.property_id="YOUR-GA4-PROPERTY-ID"run_report_with_dimension_filter(property_id)defrun_report_with_dimension_filter(property_id="YOUR-GA4-PROPERTY-ID"):"""Runs a report using a dimension filter. The call returns a time seriesreport of `eventCount` when `eventName` is `first_open` for each date.This sample uses relative date range values. See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRangefor more information."""client=BetaAnalyticsDataClient()request=RunReportRequest(property=f"properties/{property_id}",dimensions=[Dimension(name="date")],metrics=[Metric(name="eventCount")],date_ranges=[DateRange(start_date="7daysAgo",end_date="yesterday")],dimension_filter=FilterExpression(filter=Filter(field_name="eventName",string_filter=Filter.StringFilter(value="first_open"),)),)response=client.run_report(request)print_run_report_response(response)
// TODO(developer): Uncomment this variable and replace with your// Google Analytics 4 property ID before running the sample.// propertyId = 'YOUR-GA4-PROPERTY-ID';// Imports the Google Analytics Data API client library.const{BetaAnalyticsDataClient}=require('@google-analytics/data');// Initialize client that will be used to send requests. This client only// needs to be created once, and can be reused for multiple requests.constanalyticsDataClient=newBetaAnalyticsDataClient();// Runs a report using a dimension filter. The call returns a time series// report of `eventCount` when `eventName` is `first_open` for each date.// This sample uses relative date range values. See// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange// for more information.asyncfunctionrunReportWithDimensionFilter(){const[response]=awaitanalyticsDataClient.runReport({property:`properties/${propertyId}`,dimensions:[{name:'date',},],metrics:[{name:'eventCount',},],dateRanges:[{startDate:'7daysAgo',endDate:'yesterday',},],dimensionFilter:{filter:{fieldName:'eventName',stringFilter:{value:'first_open',},},},});printRunReportResponse(response);}runReportWithDimensionFilter();// Prints results of a runReport call.functionprintRunReportResponse(response){console.log(`${response.rowCount}rows received`);response.dimensionHeaders.forEach(dimensionHeader=>{console.log(`Dimension header name:${dimensionHeader.name}`);});response.metricHeaders.forEach(metricHeader=>{console.log(`Metric header name:${metricHeader.name}(${metricHeader.type})`);});console.log('Report result:');response.rows.forEach(row=>{console.log(`${row.dimensionValues[0].value},${row.metricValues[0].value}`);});}
Here's anotherFilterExpressionexample,
whereandGroupincludes only data that meets all criteria in the expressions
list. ThisdimensionFilterselects for when bothbrowserisChromeandcountryIdisUS:
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.Filter;importcom.google.analytics.data.v1beta.FilterExpression;importcom.google.analytics.data.v1beta.FilterExpressionList;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;/*** Google Analytics Data API sample application demonstrating the usage of dimension and metric* filters in a report.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.dimension_filter* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithMultipleDimensionFiltersSample"* }</pre>*/publicclassRunReportWithMultipleDimensionFiltersSample{publicstaticvoidmain(String...args)throwsException{// TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReportWithMultipleDimensionFilters(propertyId);}// Runs a report using multiple dimension filters joined as `and_group` expression. The filter// selects for when both `browser` is `Chrome` and `countryId` is `US`.// This sample uses relative date range values.// See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange// for more information.staticvoidsampleRunReportWithMultipleDimensionFilters(StringpropertyId)throwsException{// Initialize client that will be used to send requests. This client only needs to be created// once, and can be reused for multiple requests. After completing all of your requests, call// the "close" method on the client to safely clean up any remaining background resources.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDimensions(Dimension.newBuilder().setName("browser")).addMetrics(Metric.newBuilder().setName("activeUsers")).addDateRanges(DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("yesterday")).setDimensionFilter(FilterExpression.newBuilder().setAndGroup(FilterExpressionList.newBuilder().addExpressions(FilterExpression.newBuilder().setFilter(Filter.newBuilder().setFieldName("browser").setStringFilter(Filter.StringFilter.newBuilder().setValue("Chrome")))).addExpressions(FilterExpression.newBuilder().setFilter(Filter.newBuilder().setFieldName("countryId").setStringFilter(Filter.StringFilter.newBuilder().setValue("US")))))).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);}}}
use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;use Google\Analytics\Data\V1beta\DateRange;use Google\Analytics\Data\V1beta\Dimension;use Google\Analytics\Data\V1beta\Filter;use Google\Analytics\Data\V1beta\Filter\StringFilter;use Google\Analytics\Data\V1beta\FilterExpression;use Google\Analytics\Data\V1beta\FilterExpressionList;use Google\Analytics\Data\V1beta\Metric;use Google\Analytics\Data\V1beta\MetricType;use Google\Analytics\Data\V1beta\RunReportRequest;use Google\Analytics\Data\V1beta\RunReportResponse;/*** @param string $propertyId Your GA-4 Property ID* Runs a report using multiple dimension filters joined as `and_group`* expression. The filter selects for when both `browser` is `Chrome` and* `countryId` is `US`.* This sample uses relative date range values. See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange* for more information.*/function run_report_with_multiple_dimension_filters(string $propertyId){// Create an instance of the Google Analytics Data API client library.$client = new BetaAnalyticsDataClient();// Make an API call.$request = (new RunReportRequest())->setProperty('properties/' . $propertyId)->setDimensions([new Dimension(['name' => 'browser'])])->setMetrics([new Metric(['name' => 'activeUsers'])])->setDateRanges([new DateRange(['start_date' => '7daysAgo','end_date' => 'yesterday',]),])->setDimensionFilter(new FilterExpression(['and_group' => new FilterExpressionList(['expressions' => [new FilterExpression(['filter' => new Filter(['field_name' => 'browser','string_filter' => new StringFilter(['value' => 'Chrome',])]),]),new FilterExpression(['filter' => new Filter(['field_name' => 'countryId','string_filter' => new StringFilter(['value' => 'US',])]),]),],]),]));$response = $client->runReport($request);printRunReportResponseWithMultipleDimensionFilters($response);}/*** Print results of a runReport call.* @param RunReportResponse $response*/function printRunReportResponseWithMultipleDimensionFilters(RunReportResponse $response){printf('%s rows received%s', $response->getRowCount(), PHP_EOL);foreach ($response->getDimensionHeaders() as $dimensionHeader) {printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);}foreach ($response->getMetricHeaders() as $metricHeader) {printf('Metric header name: %s (%s)' . PHP_EOL,$metricHeader->getName(),MetricType::name($metricHeader->getType()));}print 'Report result: ' . PHP_EOL;foreach ($response->getRows() as $row) {printf('%s %s' . PHP_EOL,$row->getDimensionValues()[0]->getValue(),$row->getMetricValues()[0]->getValue());}}
fromgoogle.analytics.data_v1betaimportBetaAnalyticsDataClientfromgoogle.analytics.data_v1beta.typesimport(DateRange,Dimension,Filter,FilterExpression,FilterExpressionList,Metric,RunReportRequest,)fromrun_reportimportprint_run_report_responsedefrun_sample():"""Runs the sample."""# TODO(developer): Replace this variable with your Google Analytics 4# property ID before running the sample.property_id="YOUR-GA4-PROPERTY-ID"run_report_with_multiple_dimension_filters(property_id)defrun_report_with_multiple_dimension_filters(property_id="YOUR-GA4-PROPERTY-ID"):"""Runs a report using multiple dimension filters joined as `and_group`expression. The filter selects for when both `browser` is `Chrome` and`countryId` is `US`.This sample uses relative date range values. See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRangefor more information."""client=BetaAnalyticsDataClient()request=RunReportRequest(property=f"properties/{property_id}",dimensions=[Dimension(name="browser")],metrics=[Metric(name="activeUsers")],date_ranges=[DateRange(start_date="7daysAgo",end_date="yesterday")],dimension_filter=FilterExpression(and_group=FilterExpressionList(expressions=[FilterExpression(filter=Filter(field_name="browser",string_filter=Filter.StringFilter(value="Chrome"),)),FilterExpression(filter=Filter(field_name="countryId",string_filter=Filter.StringFilter(value="US"),)),])),)response=client.run_report(request)print_run_report_response(response)
// TODO(developer): Uncomment this variable and replace with your// Google Analytics 4 property ID before running the sample.// propertyId = 'YOUR-GA4-PROPERTY-ID';// Imports the Google Analytics Data API client library.const{BetaAnalyticsDataClient}=require('@google-analytics/data');// Initialize client that will be used to send requests. This client only// needs to be created once, and can be reused for multiple requests.constanalyticsDataClient=newBetaAnalyticsDataClient();// Runs a report using multiple dimension filters joined as `and_group`// expression. The filter selects for when both `browser` is `Chrome` and// `countryId` is `US`.// This sample uses relative date range values. See// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange// for more information.asyncfunctionrunReportWithMultipleDimensionFilters(){const[response]=awaitanalyticsDataClient.runReport({property:`properties/${propertyId}`,dimensions:[{name:'browser',},],metrics:[{name:'activeUsers',},],dateRanges:[{startDate:'7daysAgo',endDate:'yesterday',},],dimensionFilter:{andGroup:{expressions:[{filter:{fieldName:'browser',stringFilter:{value:'Chrome',},},},{filter:{fieldName:'countryId',stringFilter:{value:'US',},},},],},},});printRunReportResponse(response);}runReportWithMultipleDimensionFilters();// Prints results of a runReport call.functionprintRunReportResponse(response){console.log(`${response.rowCount}rows received`);response.dimensionHeaders.forEach(dimensionHeader=>{console.log(`Dimension header name:${dimensionHeader.name}`);});response.metricHeaders.forEach(metricHeader=>{console.log(`Metric header name:${metricHeader.name}(${metricHeader.type})`);});console.log('Report result:');response.rows.forEach(row=>{console.log(`${row.dimensionValues[0].value},${row.metricValues[0].value}`);});}
AnorGroupincludes data that meets any of the criteria in the expressions
list.
AnotExpressionexcludes data that matches its inner expression. Here's adimensionFilterthat returns data for only when thepageTitleisn'tMy
Homepage. The report shows event data for everypageTitleother thanMy
Homepage:
HTTP
..."dimensionFilter": {"notExpression": {"filter": {"fieldName": "pageTitle","stringFilter": {"value": "My Homepage"}}}},...
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.Filter;importcom.google.analytics.data.v1beta.FilterExpression;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;/*** Google Analytics Data API sample application demonstrating the usage of dimension and metric* filters in a report.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.dimension_filter* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithDimensionExcludeFilterSample"* }</pre>*/publicclassRunReportWithDimensionExcludeFilterSample{publicstaticvoidmain(String...args)throwsException{// TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReportWithDimensionExcludeFilter(propertyId);}// Runs a report using a filter with `not_expression`. The dimension filter selects for when// `pageTitle` is not `My Homepage`.// This sample uses relative date range values.// See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange// for more information.staticvoidsampleRunReportWithDimensionExcludeFilter(StringpropertyId)throwsException{// Initialize client that will be used to send requests. This client only needs to be created// once, and can be reused for multiple requests. After completing all of your requests, call// the "close" method on the client to safely clean up any remaining background resources.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDimensions(Dimension.newBuilder().setName("pageTitle")).addMetrics(Metric.newBuilder().setName("sessions")).addDateRanges(DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("yesterday")).setDimensionFilter(FilterExpression.newBuilder().setNotExpression(FilterExpression.newBuilder().setFilter(Filter.newBuilder().setFieldName("pageTitle").setStringFilter(Filter.StringFilter.newBuilder().setValue("My Homepage"))))).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);}}}
use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;use Google\Analytics\Data\V1beta\DateRange;use Google\Analytics\Data\V1beta\Dimension;use Google\Analytics\Data\V1beta\Filter;use Google\Analytics\Data\V1beta\Filter\StringFilter;use Google\Analytics\Data\V1beta\FilterExpression;use Google\Analytics\Data\V1beta\Metric;use Google\Analytics\Data\V1beta\MetricType;use Google\Analytics\Data\V1beta\RunReportRequest;use Google\Analytics\Data\V1beta\RunReportResponse;/*** Runs a report using a filter with `not_expression`. The dimension filter* selects for when `pageTitle` is not `My Homepage`.* This sample uses relative date range values. See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange* for more information.* @param string $propertyId Your GA-4 Property ID*/function run_report_with_dimension_exclude_filter(string $propertyId){// Create an instance of the Google Analytics Data API client library.$client = new BetaAnalyticsDataClient();// Make an API call.$request = (new RunReportRequest())->setProperty('properties/' . $propertyId)->setDimensions([new Dimension(['name' => 'pageTitle'])])->setMetrics([new Metric(['name' => 'sessions'])])->setDateRanges([new DateRange(['start_date' => '7daysAgo','end_date' => 'yesterday',])])->setDimensionFilter(new FilterExpression(['not_expression' => new FilterExpression(['filter' => new Filter(['field_name' => 'pageTitle','string_filter' => new StringFilter(['value' => 'My Homepage',]),]),]),]));$response = $client->runReport($request);printRunReportResponseWithDimensionExcludeFilter($response);}/*** Print results of a runReport call.* @param RunReportResponse $response*/function printRunReportResponseWithDimensionExcludeFilter(RunReportResponse $response){printf('%s rows received%s', $response->getRowCount(), PHP_EOL);foreach ($response->getDimensionHeaders() as $dimensionHeader) {printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);}foreach ($response->getMetricHeaders() as $metricHeader) {printf('Metric header name: %s (%s)' . PHP_EOL,$metricHeader->getName(),MetricType::name($metricHeader->getType()));}print 'Report result: ' . PHP_EOL;foreach ($response->getRows() as $row) {printf('%s %s' . PHP_EOL,$row->getDimensionValues()[0]->getValue(),$row->getMetricValues()[0]->getValue());}}
fromgoogle.analytics.data_v1betaimportBetaAnalyticsDataClientfromgoogle.analytics.data_v1beta.typesimport(DateRange,Dimension,Filter,FilterExpression,Metric,RunReportRequest,)fromrun_reportimportprint_run_report_responsedefrun_sample():"""Runs the sample."""# TODO(developer): Replace this variable with your Google Analytics 4# property ID before running the sample.property_id="YOUR-GA4-PROPERTY-ID"run_report_with_dimension_exclude_filter(property_id)defrun_report_with_dimension_exclude_filter(property_id="YOUR-GA4-PROPERTY-ID"):"""Runs a report using a filter with `not_expression`. The dimension filterselects for when `pageTitle` is not `My Homepage`.This sample uses relative date range values. See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRangefor more information."""client=BetaAnalyticsDataClient()request=RunReportRequest(property=f"properties/{property_id}",dimensions=[Dimension(name="pageTitle")],metrics=[Metric(name="sessions")],date_ranges=[DateRange(start_date="7daysAgo",end_date="yesterday")],dimension_filter=FilterExpression(not_expression=FilterExpression(filter=Filter(field_name="pageTitle",string_filter=Filter.StringFilter(value="My Homepage"),))),)response=client.run_report(request)print_run_report_response(response)
// TODO(developer): Uncomment this variable and replace with your// Google Analytics 4 property ID before running the sample.// propertyId = 'YOUR-GA4-PROPERTY-ID';// Imports the Google Analytics Data API client library.const{BetaAnalyticsDataClient}=require('@google-analytics/data');// Initialize client that will be used to send requests. This client only// needs to be created once, and can be reused for multiple requests.constanalyticsDataClient=newBetaAnalyticsDataClient();// Runs a report using a filter with `not_expression`. The dimension filter// selects for when `pageTitle` is not `My Homepage`.// This sample uses relative date range values. See// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange// for more information.asyncfunctionrunReportWithDimensionExcludeFilter(){const[response]=awaitanalyticsDataClient.runReport({property:`properties/${propertyId}`,dimensions:[{name:'pageTitle',},],metrics:[{name:'sessions',},],dateRanges:[{startDate:'7daysAgo',endDate:'yesterday',},],dimensionFilter:{notExpression:{filter:{fieldName:'pageTitle',stringFilter:{value:'My Homepage',},},},},});printRunReportResponse(response);}runReportWithDimensionExcludeFilter();// Prints results of a runReport call.functionprintRunReportResponse(response){console.log(`${response.rowCount}rows received`);response.dimensionHeaders.forEach(dimensionHeader=>{console.log(`Dimension header name:${dimensionHeader.name}`);});response.metricHeaders.forEach(metricHeader=>{console.log(`Metric header name:${metricHeader.name}(${metricHeader.type})`);});console.log('Report result:');response.rows.forEach(row=>{console.log(`${row.dimensionValues[0].value},${row.metricValues[0].value}`);});}
AninListFiltermatches data for any of the values in the list. Here's adimensionFilterthat returns event data whereeventNameis any ofpurchase,in_app_purchase, andapp_store_subscription_renew:
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.Filter;importcom.google.analytics.data.v1beta.FilterExpression;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;importjava.util.ArrayList;/*** Google Analytics Data API sample application demonstrating the usage of dimension and metric* filters in a report.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.dimension_filter* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithDimensionInListFilterSample"* }</pre>*/publicclassRunReportWithDimensionInListFilterSample{publicstaticvoidmain(String...args)throwsException{// TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReportWithDimensionInListFilter(propertyId);}// Runs a report using a dimension filter with `in_list_filter` expression. The filter selects for// when `eventName` is set to one of three event names specified in the query.// This sample uses relative date range values.// See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange// for more information.staticvoidsampleRunReportWithDimensionInListFilter(StringpropertyId)throwsException{// Initialize client that will be used to send requests. This client only needs to be created// once, and can be reused for multiple requests. After completing all of your requests, call// the "close" method on the client to safely clean up any remaining background resources.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDimensions(Dimension.newBuilder().setName("eventName")).addMetrics(Metric.newBuilder().setName("sessions")).addDateRanges(DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("yesterday")).setDimensionFilter(FilterExpression.newBuilder().setFilter(Filter.newBuilder().setFieldName("eventName").setInListFilter(Filter.InListFilter.newBuilder().addAllValues(newArrayList<String>(){{add("purchase");add("in_app_purchase");add("app_store_subscription_renew");}}).build()))).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);}}}
use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;use Google\Analytics\Data\V1beta\DateRange;use Google\Analytics\Data\V1beta\Dimension;use Google\Analytics\Data\V1beta\Filter;use Google\Analytics\Data\V1beta\Filter\InListFilter;use Google\Analytics\Data\V1beta\FilterExpression;use Google\Analytics\Data\V1beta\Metric;use Google\Analytics\Data\V1beta\MetricType;use Google\Analytics\Data\V1beta\RunReportRequest;use Google\Analytics\Data\V1beta\RunReportResponse;/*** Runs a report using a dimension filter with `in_list_filter` expression.* The filter selects for when `eventName` is set to one of three event names* specified in the query.* This sample uses relative date range values. See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange* for more information.* @param string $propertyId Your GA-4 Property ID*/function run_report_with_dimension_in_list_filter(string $propertyId){// Create an instance of the Google Analytics Data API client library.$client = new BetaAnalyticsDataClient();// Make an API call.$request = (new RunReportRequest())->setProperty('properties/' . $propertyId)->setDimensions([new Dimension(['name' => 'eventName'])])->setMetrics([new Metric(['name' => 'sessions'])])->setDateRanges([new DateRange(['start_date' => '7daysAgo','end_date' => 'yesterday',])])->setDimensionFilter(new FilterExpression(['filter' => new Filter(['field_name' => 'eventName','in_list_filter' => new InListFilter(['values' => ['purchase','in_app_purchase','app_store_subscription_renew',],]),]),]));$response = $client->runReport($request);printRunReportResponseWithDimensionInListFilter($response);}/*** Print results of a runReport call.* @param RunReportResponse $response*/function printRunReportResponseWithDimensionInListFilter(RunReportResponse $response){printf('%s rows received%s', $response->getRowCount(), PHP_EOL);foreach ($response->getDimensionHeaders() as $dimensionHeader) {printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);}foreach ($response->getMetricHeaders() as $metricHeader) {printf('Metric header name: %s (%s)' . PHP_EOL,$metricHeader->getName(),MetricType::name($metricHeader->getType()));}print 'Report result: ' . PHP_EOL;foreach ($response->getRows() as $row) {printf('%s %s' . PHP_EOL,$row->getDimensionValues()[0]->getValue(),$row->getMetricValues()[0]->getValue());}}
fromgoogle.analytics.data_v1betaimportBetaAnalyticsDataClientfromgoogle.analytics.data_v1beta.typesimport(DateRange,Dimension,Filter,FilterExpression,Metric,RunReportRequest,)fromrun_reportimportprint_run_report_responsedefrun_sample():"""Runs the sample."""# TODO(developer): Replace this variable with your Google Analytics 4# property ID before running the sample.property_id="YOUR-GA4-PROPERTY-ID"run_report_with_dimension_in_list_filter(property_id)defrun_report_with_dimension_in_list_filter(property_id="YOUR-GA4-PROPERTY-ID"):"""Runs a report using a dimension filter with `in_list_filter` expression.The filter selects for when `eventName` is set to one of three event namesspecified in the query.This sample uses relative date range values. See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRangefor more information."""client=BetaAnalyticsDataClient()request=RunReportRequest(property=f"properties/{property_id}",dimensions=[Dimension(name="eventName")],metrics=[Metric(name="sessions")],date_ranges=[DateRange(start_date="7daysAgo",end_date="yesterday")],dimension_filter=FilterExpression(filter=Filter(field_name="eventName",in_list_filter=Filter.InListFilter(values=["purchase","in_app_purchase","app_store_subscription_renew",]),)),)response=client.run_report(request)print_run_report_response(response)
// TODO(developer): Uncomment this variable and replace with your// Google Analytics 4 property ID before running the sample.// propertyId = 'YOUR-GA4-PROPERTY-ID';// Imports the Google Analytics Data API client library.const{BetaAnalyticsDataClient}=require('@google-analytics/data');// Initialize client that will be used to send requests. This client only// needs to be created once, and can be reused for multiple requests.constanalyticsDataClient=newBetaAnalyticsDataClient();// Runs a report using a dimension filter with `in_list_filter` expression.// The filter selects for when `eventName` is set to one of three event names// specified in the query.// This sample uses relative date range values. See// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange// for more information.asyncfunctionrunReportWithDimensionInListFilter(){const[response]=awaitanalyticsDataClient.runReport({property:`properties/${propertyId}`,dimensions:[{name:'eventName',},],metrics:[{name:'sessions',},],dateRanges:[{startDate:'7daysAgo',endDate:'yesterday',},],dimensionFilter:{filter:{fieldName:'eventName',inListFilter:{values:['purchase','in_app_purchase','app_store_subscription_renew',],},},},});printRunReportResponse(response);}runReportWithDimensionInListFilter();// Prints results of a runReport call.functionprintRunReportResponse(response){console.log(`${response.rowCount}rows received`);response.dimensionHeaders.forEach(dimensionHeader=>{console.log(`Dimension header name:${dimensionHeader.name}`);});response.metricHeaders.forEach(metricHeader=>{console.log(`Metric header name:${metricHeader.name}(${metricHeader.type})`);});console.log('Report result:');response.rows.forEach(row=>{console.log(`${row.dimensionValues[0].value},${row.metricValues[0].value}`);});}
By default, the report contains only the first 10,000 rows of event data. To
view up to 250,000 rows in the report, you can include"limit": 250000in
theRunReportRequest.
For reports with more than 250,000 rows, you have to send a series of requests
and page through the results. For example, here's a request for the first
250,000 rows:
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;/*** Google Analytics Data API sample application demonstrating the use of pagination to retrieve* large result sets.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.offset* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithPaginationSample"* }</pre>*/publicclassRunReportWithPaginationSample{publicstaticvoidmain(String...args)throwsException{// TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReportWithPagination(propertyId);}// Runs a report several times, each time retrieving a portion of result using pagination.staticvoidsampleRunReportWithPagination(StringpropertyId)throwsException{// Initialize client that will be used to send requests. This client only needs to be created// once, and can be reused for multiple requests. After completing all of your requests, call// the "close" method on the client to safely clean up any remaining background resources.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDateRanges(DateRange.newBuilder().setStartDate("365daysAgo").setEndDate("yesterday")).addDimensions(Dimension.newBuilder().setName("firstUserSource")).addDimensions(Dimension.newBuilder().setName("firstUserMedium")).addDimensions(Dimension.newBuilder().setName("firstUserCampaignName")).addMetrics(Metric.newBuilder().setName("sessions")).addMetrics(Metric.newBuilder().setName("keyEvents")).addMetrics(Metric.newBuilder().setName("totalRevenue")).setLimit(100000).setOffset(0).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);RunReportSample.printRunResponseResponse(response);// Run the same report with a different offset value to retrieve the second page of a// response.request=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDateRanges(DateRange.newBuilder().setStartDate("365daysAgo").setEndDate("yesterday")).addDimensions(Dimension.newBuilder().setName("firstUserSource")).addDimensions(Dimension.newBuilder().setName("firstUserMedium")).addDimensions(Dimension.newBuilder().setName("firstUserCampaignName")).addMetrics(Metric.newBuilder().setName("sessions")).addMetrics(Metric.newBuilder().setName("keyEvents")).addMetrics(Metric.newBuilder().setName("totalRevenue")).setLimit(100000).setOffset(100000).build();// Make the request.response=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);}}}
TherowCountparameter in the response indicates the total number of rows,
independent of thelimitandoffsetvalues in the request. For example, if
the response shows"rowCount": 572345, you need three requests:
offset
limit
Range of row indexes returned
0
250000
[ 0, 249999]
250000
250000
[250000, 499999]
500000
250000
[500000, 572345]
Here's a sample request for the next 250,000 rows. All other parameters, such asdateRange,dimensions, andmetricsshould be the same as the first
request.
request=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDateRanges(DateRange.newBuilder().setStartDate("365daysAgo").setEndDate("yesterday")).addDimensions(Dimension.newBuilder().setName("firstUserSource")).addDimensions(Dimension.newBuilder().setName("firstUserMedium")).addDimensions(Dimension.newBuilder().setName("firstUserCampaignName")).addMetrics(Metric.newBuilder().setName("sessions")).addMetrics(Metric.newBuilder().setName("keyEvents")).addMetrics(Metric.newBuilder().setName("totalRevenue")).setLimit(100000).setOffset(100000).build();// Make the request.response=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);
$rowsReceived = count($response->getRows());$totalRows = $response->getRowCount();// Run the same report with an increased offset value to retrieve each additional// page until all rows are received.while ($rowsReceived < $totalRows) {$request = $request->setOffset($rowsReceived);$requestCount++;printf('Sending request #%d' . PHP_EOL, $requestCount);$response = $client->runReport($request);$rowsReceived += count($response->getRows());printRunReportResponseWithPagination($response, $requestCount);}
importcom.google.analytics.data.v1beta.BetaAnalyticsDataClient;importcom.google.analytics.data.v1beta.DateRange;importcom.google.analytics.data.v1beta.Dimension;importcom.google.analytics.data.v1beta.Metric;importcom.google.analytics.data.v1beta.RunReportRequest;importcom.google.analytics.data.v1beta.RunReportResponse;/*** Google Analytics Data API sample application demonstrating the usage of date ranges in a report.** <p>See* https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.date_ranges* for more information.** <p>Before you start the application, please review the comments starting with "TODO(developer)"* and update the code to use correct values.** <p>To run this sample using Maven:** <pre>{@code* cd google-analytics-data* mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithDateRangesSample"* }</pre>*/publicclassRunReportWithDateRangesSample{publicstaticvoidmain(String...args)throwsException{// TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.StringpropertyId="YOUR-GA4-PROPERTY-ID";sampleRunReportWithDateRanges(propertyId);}// Runs a report using two date ranges.staticvoidsampleRunReportWithDateRanges(StringpropertyId)throwsException{// Initialize client that will be used to send requests. This client only needs to be created// once, and can be reused for multiple requests. After completing all of your requests, call// the "close" method on the client to safely clean up any remaining background resources.try(BetaAnalyticsDataClientanalyticsData=BetaAnalyticsDataClient.create()){RunReportRequestrequest=RunReportRequest.newBuilder().setProperty("properties/"+propertyId).addDateRanges(DateRange.newBuilder().setStartDate("2019-08-01").setEndDate("2019-08-14")).addDateRanges(DateRange.newBuilder().setStartDate("2020-08-01").setEndDate("2020-08-14")).addDimensions(Dimension.newBuilder().setName("platform")).addMetrics(Metric.newBuilder().setName("activeUsers")).build();// Make the request.RunReportResponseresponse=analyticsData.runReport(request);// Prints the response using a method in RunReportSample.javaRunReportSample.printRunResponseResponse(response);}}}
fromgoogle.analytics.data_v1betaimportBetaAnalyticsDataClientfromgoogle.analytics.data_v1beta.typesimport(DateRange,Dimension,Metric,RunReportRequest,)fromrun_reportimportprint_run_report_responsedefrun_sample():"""Runs the sample."""# TODO(developer): Replace this variable with your Google Analytics 4# property ID before running the sample.property_id="YOUR-GA4-PROPERTY-ID"run_report_with_date_ranges(property_id)defrun_report_with_date_ranges(property_id="YOUR-GA4-PROPERTY-ID"):"""Runs a report using two date ranges."""client=BetaAnalyticsDataClient()request=RunReportRequest(property=f"properties/{property_id}",date_ranges=[DateRange(start_date="2019-08-01",end_date="2019-08-14"),DateRange(start_date="2020-08-01",end_date="2020-08-14"),],dimensions=[Dimension(name="platform")],metrics=[Metric(name="activeUsers")],)response=client.run_report(request)print_run_report_response(response)
// TODO(developer): Uncomment this variable and replace with your// Google Analytics 4 property ID before running the sample.// propertyId = 'YOUR-GA4-PROPERTY-ID';// Imports the Google Analytics Data API client library.const{BetaAnalyticsDataClient}=require('@google-analytics/data');// Initialize client that will be used to send requests. This client only// needs to be created once, and can be reused for multiple requests.constanalyticsDataClient=newBetaAnalyticsDataClient();// Runs a report using two date ranges.asyncfunctionrunReportWithDateRanges(){const[response]=awaitanalyticsDataClient.runReport({property:`properties/${propertyId}`,dateRanges:[{startDate:'2019-08-01',endDate:'2019-08-14',},{startDate:'2020-08-01',endDate:'2020-08-14',},],dimensions:[{name:'platform',},],metrics:[{name:'activeUsers',},],});printRunReportResponse(response);}runReportWithDateRanges();// Prints results of a runReport call.functionprintRunReportResponse(response){console.log(`${response.rowCount}rows received`);response.dimensionHeaders.forEach(dimensionHeader=>{console.log(`Dimension header name:${dimensionHeader.name}`);});response.metricHeaders.forEach(metricHeader=>{console.log(`Metric header name:${metricHeader.name}(${metricHeader.type})`);});console.log('Report result:');response.rows.forEach(row=>{console.log(`${row.dimensionValues[0].value},${row.metricValues[0].value}`);});}
When you include multipledateRangesin a request, adateRangecolumn is
automatically added to the response. When thedateRangecolumn isdate_range_0, that row's data is for the first date range. When thedateRangecolumn isdate_range_1, that row's data is for the second date
range.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-05-15 UTC."],[[["\u003cp\u003eThis guide demonstrates how to use the Google Analytics Data API (v1beta) to generate basic reports similar to the Google Analytics UI, focusing on features like filtering, pagination, and multiple date ranges.\u003c/p\u003e\n"],["\u003cp\u003eYou can refine report data using filters like \u003ccode\u003enot_expression\u003c/code\u003e to exclude specific data and \u003ccode\u003einListFilter\u003c/code\u003e to include data matching a list of values.\u003c/p\u003e\n"],["\u003cp\u003ePagination is achieved with \u003ccode\u003elimit\u003c/code\u003e and \u003ccode\u003eoffset\u003c/code\u003e parameters, allowing you to retrieve large datasets in manageable chunks.\u003c/p\u003e\n"],["\u003cp\u003eReports can include multiple date ranges for comparison by specifying multiple \u003ccode\u003eDateRange\u003c/code\u003e objects within the \u003ccode\u003eRunReportRequest\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eCode samples in Java, PHP, Python, and Node.js illustrate how to implement these functionalities.\u003c/p\u003e\n"]]],["The document details how to use the Google Analytics Data API to create reports by employing the `runReport` method. This involves specifying a property ID, `dateRanges`, `dimensions` (qualitative attributes), and `metrics` (quantitative measurements). Key functionalities include grouping data by multiple dimensions, filtering using `FilterExpression` (with `andGroup` and `notExpression`), and retrieving reports with multiple metrics. The API supports pagination (using `limit` and `offset`) and multiple date ranges. Code examples are provided in Java, PHP, Python, and Node.js.\n"],null,[]]