Digital Platform API - Buyer Reach and Frequency report

The Buyer Reach and Frequency report shows you the information associated with two parameters: "reach" and "frequency". "reach" is the number of unique devices or persons exposed to ads. "frequency" is the average number of times each unique device or person was exposed to advertisements. It helps to draw meaningful conclusions about the impact of cross device on conversion use cases. In short, buyers can have an insight on how cross device impacted the number of times a single person saw their ads across all their devices using this report as this report shows historical reach and average frequency on your buying.

The Buyer Reach and Frequency Report offers flexible filtering to analyze unique devices by facilitating below procedure:

  • Pull a basic running total of unique devices for their active Line Items or Insertion Orders.
  • Pull unique devices for these objects over a defined period of time (for example, past week).
  • You can filter and group on specific criteria, which will provide an accurate unique device count across the specified criteria. For example, the count of unique devices across Line Items A, B, and D, in the US and Canada, for the past month.

Time frame

The report_interval field in the JSON request can be set to one of the following:

  • custom
  • today
  • last_hour
  • last_24_hours
  • yesterday
  • last_48_hours
  • last_2_days
  • last_7_days
  • last_14_days
  • last_30_days
  • last_month
  • month_to_date
  • quarter_to_date
  • lifetime

Data retention period

Data in this report is retained for 90 days.

Note

To run a report for a custom time frame, set the start_date and end_date fields in your report request. For more details about these fields, see Report Service.

Dimensions

Column Type Filter? Example Description
month date Yes "2010-02" The month of the auction.
day date Yes "2010-02-01" The day of the auction.
hour date Yes "2010-02-01 06:00:00" The hour of the auction.
buyer_member_id int Yes 123 The ID of the buying member.
geo_country string Yes "US" The targeted country of the advertisement.
media_type string No "Banner" The general display style of the creative.
media_type_id int Yes 1 The ID of the media type.
supply_type string Yes "Mobile App" The method of rendering the creative on a device.
billing_period_id int Yes 453 The ID of the insertion order's billing period.
billing_period.start_date string No "2010-02-01" The start date of the insertion order's billing period.
billing_period.end_date string No "2010-02-08" The end date of the insertion order's billing period.
split_id int Yes 111 The ID of the split that purchased the impressions in this data set.
split_name string No "FirstSplit" The name of the split that purchased the impressions in this data set.
flight int No 32 The ID of the flight in a billing period under an insertion order.
flight.start_dt string No "2010-02-01" The start date of the flight in a billing period under an insertion order.
flight.end_dt string No "2010-02-03" The end date of the flight in a billing period under an insertion order.
advertiser_id int Yes 789 The ID of the advertiser for which impression was purchased.
advertiser_name string No "AdvertiserA" The name of the advertiser for which impression was purchased.
line_item_id int Yes 1122 The ID of the line item under which the impression was purchased.
line_item_name string No "Line Item 1" The name of the line item under which the impression was purchased.
creative_id int Yes 444 The ID of the creative that we're reporting on the frequency and/or recency of.
creative_name string No "Q1 2017 728x90" The name of the creative that we're reporting on the frequency and/or recency of.
insertion_order_id int Yes 321 The ID of the insertion order under which the impression was purchased.
device_type string Yes "Desktops and Laptops" The type of the device where the impression has occurred.
frequency_cap_type string No "Classical", "Advanced", or "None" The type of frequency cap used to limit over-delivery to individual users. When an ID was available in the request, "Classical" is the default frequency cap type. "Advanced" refers to "Advanced Frequency Management" feature.

Metrics

