Jairo Sánchez
Jairo Sánchez

Reputation: 1

Google Analytics API Revenue Discrepances

I have discrepancies in the revenue metric, between the data I collect from the Google Analytics API and the custom reports in the user interface.

The discrepancies for each value maintain the same rate, where the data collected through the API is greater than the data in the custom reports.

This is the body of the request I'm using:

{
"reportRequests":[
{
    "viewId":"xxxxxxxxxx",
    "dateRanges": [{"startDate":"2017-07-01","endDate":"2018-12-31"}],
    "metrics": [
        {"expression": "ga:transactionRevenue","alias": "transactionRevenue","formattingType": "CURRENCY"},
        {"expression": "ga:itemRevenue","alias": "itemRevenue","formattingType": "CURRENCY"},
        {"expression": "ga:productRevenuePerPurchase","alias": "productRevenuePerPurchase","formattingType": "CURRENCY"}
    ],
    "dimensions": [
        {"name": "ga:channelGrouping"},
        {"name": "ga:sourceMedium"},
        {"name": "ga:dateHour"},
        {"name": "ga:transactionId"},
        {"name": "ga:keyWord"}
    ],
    "pageSize": "10000"
}]}

This is an extract of the response:

{{  
"reports": [
    {
      "columnHeader": {
        "dimensions": [
          "ga:channelGrouping",
          "ga:sourceMedium",
          "ga:dateHour",
          "ga:transactionId",
          "ga:keyWord"
        ],
        "metricHeader": {
          "metricHeaderEntries": [
            {
              "name": "transactionRevenue",
              "type": "CURRENCY"
            },
            {
              "name": "itemRevenue",
              "type": "CURRENCY"
            },
            {
              "name": "productRevenuePerPurchase",
              "type": "CURRENCY"
            }
          ]
        }
      },
      "data": {
        "rows": [
          {
            "dimensions": [
              "(Other)",
              "bing / (not set)",
              "2018052216",
              "834042319461-01",
              "(not set)"
            ],
            "metrics": [
              {
                "values": [
                  "367.675436",
                  "316.55053699999996",
                  "316.55053699999996"
                ]
              }
            ]
          },
...

So, if I create a custom report in the Google Analytics user interface and look for the transaction ID 834042319461-01, I get the following result:

google Analytics custom report filtered by transaction id 834042319461-01

In the end I have a revenue value of 367.675436 in the API response, but a value of 333.12 in the custom report, its a 10.37% more in the value of the API. I get this 10.37% increase for all values.

¿Why I'm having these discrepance?

¿What would you recomend to do in order to solve these problem?

Thanks.

Upvotes: 0

Views: 1078

Answers (2)

AnkDasCo
AnkDasCo

Reputation: 1599

Because you are looking at a particular transaction ID, this might not be a sampling issue.

If the ratio is consistent, from your question it seems to be 10.37%. I believe this is the case of currency that you are using.

Try using local currency metric API calls when making monetary based calls.

For example -

ga:localTransactionRevenue instead of ga:transactionRevenue

Upvotes: 0

Max
Max

Reputation: 13334

My bet is that you're experiencing sampling (is your time range in the UI lower than in the API?): https://support.google.com/analytics/answer/2637192?hl=en

Sampling applies when:

  • you customize the reports
  • the number of sessions for the overall time range of the report (whether or not your query returns less sessions) exceeds 500K (GA) or 100M (GA 360)

The consequence is that:

  • the report will be based on a subset of the data (the % depends on the total number of sessions)
  • therefore your report data won't be as accurate as usual

What you can do to reduce sampling:

  • increase sample size (will only decrease sampling to a certain extend, but in most cases won't completely remove sampling). In UI it's done via the option at the top of the report, in the API it's done using the samplingLevel option
  • reduce time range
  • create filtered views so your reports contain the data you need without needed to customize reports

Upvotes: 1

Related Questions