Query viewability and invalid traffic metrics

Overview

Ads Data Hub is currently seeking MRC accreditation. Once approved, this accreditation will apply to Ads Data Hub-enabled campaigns in the Google Ads, Display and Video 360, and Youtube Reserve platforms. The instructions below provide examples of how to query both valid viewability traffic, and invalid traffic via the API.

Note that MRC-accredited TrueView view metrics require the use of the ADH API, as there is no associated templated query. Additionally, TrueView view metrics shouldn't be confused with viewability metrics.

Select the buying door that you want to query viewability metrics for:

Query viewability metrics using the UI

The templated viewability query can be used to provide MRC-accreditation-submitted metrics.

MRC accreditation is binary—your results can be accredited, or not—and applies to your entire results table. In BigQuery, the label adh-mrc-accredited is applied to all MRC accredited results.

To run an MRC-accreditation-submitted query:

  1. Follow the instructions on how to create a query, ensuring that you select YouTube Reserve as the buying door and Video Viewability as the query template.
  2. Click the Run button next to Use template.

Query invalid traffic and viewability metrics using the API

Invalid traffic and viewability metrics can be retrieved from the ADH API using the generateIvtReport and startAnalysis endpoints. This section covers how to send a request to this endpoint using the Python client library.

Follow the setup and authorization/authentication instructions in the API quickstart.

After replacing the following fields with information relevant to your account, you can run the query below to retrieve an invalid traffic report for your YouTube Reserve campaigns:

  • Client secrets file
  • Customer ID
  • API key
  • Order IDs
  • Timezone

Sample code

Invalid traffic

from __future__ import print_function
import json
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

flow = InstalledAppFlow.from_client_secrets_file('YOUR_CLIENT_SECRETS.json',
                                                 ['https://www.googleapis.com/auth/adsdatahub'])
creds = flow.run_local_server(port=0)
service = build('adsdatahub', 'v1', credentials=creds,
                developerKey='YOUR_API_KEY',
                discoveryServiceUrl='https://adsdatahub.googleapis.com/$discovery/rest?version=v1&labels=')

body = {
    'ads_data_customer_id': YOUR_CUSTOMER_ID,
    'start_date': {
        'year': 2019,
        'month': 12,
        'day': 15
    },
    'end_date': {
        'year': 2019,
        'month': 12,
        'day': 20
    },
    'time_zone': 'YOUR_TIMEZONE',
    'yt_reserve_dimensions': {
        'order_ids': [YOUR_ORDER_IDS]
    },
    'dest_table': 'YOUR_DESTINATION_TABLE'
}

resp = service.customers().generateIvtReport(name='customers/YOUR_CUSTOMER_ID,
                                             body=body).execute()
print(json.dumps(resp))

Viewability metrics

from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
import json

flow = InstalledAppFlow.from_client_secrets_file('YOUR_CLIENT_SECRETS.json',
                                                 ['https://www.googleapis.com/auth/adsdatahub'])
creds = flow.run_local_server(port=0)
service = build('adsdatahub', 'v1', credentials=creds,
                developerKey='YOUR_API_KEY',
                discoveryServiceUrl='https://adsdatahub.googleapis.com/$discovery/rest?version=v1&labels=')

name = 'customers/global/analysisQueries/ad88e8562a8f4baa9c8522945fe95522'
body = {
  'spec': {
    'ads_data_customer_id': YOUR_CUSTOMER_ID,
    'start_date': {
      'year': 2019,
      'month': 12,
      'day': 15
    },
    'end_date': {
      'year': 2019,
      'month': 12,
      'day': 20
    },
    'time_zone': 'YOUR_TIMEZONE',
    'parameter_values': {
      'line_item_ids': {
        'array_value': {
          'values': [
            {
              'value': 'YOUR_LINE_ITEM_ID'
            },
          ]
        }
      }
    }
  },
  'dest_table': 'YOUR_DESTINATION_TABLE',
  'customer_id': YOUR_CUSTOMER_ID
}

resp = service.customers().analysisQueries().start(name=name,body=body).execute()
print(json.dumps(resp))