Column Type Example Formula Description
imps int 234123 imps The total number of impressions.
identified_imps int 234123 identified_imps The total number of identified impressions (i.e. those impressions which included a cookie, device id, etc. as part of the ad request).
unidentified_imps int 234212 unidentified_imps The total number of unidentified impressions (i.e. those impressions which did not include a cookie, device id, etc. as part of the ad request).
approx_users_count int 5654 approx_users_count The approximate unique users count who viewed the impression.
average_impression_frequency double 8898 imps/approx_users_count The number of impressions viewed by per unique users.
approximate_consumer_count int 8888 approximate_consumer_count The approximate consumer count who viewed the impression due to cross-device audience extension.
average_consumer_impression_frequency double 7999 imps/approximate_consumer_count The number of impressions viewed by per unique consumers due to cross-device audience extension.
approximate_incremental_devices int 899 approximate_incremental_devices The total number of unique cookies, mobile or other devices reached by the impressions.
cross_device_incremental_imps int 6888 cross_device_incremental_imps The number of impressions which are transacted due to cross-device audience extension. This represents the number of impressions which were delivered on devices outside of the targeted segment(s), due to a cross device graph being applied to extend the reach to more devices owned by a consumer.
average_identified_impression_frequency double 1.23 identified_imps / approx_users_count The number of identified impressions viewed per unique users.
estimated_people_reach (currently available in the US only) int 269,266 unique devices / device density factor The estimated number of people reached, deduplicated across the user-specified dimensions.

Note

The metric estimated_people_reach is currently available in the US only. This model considers the unique devices reached at the zip code level, and utilizes publicly available US census data for the total population of each zip code, in order to estimate the number of people reached for that zip code. This zip code level data is then aggregated when a report is pulled by the API so that the buyer can view it at any level of granularity that is provided by the existing dimensions in the report.

Advanced Frequency Management (AFM), which is currently in beta, does not take universal identifier (Universal ID) into account. This is subject to change as the feature would move into GA. Line items utilising Universal ID targeting should avoid using AFM until this is completely adapted.

Examples

Create the JSON report request

The JSON file should include the report_type of "buyer_approximate_unique_users_hourly", as well as the columns (dimensions and metrics) and report_interval that you want to retrieve. You can also filter for specific dimensions, define granularity (year, month, day), and specify the format in which the data should be returned (csv, excel, or html). For a full explanation of fields that can be included in the JSON file, see the Report Service.

$ cat buyer_approximate_unique_users_hourly

{"report":
    {
        "report_type":"buyer_approximate_unique_users_hourly",
        "columns":[
            "hour",
            "buyer_member_id",
            "media_type",
            "supply_type",
            "creative",
            "line_item_id",
            "imps",
            "average_impression_frequency",
            "cross_device_incremental_imps"
        ],
        "report_interval":"last_48_hours",
        "format":"csv"
    }
}

POST the request to the Report Service

POST the JSON request to get back a report ID.

$ curl -b cookies -X post -d @buyer_approximate_unique_users_hourly "https://api.appnexus.com/report?advertiser_id=789"

{
   "response":{
      "status":"OK",
      "report_id":"09b6979a6a4c3805bdac8921378d3622"
   }
}

GET the report status from the Report Service

Make a GET call with the report ID to retrieve the status of the report. Continue making this GET call until the execution_status is "ready". Then use the report-download service to save the report data to a file, as described in the next step.

$ curl -b cookies 'https://api.appnexus.com/report?id=09b6979a6a4c3805bdac8921378d3622'

{
   "response":{
      "status":"OK",
      "report":{
         "name":null,
         "created_on":"2016-12-11 19:15:48",
         "json_request": "{\"report\":{\"report_type\":\"buyer_approximate_unique_users_hourly\",
             \"columns\":[\"hour\",\"buyer_member_id\",
             \"media_type\",\"supply_type\",\"creative\",\"line_item_id\",
             \"imps\",\"average_impression_frequency\",\"cross_device_incremental_imps\"],
             \"report_interval\":\"last_48_hours\",\"format\":\"csv\",\"filters\":[{\"advertiser_id\":\"789\"}]}}",
             "url":"report-download?id=b97897a7864dd8f34e7457226c7af592"
      },
      "execution_status":"ready"
   }
}

GET the report data from the Report Download Service

To download the report data to a file, make another GET call with the report ID, but this time to the report-download service. You can find the service and report ID in the url field of the response to your previous GET call. When identifying the file that you want to save to, be sure to use the file extension of the file format that you specified in your initial POST.

Note

If an error occurs during download, the response header will include an HTTP error code and message. Use -i or -v in your call to expose the response header.

curl -b cookies 'https://api.appnexus.com/report-download?id=b97897a7864dd8f34e7457226c7af592' > /tmp/buyer_approximate_unique_users_hourly.csv

Note

There is a limit of 100,000 rows per report when you download them as XLSX and Excel file.