Digital Platform API - Curator Analytics report

Note

This report is only available to curators.

The Curator Analytics Report provides curators insight into how money is flowing from demand to supply within their curated marketplace.

For instructions on retrieving a report, see Report Service or the Example below.

Time frame

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

  • last_hour
  • today
  • yesterday
  • month_to_date
  • last_month
  • lifetime

Data retention period

Data in this report is retained for 1100 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.

Time ranges including dates occurring greater than 45 days ago

If you create Curator Analytics reports with the report_interval set to "lifetime", your report (regardless of metrics included) will be added to a special queue for "resource-intensive" reports. As a result, the report may take longer than usual to complete. In addition, these resource-intensive reports may, due to the amount of data being requested, fail before being completed. If your report fails to complete, you will receive a notification. If your report request fails or is deleted, you can:

  • rerun the report at a later time.
  • use a report type other than curator_analytics.
  • alter the way you structure your reports (if possible) so they do not include dates greater than 45 days ago.

Dimensions

Column Type Filter? Example Description
bidder_id int Yes 456 ID of the bidder who bought on the transaction
bidder_name string No "That Bidder" Name of the bidder who bought on the transaction
billing_currency string Yes "USD" The currency Xandr bills the curator in
brand_id int Yes 1234 Brand ID associated with the creative that served on the curated deal
brand_name string No "That Brand" Brand name associated with the creative that served on the curated deal
buyer_member string No "That Buyer (789)" Member name of the buyer who bought on the transaction with their member ID in brackets
buyer_member_id int Yes 789 Member ID of the buyer who bought on the transaction
buyer_member_name string No "That Buyer" Member name of the buyer who bought on the transaction
curated_deal string No "My Deal Name (123)" Curated deal name with its deal ID in brackets
curated_deal_advertiser_id int Yes 123 Advertiser ID of the curator member object that owns the deal line item associated with the curated deal
curated_deal_advertiser_name string No "That Advertiser" Advertiser name of the curator member object that owns the deal line item associated with the curated deal
curated_deal_id int Yes 123 Curated deal ID
curated_deal_insertion_order_id int Yes 123 Insertion Order ID of the curator member object that owns the deal line item associated with the curated deal
curated_deal_line_item_id int Yes 123 Line Item ID of the curator member object that owns the deal line item associated with the curated deal
curated_deal_insertion_order_name string No "IO Name" Insertion Order name of the curator member object that owns the deal line item associated with the curated deal
curated_deal_line_item_name string No "My Curated LI" Line Item name of the curator member object that owns the deal line item associated with the curated deal
curated_deal_name string No "My Deal Name" Curated deal name
curator_margin_type int No "Percent" Margin type (if a curator has a margin associated to the line item). Possible values:
- "Unknown"
- "Percent"
- "CPM"
curator_margin_type_filterable int Yes 1 Filterable margin type (if a curator has a margin associated to the line item). Possible values:
0 (Unknown)
1 (Percent)
2 (CPM)
curator_member string No "My Account (123)" Member name of the curator account with their member ID in brackets
curator_member_id int Yes 123 Member ID of the curator account
curator_member_name string No "My Account" Member name of the curator account
day date Yes "2020-02-01" The day of the auction
device_type string Yes "desktops & laptops" Device type on which the impression was served. Possible values are:
- "desktops & laptops"
- "tablets"
- "mobile phones"
- "tv"
- "game consoles"
- "set top box"
- "media players"
- "other devices"
geo_country string Yes "US" The country in which the impression took place. For impression requests for which Xandr received no indication that the ad was rendered (i.e., non-transacted), country information is not provided.
hour date Yes "2020-02-01 06:00:00" The hour of the auction.

