Google Analytics API quickstart

You can use the Data API or Admin API for this quickstart

Choose an API: Data API Admin API

You can authenticate with a user account or service account :

Choose an account type:

In this quickstart, you create and send a runReport request.

Here's a summary of the steps:

  1. Set up tools and access.
  2. Enable the API.
  3. Install an SDK.
  4. Make an API call.

Before you begin

  1. Create a service account .

  2. Create a Google Cloud VM instance .

  3. Install and initialize the gcloud CLI.

  4. To give your service account the necessary scopes and link it to your VM instance, run the following:

     gcloud  
    compute  
    instances  
    stop  
     VM-INSTANCE-NAME 
    gcloud  
    compute  
    instances  
    set-service-account  
     VM-INSTANCE-NAME 
      
     \ 
      
    --service-account  
     SERVICE-ACCOUNT-EMAIL 
      
     \ 
      
    --scopes = 
     "https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/analytics.readonly" 
     
    
  5. In the Google Analytics UI , grant the service account access to a Google Analytics property .

Enable the Data API

To select or create a Google Cloud project , and enable the API, click Enable the Google Analytics Data API v1.

Enable the Google Analytics Data API v1

Install an SDK

Install the SDK for your programming language.

Java

Java client library installation guide

PHP

PHP client library installation guide

Python

Python client library installation guide

Node.js

Node.js client library installation guide

.NET

.NET client library installation guide

Ruby

Ruby client library installation guide

Go

go get google.golang.org/genproto/googleapis/analytics/data/v1beta

REST

Configure your environment variables by entering the following. Replace PROJECT_ID with the ID of your Google Cloud project and PROPERTY_ID with the ID of your Google Analytics property.

  
 export 
  
 PROJECT_ID 
 = 
  PROJECT_ID 
 
  
 export 
  
 PROPERTY_ID 
 = 
  PROPERTY_ID 
 

Make an API call

To verify your setup and make an API call, run the following sample.

This sample calls the runReport method. The response lists active users for your property.

To install all the Analytics API code samples, see our GitHub .

Java

 import 
  
 com.google.analytics.data.v1beta.BetaAnalyticsDataClient 
 ; 
 import 
  
 com.google.analytics.data.v1beta.DateRange 
 ; 
 import 
  
 com.google.analytics.data.v1beta.Dimension 
 ; 
 import 
  
 com.google.analytics.data.v1beta.Metric 
 ; 
 import 
  
 com.google.analytics.data.v1beta.Row 
 ; 
 import 
  
 com.google.analytics.data.v1beta.RunReportRequest 
 ; 
 import 
  
 com.google.analytics.data.v1beta.RunReportResponse 
 ; 
 /** 
 * Google Analytics Data API sample quickstart application. 
 * 
 * <p>This application demonstrates the usage of the Analytics Data API using service account 
 * credentials. 
 * 
 * <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.QuickstartSample" 
 * }</pre> 
 */ 
 public 
  
 class 
 QuickstartSample 
  
 { 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 ... 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 /** 
 * TODO(developer): Replace this variable with your Google Analytics 4 property ID before 
 * running the sample. 
 */ 
  
 String 
  
 propertyId 
  
 = 
  
 "YOUR-GA4-PROPERTY-ID" 
 ; 
  
 sampleRunReport 
 ( 
 propertyId 
 ); 
  
 } 
  
 // This is an example snippet that calls the Google Analytics Data API and runs a simple report 
  
 // on the provided GA4 property id. 
  
 static 
  
 void 
  
 sampleRunReport 
 ( 
 String 
  
 propertyId 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 // Using a default constructor instructs the client to use the credentials 
  
 // specified in GOOGLE_APPLICATION_CREDENTIALS environment variable. 
  
 try 
  
 ( 
 BetaAnalyticsDataClient 
  
 analyticsData 
  
 = 
  
 BetaAnalyticsDataClient 
 . 
 create 
 ()) 
  
 { 
  
 RunReportRequest 
  
 request 
  
 = 
  
 RunReportRequest 
 . 
 newBuilder 
 () 
  
 . 
 setProperty 
 ( 
 "properties/" 
  
 + 
  
 propertyId 
 ) 
  
 . 
 addDimensions 
 ( 
 Dimension 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "city" 
 )) 
  
 . 
 addMetrics 
 ( 
 Metric 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "activeUsers" 
 )) 
  
 . 
 addDateRanges 
 ( 
 DateRange 
 . 
 newBuilder 
 (). 
 setStartDate 
 ( 
 "2020-03-31" 
 ). 
 setEndDate 
 ( 
 "today" 
 )) 
  
 . 
 build 
 (); 
  
 // Make the request. 
  
 RunReportResponse 
  
 response 
  
 = 
  
 analyticsData 
 . 
 runReport 
 ( 
 request 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Report result:" 
 ); 
  
 // Iterate through every row of the API response. 
  
 for 
  
 ( 
 Row 
  
 row 
  
 : 
  
 response 
 . 
 getRowsList 
 ()) 
  
 { 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
  
 "%s, %s%n" 
 , 
  
 row 
 . 
 getDimensionValues 
 ( 
 0 
 ). 
 getValue 
 (), 
  
 row 
 . 
 getMetricValues 
 ( 
 0 
 ). 
 getValue 
 ()); 
  
 } 
  
 } 
  
 } 
 } 
  

