Search code examples
javagoogle-apigoogle-analytics-apigoogle-api-java-client

get clientId through Google analytics reporting API


I have noticed that in Dimensions & Metrics Explorer, the clientId assigned by google analytics itself to uniquely identify a device is not available to query through any of reporting APIs. Does someone know any other possible way which I may got missed, to get the clientId in the response body?

here is my sample code

DateRange dateRange = new DateRange();
dateRange.setStartDate("2019-04-20");
 dateRange.setEndDate("yesterday");

 // Create the Metrics object.
 Metric sessions = new Metric()
         .setExpression("ga:sessions")
         .setAlias("sessions");

 Dimension userId = new Dimension().setName("ga:dimension1");
 Dimension source = new Dimension().setName("ga:source");
 Dimension medium = new Dimension().setName("ga:medium");
 Dimension campaign = new Dimension().setName("ga:campaign");
 Dimension experimentId = new Dimension().setName("ga:experimentId");

 List<String> filterExpressionList = new ArrayList<>();

 filterExpressionList.add("426"); 
 filterExpressionList.add("359"); 
 filterExpressionList.add("13694118"); 
 filterExpressionList.add("28"); 


 DimensionFilter userIdFilter = new DimensionFilter();
 userIdFilter.setDimensionName("ga:dimension1").setExpressions(filterExpressionList).setCaseSensitive(false).setNot(false).setOperator("IN_LIST");

 List<DimensionFilter> dimensionFilterList = new ArrayList<>();
 dimensionFilterList.add(userIdFilter);

 DimensionFilterClause dimensionFilterClause = new DimensionFilterClause();
 dimensionFilterClause.setFilters(dimensionFilterList);

 List<DimensionFilterClause> dimensionFilterClauses = new ArrayList<>();
 dimensionFilterClauses.add(dimensionFilterClause);
 // Create the ReportRequest object.
 ReportRequest request = new ReportRequest()
         .setViewId(VIEW_ID)
         .setDateRanges(Arrays.asList(dateRange))
         .setMetrics(Arrays.asList(sessions))
         .setDimensions(Arrays.asList(userId,source,medium,campaign,experimentId)).setDimensionFilterClauses(dimensionFilterClauses);

 ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>();
 requests.add(request);

 // Create the GetReportsRequest object.
 GetReportsRequest getReport = new GetReportsRequest()
         .setReportRequests(requests);

 // Call the batchGet method.
 GetReportsResponse response = service.reports().batchGet(getReport).execute();

Solution

  • Assuming that you are referring to cid passed to the Google analycs data. The anwser is you cant. This is not a dimension returned by the google analytics api this dimension is only used for internal processing.

    Your best option would be to add it as a custom dimension and send it with every request you make.