Julian Bez
Senior Software Engineer

Query Google Analytics API with a service account in Python

This article is from 2013. Technologies and best practices have evolved since then.

I recently needed to display a visitor counter on a website by some client's weird demand. Maybe the 90s are coming back. Anyway, I thought it makes sense to query Google Analytics directly, but Google's API example were not really helping. After some digging around, I finally found a solution. You'll need oauth2client and google-api-python-client for it to work. Then follow these instructions on Google Developers to create a service account that only has access to the API without the need for a human to request some oauth token. It will give you a private key to work with.

from apiclient.discovery import build
    from oauth2client.client import SignedJwtAssertionCredentials
    import httplib2
    
    def get_analytics_visitors():
        f = file('privatekey.p12', 'rb')
        key = f.read()
        f.close()
        credentials = SignedJwtAssertionCredentials('xxx@developer.gserviceaccount.com',
                                                    key,
                                                    scope='https://www.googleapis.com/auth/analytics.readonly')
        http = httplib2.Http()
        http = credentials.authorize(http)
        service = build('analytics', 'v3', http=http)
        data_query = service.data().ga().get(**{
            'ids': 'ga:YOUR_PROFILE_ID_NOT_UA',
            'metrics': 'ga:visitors',
            'start_date': '2013-01-01',
            'end_date': '2015-01-01'
            })
        feed = data_query.execute()
        return feed['rows'][0][0]