PHP

 require 'vendor/autoload.php'; 
 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\RunReportRequest; 
 /** 
 * TODO(developer): Replace this variable with your Google Analytics 4 
 *   property ID before running the sample. 
 */ 
 $property_id = 'YOUR-GA4-PROPERTY-ID'; 
 // Using a default constructor instructs the client to use the credentials 
 // specified in GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 $client = new BetaAnalyticsDataClient(); 
 // Make an API call. 
 $request = (new RunReportRequest()) 
 ->setProperty('properties/' . $property_id) 
 ->setDateRanges([ 
 new DateRange([ 
 'start_date' => '2020-03-31', 
 'end_date' => 'today', 
 ]), 
 ]) 
 ->setDimensions([new Dimension([ 
 'name' => 'city', 
 ]), 
 ]) 
 ->setMetrics([new Metric([ 
 'name' => 'activeUsers', 
 ]) 
 ]); 
 $response = $client->runReport($request); 
 // Print results of an API call. 
 print 'Report result: ' . PHP_EOL; 
 foreach ($response->getRows() as $row) { 
 print $row->getDimensionValues()[0]->getValue() 
 . ' ' . $row->getMetricValues()[0]->getValue() . PHP_EOL; 
 }  
 

Python

 from 
  
 google.analytics.data_v1beta 
  
 import 
 BetaAnalyticsDataClient 
 from 
  
 google.analytics.data_v1beta.types 
  
 import 
 ( 
 DateRange 
 , 
 Dimension 
 , 
 Metric 
 , 
 RunReportRequest 
 , 
 ) 
 def 
  
 sample_run_report 
 ( 
 property_id 
 = 
 "YOUR-GA4-PROPERTY-ID" 
 ): 
  
 """Runs a simple report on a Google Analytics 4 property.""" 
 # TODO(developer): Uncomment this variable and replace with your 
 #  Google Analytics 4 property ID before running the sample. 
 # property_id = "YOUR-GA4-PROPERTY-ID" 
 # Using a default constructor instructs the client to use the credentials 
 # specified in GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 BetaAnalyticsDataClient 
 () 
 request 
 = 
 RunReportRequest 
 ( 
 property 
 = 
 f 
 "properties/ 
 { 
 property_id 
 } 
 " 
 , 
 dimensions 
 = 
 [ 
 Dimension 
 ( 
 name 
 = 
 "city" 
 )], 
 metrics 
 = 
 [ 
 Metric 
 ( 
 name 
 = 
 "activeUsers" 
 )], 
 date_ranges 
 = 
 [ 
 DateRange 
 ( 
 start_date 
 = 
 "2020-03-31" 
 , 
 end_date 
 = 
 "today" 
 )], 
 ) 
 response 
 = 
 client 
 . 
 run_report 
 ( 
 request 
 ) 
 print 
 ( 
 "Report result:" 
 ) 
 for 
 row 
 in 
 response 
 . 
 rows 
 : 
 print 
 ( 
 row 
 . 
 dimension_values 
 [ 
 0 
 ] 
 . 
 value 
 , 
 row 
 . 
 metric_values 
 [ 
 0 
 ] 
 . 
 value 
 ) 
  

