This is a post on how to create custom Google Analytics Profile Segments for the purpose of removing referral spam (and there is increasingly soo much of it!) from GA reporting.
However if you want to use these new Custom Segments to filter results using Google Analytics API with a Service Account there are some challenges.
If you are retrieving GA results for many web sites you need to get the GA API to loop through each sites’s View / Profiles in your GA Account to retrieve the data for each.
The challenge is that each Profile has its own Custom Segment. In order to filter out referral spam completely, two types of filters are required. The ‘exclude’ filter which is same for all Profile, and the ‘include’ filter which is specific to each Profile as it refers to the Profile’s domain.
So that makes looping through each Profile a bit more challenging. You need a dictionary of each Profile’s Custom Segment Id so it can be applied for each Profile’s data.
These Custom Segment Id’s look something like “gaid::BXxFLXZfSAeXbm4RZuFd9w”
The Custom Segment Id needs to be used in the service.data.ga().get().execute() criteria.
data = service.data().ga().get( ids=ids, start_date=”2015-07-01″, end_date=”2015-07-19″, segment: “gaid::BXxFLXZfSAeXbm4RZuFd9w”, metrics=metrics ).execute()
It wasn’t easy to find these Custom Segment Id’s. First I tried looping through the segments() as follows:
# Authenticate and construct service. service = get_service(‘analytics’, ‘v3’, scope, key_file_location, service_account_email) segments = service.management().segments().list().execute() for segment in segments.get(‘items’, []): print ‘Segment ID ‘ + segment.get(‘id’) + ” – ” + segment.get(‘name’)
But that only retrieved the Standard Google Segments, but not the Custom Segments and apparently this is not possible with a Service Account.
So I found that you are able to see the Custom Segment Ids in the https://ga-dev-tools.appspot.com/qery-explorer.
But while you can see the Custom Segments here it wasn’t very helpful as you have to go one by one in the Segments criteria field. If you have many sites it will be time consuming.
Then I finally found the “stand alone explorer” at the bottom of the GA API Segments documentation page.
This outputs a json file containing all of the Segment details. Unfortunately this isn’t useful as a ready dictionary as it only has the segment details, not the account id. But it does have the Custom Segment Ids which can be used to create manual dictionary of Account Id and Segment Id that can be used in the loop.
Perhaps it might also be possible to do a reverse lookup and find the Custom Segment Id by looping through the Segments and finding those with the name.
Hope that helps someone!