Note: For impressions older than 100 days, the day will be returned rather than the hour.
media_type string No "banner" Media type associated with the creative that served on this impression. Possible values are:
- "banner"
- "pop"
- "interstitial"
- "video"
- "text"
- "expandable"
- "skin"
- "facebook"
- "image and text"
- "high impact"
- "native"
- "audio"
- "Unknown"
member_currency string Yes "USD" The currency associated with the curator member's seat
member_id int Yes 789 Member ID of the curator account
mobile_application_id string Yes "343200656" (iOS) or
"com.rovio.angrybirds"
(Android)
The mobile application ID associated with the creative that served on this impression
mobile_application_name string No "Angry Birds" The mobile application name associated with the creative that served on this impression
month date Yes "2020-02" The month of the auction
placement string No "Ivillage 160x600 (456)" Placement name of the seller where the curated transaction served with the placement's ID in brackets
placement_group_id int Yes 4321 Placement Group ID of the seller where the curated transaction served
placement_group_name string No "Placement Group Name" Placement Group name of the seller where the curated transaction served
placement_id int Yes 456 Placement ID of the seller where the curated transaction served
placement_name string No "Ivillage 160x600" Placement name of the seller where the curated transaction served
publisher_id int Yes 321 Publisher ID of the seller where the curated transaction served
publisher_name string Yes "Newscorp" Publisher name of the seller where the curated transaction served
seller_deal string No "That Seller Deal (6543)" The seller deal name being included in a curated deal with the seller deal ID in brackets

Note: If applicable, since not all curated deals will include a seller deal
seller_deal_id int Yes 6543 The seller deal ID being included in a curated deal
Note: If applicable, since not all curated deals will include a seller deal
seller_deal_name string No "That Seller Deal" The seller deal name being included in a curated deal

Note: If applicable, since not all curated deals will include a seller deal
seller_deal_type_id int No 2 The ID of the type of seller deal being included in a curated deal, if applicable. Possible values are:
1 (Open Auction)
2 (Private Auction)
seller_deal_type_name string Yes "Private Marketplace" The name of the type of seller deal being included in a curated deal, if applicable. Possible values are:
- "---" (Open Auction)
- "Private Marketplace" (Private Auction)
seller_member_id int Yes 4567 Member ID of the seller where the curated transaction served
seller_member_name string No "That Seller" Member name of the seller where the curated transaction served
site_domain string No "bestsiteever.com" Site Domain / App where the curated transaction served
size string Yes "320x50" The size of the creative
video_context string Yes "pre-roll" The type of video format the curated transaction served on. Possible values are:
- "unknown"
- "pre-roll"
- "mid-roll"
- "post-roll"
- "outstream"
video_content_duration string Yes "Short-Form" Length of the content in seconds (two options: short (less than 480s), long (more than 480s)).
content_delivery_type string Yes "VOD" The type of streaming content delivery.
video_content_genre string Yes "Action" The main genre of the program on which the ad will be played.
video_program_type string Yes "Movie" The higher level categorization of the program on which the ad will be played.
video_content_rating string Yes "Children(7+)" The type of rating of the content.

Metrics

Note

Clicks metrics are available for impressions bought through Microsoft Invest. Video metrics are available for impressions bought through any DSP.

Column Type Example Formula Description
curator_margin money 2.57676 curator_margin The profit a curator makes on a transaction

Note: When taken as a percentage, Curator Margin is calculated off Curator Revenue.
curator_net_media_cost money 20.6138056 curator_revenue - curator_margin - curator_tech_fees The amount of spend a curator sends to exchange sellers, net of curator fees and margins, if applicable. This is the same as gross seller revenue, inclusive of seller fees.
curator_revenue money 25.767257 curator_revenue The amount of spend a buyer sends to the curator, net of buyer fees, if applicable. This is the same as buyer media cost, exclusive of buyer fees.
curator_tech_fees money 2.5767257 curator_tech_fees The fees Xandr charges to a curator on a transaction
curator_total_cost money 23.1905313 curator_revenue - curator_margin The amount of spend a curator sends to the exchange and exchange sellers, net of curator margin but gross of curator fees
imps int 2340 imps The number of delivered impressions
viewdef_viewed_imps int 1638 viewdef_viewed_imps The number of measured impressions that were viewable, per the buyer's viewability definition
viewdef_view_rate double 0.70 viewdef_view_rate The number of measured impressions that were viewable, per the buyer's viewability definition, divided by the number of measured impressions
viewed_imps int 1872 viewed_imps The number of measured impressions that were viewable, per the IAB Viewability definition, which states that an impression is viewable if 50% of the pixels are in-view during 1 consecutive second
view_measurable_imps int 172 view_measurable_imps The total number of impressions that were measured for viewability.
clicks int 7 clicks The total number of clicks across all impressions. For Microsoft Invest, clicks from all media types are supported. For external DSPs, only clicks from Native and Video media types are supported.
ctr double 0.3 clicks / imps The proportion of Clicks versus Imps.
buyer_cpc money 3.68 curator_revenue / clicks Curator Revenue divided by Clicks.
video_errors int 45 video_errors The total number of times an error occurred.
video_starts int 2335 video_starts The total number of times the first segment of the video creative was downloaded and started.
video_start_rate double 0.99786 video_starts / imps The proportion of Video Starts versus Imps.
video_skips int 12 video_skips The total number of times a user skipped the video.
video_skip_rate double 0.0051282 video_skips / imps The proportion of Video Skips versus Imps.
video_25_pcts int 2100 video_25_pcts The total number of times the video completed 25% of the entire duration.
video_50_pcts int 2000 video_50_pcts The total number of times the video completed 50% of the entire duration.
video_75_pcts int 1900 video_75_pcts The total number of times the video completed 75% of the entire duration.
video_completions int 1800 video_completions The total number of times the video played for the entire duration.
video_completion_rate double 0.76923 video_completions / imps The proportion of Video Completions versus Imps.
buyer_cost_per_video_complete money 0.014315 curator_revenue / video_completions Curator Revenue divided by Video Completions.
buyer_cpm money 11.01164 curator_revenue / imps * 1000 Curator Revenue divided by Imps expressed as a CPM.

Example

Create a JSON-formatted report request

The JSON file should include the report_type of "curator_analytics", 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 curator_analytics

{
    "report": {
        "columns": [
            "hour",
            "buyer_member_name",
            "curated_deal",
            "imps",
            "curator_revenue",
            "curator_margin"
        ],
        "format": "csv",
        "report_interval": "today",
        "report_type": "curator_analytics"
    }
}

POST the request to the report service

$ curl -b cookies -X POST -d @curator_analytics 'https://api.appnexus.com/report'

{
   "response":{
      "status":"OK",
      "report_id":"6b177543a9411ffa67b09bdf5e76cac1"
   }
}

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=6b177543a9411ffa67b09bdf5e76cac1'
{
   "response":{
      "status":"OK",
      "report":{
         "name":null,
         "created_on":"2020-08-25 13:03:37",
         "json_request":"{\"report\":{\"report_type\":\"curator_analytics\",\"columns\":[\"hour\",\"buyer_member_name\",\"curated_deal\",\"imps\",\"curator_revenue\",\"curator_margin\"],\"report_interval\":\"today\",\"format\":\"csv\",\"grouping\":{\"additional_grouping_sets\":[],\"unselected_implicit_groupings\":[],\"additional_groups_on_bottom\":true},\"timezone\":\"UTC\",\"filters\":[{\"member_id\":\"123456\"}],\"reporting_decimal_type\":\"decimal\",\"use_cache\":true},\"extraction_version\":\"refactored\",\"end_date\":1598400000,\"start_date\":1598313600,\"user_id\":\"987654\"}",
         "url": "report-download?id=6b177543a9411ffa67b09bdf5e76cac1"
      },
      "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 previous GET response. When identifying the file that you want to save to, be sure to use the file extension of the "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=6b177543a9411ffa67b09bdf5e76cac1' > /tmp/curator_analytics.csv

Note

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