Node.js

  
 /** 
 * 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' 
 ); 
  
 // Using a default constructor instructs the client to use the credentials 
  
 // specified in GOOGLE_APPLICATION_CREDENTIALS environment variable. 
  
 const 
  
 analyticsDataClient 
  
 = 
  
 new 
  
 BetaAnalyticsDataClient 
 (); 
  
 // Runs a simple report. 
  
 async 
  
 function 
  
 runReport 
 () 
  
 { 
  
 const 
  
 [ 
 response 
 ] 
  
 = 
  
 await 
  
 analyticsDataClient 
 . 
 runReport 
 ({ 
  
 property 
 : 
  
 `properties/ 
 ${ 
 propertyId 
 } 
 ` 
 , 
  
 dateRanges 
 : 
  
 [ 
  
 { 
  
 startDate 
 : 
  
 '2020-03-31' 
 , 
  
 endDate 
 : 
  
 'today' 
 , 
  
 }, 
  
 ], 
  
 dimensions 
 : 
  
 [ 
  
 { 
  
 name 
 : 
  
 'city' 
 , 
  
 }, 
  
 ], 
  
 metrics 
 : 
  
 [ 
  
 { 
  
 name 
 : 
  
 'activeUsers' 
 , 
  
 }, 
  
 ], 
  
 }); 
  
 console 
 . 
 log 
 ( 
 'Report result:' 
 ); 
  
 response 
 . 
 rows 
 . 
 forEach 
 (( 
 row 
 ) 
  
 = 
>  
 { 
  
 console 
 . 
 log 
 ( 
 row 
 . 
 dimensionValues 
 [ 
 0 
 ], 
  
 row 
 . 
 metricValues 
 [ 
 0 
 ]); 
  
 }); 
  
 } 
  
 runReport 
 (); 
  

.NET

 using 
  
 Google 
 . 
 Analytics 
 . 
 Data 
 . 
 V1Beta 
 ; 
 using 
  
 System 
 ; 
 namespace 
  
 AnalyticsSamples 
 { 
  
 class 
  
 QuickStart 
  
 { 
  
 static 
  
 void 
  
 SampleRunReport 
 ( 
 string 
  
 propertyId 
 = 
 "YOUR-GA4-PROPERTY-ID" 
 ) 
  
 { 
  
 /** 
  
 * 
  
 TODO 
 ( 
 developer 
 ): 
  
 Uncomment 
  
 this 
  
 variable 
  
 and 
  
 replace 
  
 with 
  
 your 
  
 * 
  
 Google 
  
 Analytics 
  
 4 
  
 property 
  
 ID 
  
 before 
  
 running 
  
 the 
  
 sample 
 . 
  
 */ 
  
 // 
  
 propertyId 
  
 = 
  
 "YOUR-GA4-PROPERTY-ID" 
 ; 
  
 // 
  
 Using 
  
 a 
  
 default 
  
 constructor 
  
 instructs 
  
 the 
  
 client 
  
 to 
  
 use 
  
 the 
  
 credentials 
  
 // 
  
 specified 
  
 in 
  
 GOOGLE_APPLICATION_CREDENTIALS 
  
 environment 
  
 variable 
 . 
  
 BetaAnalyticsDataClient 
  
 client 
  
 = 
  
 BetaAnalyticsDataClient 
 . 
 Create 
 (); 
  
 // 
  
 Initialize 
  
 request 
  
 argument 
 ( 
 s 
 ) 
  
 RunReportRequest 
  
 request 
  
 = 
  
 new 
  
 RunReportRequest 
  
 { 
  
 Property 
  
 = 
  
 "properties/" 
  
 + 
  
 propertyId 
 , 
  
 Dimensions 
  
 = 
  
 { 
  
 new 
  
 Dimension 
 { 
  
 Name 
 = 
 "city" 
 }, 
  
 }, 
  
 Metrics 
  
 = 
  
 { 
  
 new 
  
 Metric 
 { 
  
 Name 
 = 
 "activeUsers" 
 }, 
  
 }, 
  
 DateRanges 
  
 = 
  
 { 
  
 new 
  
 DateRange 
 { 
  
 StartDate 
 = 
 "2020-03-31" 
 , 
  
 EndDate 
 = 
 "today" 
 }, 
  
 }, 
  
 }; 
  
 // 
  
 Make 
  
 the 
  
 request 
  
 RunReportResponse 
  
 response 
  
 = 
  
 client 
 . 
 RunReport 
 ( 
 request 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "Report result:" 
 ); 
  
 foreach 
 ( 
 Row 
  
 row 
  
 in 
  
 response 
 . 
 Rows 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "{0}, {1}" 
 , 
  
 row 
 . 
 DimensionValues 
 [ 
 0 
 ] 
 . 
 Value 
 , 
  
 row 
 . 
 MetricValues 
 [ 
 0 
 ] 
 . 
 Value 
 ); 
  
 } 
  
 } 
  
 static 
  
 int 
  
 Main 
 ( 
 string 
 [] 
  
 args 
 ) 
  
 { 
  
 if 
  
 ( 
 args 
 . 
 Length 
 > 
 0 
 ) 
  
 { 
  
 SampleRunReport 
 ( 
 args 
 [ 
 0 
 ]); 
  
 } 
  
 else 
  
 { 
  
 SampleRunReport 
 (); 
  
 } 
  
 return 
  
 0 
 ; 
  
 } 
  
 } 
 } 
  

