Learn how to interface a Node.js application with the Google Analytics API by using the official googleapis
package. In this blog, we will use a JSON Web Token for authentication and provide examples of API interaction.
Note: uBlock Origin blocks the images on this post because they have the word “analytics” in the path. To view the images, please disable uBlock Origin for this page.
In this blog post, we will show some examples of how to use the Google Analytics API with Node.js.
Environment variables
Once you have downloaded the JSON Key file from Google, put the client_email
and private_key
values as environment variables, so they can be accessed through process.env.CLIENT_EMAIL
and process.env.PRIVATE_KEY
.
Add the user to Google Analytics
In these examples, we are using the Service to Service API, so you need to add the client_email
value to your Google Analytics profile. Go to the Admin panel and click on User Management for either a property or a view.
Add the email address that you found in the client_email
key in the JSON file.
Import the Google library
To get started, import the googleapis
package as follows:
const { google } = require('googleapis')
Remember to include the {}
around the google
object when importing it from the googleapis
library.
Define the scope
This line sets the scope for the Google Analytics API:
const scopes = 'https://www.googleapis.com/auth/analytics.readonly'
Google Analytics API offers several scopes, each with different levels of access. For now, we will choose https://www.googleapis.com/auth/analytics.readonly
to only view the data.
The Google Analytics Reporting API
Note: You can also use the Google Analytics Reporting API, which provides access to the same data but with a different set of methods and scope (https://www.googleapis.com/auth/analytics.readonly
and https://www.googleapis.com/auth/analytics
). However, we will not cover it in this blog.
Create the JWT
To create a JSON Web Token (JWT) for authentication, use the following code:
const jwt = new google.auth.JWT(process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes)
Perform a request
To make a request to the Google Analytics API, use the following code:
const view_id = 'XXXXX'
async function getData() {
const response = await jwt.authorize()
const result = await google.analytics('v3').data.ga.get({
'auth': jwt,
'ids': 'ga:' + view_id,
'start-date': '30daysAgo',
'end-date': 'today',
'metrics': 'ga:pageviews'
})
console.dir(result)
}
getData()
This code retrieves the number of pageviews in the last 30 days from the Google Analytics API using the specified view_id
. You can access the pageviews count in result.data.rows[0][0]
.
Metrics
In addition to pageviews, there are many other metrics available in the Google Analytics API. For example:
ga:pageviews
: Number of pageviewsga:users
: Number of unique usersga:sessions
: Number of sessionsga:organicSearches
: Number of organic searches
To get the number of sessions today, use the following code:
const result = await google.analytics('v3').data.ga.get({
...defaults,
'start-date': 'today',
'end-date': 'today',
'metrics': 'ga:sessions'
})
console.dir(result.data.rows[0][0])
To get the number of sessions from organic sources (search engines) today, add the filters
property:
const result = await google.analytics('v3').data.ga.get({
...defaults,
'start-date': 'today',
'end-date': 'today',
'metrics': 'ga:sessions',
'filters': 'ga:medium==organic',
})
To get the number of sessions yesterday, use the following code:
const result = await google.analytics('v3').data.ga.get({
...defaults,
'start-date': 'yesterday',
'end-date': 'yesterday',
'metrics': 'ga:sessions'
})
console.dir(result.data.rows[0][0])
To get the number of sessions in the last 30 days, use the following code:
const result = await google.analytics('v3').data.ga.get({
...defaults,
'start-date': '30daysAgo',
'end-date': 'today',
'metrics': 'ga:sessions'
})
console.dir(result.data.rows[0][0])
To get the browsers used in the last 30 days, use the following code:
const result = await google.analytics('v3').data.ga.get({
...defaults,
'start-date': '30daysAgo',
'end-date': 'today',
'dimensions': 'ga:browser',
'metrics': 'ga:sessions'
})
console.dir(result.data.rows.sort((a, b) => b[1] - a[1]))
To get the number of visitors using the Chrome browser, use the following code:
const result = await google.analytics('v3').data.ga.get({
...defaults,
'start-date': '30daysAgo',
'end-date': 'today',
'dimensions': 'ga:browser',
'metrics': 'ga:sessions',
'filters': 'ga:browser==Chrome',
})
console.dir(result.data.rows[0][1])
To get the sessions by traffic source, use the following code:
const result = await google.analytics('v3').data.ga.get({
...defaults,
'start-date': '30daysAgo',
'end-date': 'today',
'dimensions': 'ga:source',
'metrics': 'ga:sessions'
})
console.dir(result.data.rows.sort((a, b) => b[1] - a[1]))
The Google Analytics Real Time API
The Google Analytics Real Time API is currently in private beta and is not publicly accessible. For more information, refer to the official Google Analytics Real Time API reference.
Using the googleapis
package and the examples provided, you can easily interact with the Google Analytics API from your Node.js application. Now you have the tools to retrieve valuable data from your Google Analytics account.