REST

To send this request, run the curl command from the command line or include the REST call in your application.

curl  
-X  
POST  
 \ 
  
-H  
 "Authorization: Bearer 
 $( 
gcloud  
auth  
application-default  
print-access-token ) 
 " 
  
 \ 
  
-H  
 "x-goog-user-project: 
 ${ 
 PROJECT_ID 
 } 
 " 
  
 \ 
  
-H  
 "Content-Type: application/json" 
  
 \ 
  
-d  
 ' 
 { 
 "dateRanges": [ 
 { 
 "startDate": "2025-01-01", 
 "endDate": "2025-02-01" 
 } 
 ], 
 "dimensions": [ 
 { 
 "name": "country" 
 } 
 ], 
 "metrics": [ 
 { 
 "name": "activeUsers" 
 } 
 ] 
 }' 
  
https://analyticsdata.googleapis.com/v1beta/properties/ ${ 
 PROPERTY_ID 
 } 
:runReport

Here's a sample response in JSON:

  { 
  
 "dimensionHeaders" 
 : 
  
 [ 
  
 { 
  
 "name" 
 : 
  
 "country" 
  
 } 
  
 ], 
  
 "metricHeaders" 
 : 
  
 [ 
  
 { 
  
 "name" 
 : 
  
 "activeUsers" 
 , 
  
 "type" 
 : 
  
 "TYPE_INTEGER" 
  
 } 
  
 ], 
  
 "rows" 
 : 
  
 [ 
  
 { 
  
 "dimensionValues" 
 : 
  
 [ 
  
 { 
  
 "value" 
 : 
  
 "United States" 
  
 } 
  
 ], 
  
 "metricValues" 
 : 
  
 [ 
  
 { 
  
 "value" 
 : 
  
 "3242" 
  
 } 
  
 ] 
  
 }, 
  
 { 
  
 "dimensionValues" 
 : 
  
 [ 
  
 { 
  
 "value" 
 : 
  
 "(not set)" 
  
 } 
  
 ], 
  
 "metricValues" 
 : 
  
 [ 
  
 { 
  
 "value" 
 : 
  
 "3015" 
  
 } 
  
 ] 
  
 }, 
  
 { 
  
 "dimensionValues" 
 : 
  
 [ 
  
 { 
  
 "value" 
 : 
  
 "India" 
  
 } 
  
 ], 
  
 "metricValues" 
 : 
  
 [ 
  
 { 
  
 "value" 
 : 
  
 "805" 
  
 } 
  
 ] 
  
 } 
  
 ], 
  
 "rowCount" 
 : 
  
 3 
 , 
  
 "metadata" 
 : 
  
 { 
  
 "currencyCode" 
 : 
  
 "USD" 
 , 
  
 "timeZone" 
 : 
  
 "America/Los_Angeles" 
  
 }, 
  
 "kind" 
 : 
  
 "analyticsData#runReport" 
 } 
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: