Prebid Server Premium Health Analytics
The Prebid Server Premium (PSP) Health Analytics Report allows users to analyze data related to bid requests and transactions with their configured Demand Partners. This is most useful in troubleshooting known issues and proactively identifying optimization opportunities.
Note
The dashboard is based on sample data multiplied to estimate the full volume of PSP activity. It is not intended to be used for delivery and revenue reporting. The Prebid Server Premium Seller Analytics Report and other Microsoft Monetize reports should be used for those purposes.
Time frame
The report_interval
field in the JSON request can be set to one of the following:
- last_hour
- last_24_hours
- last_48_hours
- today
- yesterday
- last_2_days
- last_7_days
- last_14_days
- last_30_days
- month_to_date
- last_month
- month_to_yesterday
- quarter_to_date
- lifetime
The time_granularity
of the data is hourly. For instructions on retrieving a report, see the Report Service or the examples below.
Data retention period
Data retention period for this report is 99 days.
Dimensions
Column | Type | Filter? | Example | Description |
---|---|---|---|---|
hour |
date | no | "2018-02-01-09:54" |
The hour of the auction. |
month |
date | no | "2018-02" |
The month of the auction. |
day |
date | yes | "2018-02-01" |
The day of the auction. |
seller_member_id |
int | yes | 123 |
The ID of the seller member. |
seller_member_name |
string | no | "Cool Seller Inc" |
The name of the seller member. |
publisher_id |
int | yes | 789 |
The ID of the publisher on whose inventory the request originated. |
publisher_name |
string | no | "Neat Publisher Ltd" |
The name of the publisher on whose inventory the request originated. |
site_id |
int | yes | 555 |
The ID of the site on which the the request originated. |
site_name |
string | no | "My Site" |
The name of the site on which the request originated. |
placement_id |
int | yes | 456 |
The ID of the placement through which the request originated. |
placement_name |
string | no | "My Placement" |
The name of the placement through which the request originated. |
ad_size |
string | yes | 300x250 |
The dimensions of the ad slot. |
supply_type |
string | yes | "web" |
The category of inventory (web, mobile web, or app). App includes CTV and mobile. |
device_type_id |
int | yes | 1 |
The category of device. - 0 = Unknown- 1 = PC- 2 = Phone- 3 = Tablet- 4 = TV- 5 = Game Console- 6 = Media Player- 7 = Set Top Box |
media_type_id |
int | yes | 1 |
The ID of the category of creative on transacted impressions. |
allowed_media_type_id |
int | no | 1 |
The ID of the category of creative enabled by the publisher on the Monetize placement. |
media_type |
string | no | "Banner" |
The category of creative on transacted impressions. For example: banner, video, native. |
allowed_media_type |
string | no | "Banner" |
The category of creative enabled by the publisher on the Monetize placement. For example: banner, video, native. |
device_os_family_id |
int | yes | 2 |
The ID of the operating system of the device. For example, Microsoft Windows, Apple iOS, etc. |
device_os_family_name |
string | no | "Android" |
The name of the operating system of the device. For example, Microsoft Windows, Apple iOS, etc. |
device_os_family |
string | no | "Android (2)" |
A string consisting of the device OS family name and ID. |
device_os_extended_id |
int | yes | 137 |
The ID of the specific version of the operating system. For example, iOS 16.0.0. |
device_os_extended_name |
string | no | "Windows 10" |
The name of the specific version of the operating system. For example, iOS 16.0.0. |
device_browser_id |
int | yes | 8 |
The ID of the browser used on the device. For example, Chrome, Safari, etc. |
device_browser_name |
string | no | "Chrome (all versions)" |
The name of the browser used on the device. For example, Chrome, Safari, etc. |
browser_code_id |
int | yes | 5414 |
The ID of the specific version of the browser. |
browser_code_name |
string | no | "da-chrome-107.0" |
The name of the specific version of the browser. |
sdk_version |
string | yes | "pbjs-5.20.3" |
The version of the software development kit present in the app. |
application_id |
string | yes | "vizio.pluto" |
The specific application used on the device. |
datacenter_id |
string | yes | "ams3" |
The ID of the data center used to route the request to demand partners. |
geo_country |
string | yes | "US" |
The code of the country in which the impression served. For example, US. |
geo_country_name |
string | "United States" |
The name of the country in which the impression served. For example, United States. | |
bidder_id |
int | yes | 443 |
The ID of the bidder (443). |
bidder_name |
string | no | Prebid Server |
The name of the bidder (Prebid Server). |
demand_partner_id |
int | yes | 9645 |
The ID of the partner to which the request was sent and from which the response (if any) was received. |
demand_partner_name |
string | no | "PubMatic (PSP)" |
The name of the partner to which the request was sent and from which the response (if any) was received. |
demand_partner |
string | no | "PubMatic (PSP) (9645)" |
A string consisting of the demand partner name and ID. |
bid_error_type |
int | yes | 21 |
The ID of the category of error related to the bid response. For more detail, see the Error Types table below. |
bid_error_type_name |
string | no | "NO_BID_PRICE" |
The category of error related to the bid response. For more detail, see the Error Types table below. |
external_creative_id |
string | yes | 987654 |
The external ID associated with the creative served. |
inventory_url |
string | no | "myurl.com/(1234)" |
The mapped URL from the detected domain on the ad call and the ID in parentheses. |
inventory_url_id |
string | yes | 1234 |
The mapped URL ID from the detected domain on the ad call. |
inventory_url_name |
string | yes | 1234 |
The mapped URL from the detected domain on the ad call. |
Metrics
Column | Type | Formula | Example | Description |
---|---|---|---|---|
bid_requests_sent |
int | See Description. | 3990674680 |
The number of requests sent from Prebid Server Premium to Demand Partners. |
bid_responses_received |
int | See Description. | 381809500 |
The number of bid responses received by Prebid Server Premium from Demand Partners. |
valid_bids_on_imps |
int | See Description. | 378935000 |
The number of bids received from PSP Demand Partners that do not trigger errors, have a creative ID, and have a bid above $0. There may be multiple bids counted for each auction when multiple PSP Demand Partners return bids. |
valid_bids_on_imps_rate |
double | valid_bids_on_imps / bid_requests_sent | 0.09 |
The number of valid bids divided by the number of bid requests sent to Demand Partners. |
bids_submitted_to_ad_server |
int | See Description. | 54021580 |
The number of ad requests that had a valid Prebid bid that was not subject to any additional Xandr rejections returned to the ad server. This number is counted after the Xandr auction process that evaluates bids received from all sources. The reduced volume between valid_bids_on_imps and this metric could be due to creative requirements not being met, being outbid by other bidders, or due to the option to send only the top bid back to the ad server. |
bid_errors |
int | See Description. | 149908040 |
The number of errors in bid responses from Demand Partners. |
bid_errors_rate |
double | bid_errors / bid_requests_sent | 0.04 |
The number of bid errors divided by the number of bid requests sent to Demand Partners. |
timeout_errors |
int | See Description. | 60673400 |
The number of errors where a Demand Partner did not respond within the timeout limit. For more information on timeouts see Add or Edit PSP Global Settings. |
timeout_errors_rate |
double | timeout_errors / bid_requests_sent | 0.01 |
The number of timeout errors divided by the number of bid requests sent to Demand Partners. |
no_bids |
int | See Description. | 3461831640 |
The number of times Demand Partners did not bid on a request. This does not include bid errors. |
no_bid_rate |
double | no_bids / bid_requests_sent | 0.87 |
The number of times Demand Partners did not bid divided by the number of bid requests sent to Demand Partners. |
average_response_time |
double | See Description. | 228.02 |
The average time Demand Partners took to respond to bid requests. |
bidder_user_matched_requests |
int | See Description. | 1849169240 |
The number of requests where a user identifier was present. Note: This metric currently only includes cookies for web and mobile web. |
user_matched_requests_rate |
double | bidder_user_matched_requests / bid_requests_sent | 0.46 |
The number of user matched requests divided by the number of bid requests sent to Demand Partners. |
imps_delivered |
int | See Description. | 4804540 |
The number of impressions successfully delivered and ads rendered. Note: This report is based on sample log data multiplied to estimate the full volume of PSP activity and does not represent final delivery. |
win_rate |
double | imps_delivered / bid_responses_received | 0.01 |
This metric should only be used with the demand partner dimension applied. It represents the percentage of impressions delivered by a demand partner relative to the total bid responses received. The calculation involves dividing the number of impressions delivered by the demand partner by the total number of bid responses received. |
total_bid_price |
int | See Description. | 171869242 |
The sum of the bid values received from Demand Partners. |
average_clear_price |
double | See Description. | 1.00 |
The sum of bid price for delivered impressions divided by the number of bid requests sent. |
total_buyer_spend |
double | See Description. | 11234.88 |
The media cost to buyers of impressions delivered. Note: This report is based on sample log data multiplied to estimate the full volume of PSP activity and does not represent final delivery. |
Error types
Code | Error | Description | Remedy |
---|---|---|---|
0 | NONE | No error. | None needed. |
1 | INTERNAL | There is a server-side error from the Demand Partner, such as a 400 status code. | The Seller should work with Xandr to collect a specific example code to share with the Demand Partner for investigation. |
2 | TIMEOUT | The Demand Partner did not respond within the timeout limit. | Either increase timeout settings to allow for a longer response time or contact the Demand Partner to inform them of the restriction. For more information on timeouts, see Add or Edit PSP Global Settings. |
3 | CLIENT | The Demand Partner's Prebid Server adapter generated an error. | For significant quantities of this error type, the Seller should contact Xandr support to diagnose issues by looking at the internal Xandr logs. An example of this error could be that video supply has been sent to an adapter that does not support it. |
4 | PARSE | The Demand Partner has formatted the bid response incorrectly. | The Seller should work with Xandr and the Demand Partner to determine and resolve the specific formatting issue. |
21 | NO_BID_PRICE | No price received from the Demand Partner. | The Seller should notify the Demand Partner of the issue. |
22 | NO_CREATIVE_ID | No creative ID received from the Demand Partner. | The Seller should notify the Demand Partner of the issue. |
23 | NEC_ERROR | The bid was rejected during the Xandr auction process. | The bid was successfully received from the Demand Partner, but the bid was rejected within the Xandr auction. The Seller can use the Seller Bid Error report to diagnose specific rejections occurring on their supply. |
24 | CREATIVE_WRONG_SIZE | The Demand Partner is bidding with a creative size that doesn't match the tag size. | The Seller should review the creative size and notify the Demand Partner regarding the mismatch. |
70 | MEMBER_NOT_ELIGIBLE | The Seller's settings are blocking the Buyer's member from participating in the auction. | The Seller should notify the Buyer that they are currently blocked from bidding. |
84 | CATEGORY_REQ_ALLOWLIST | The category of the creative is sensitive and requires addition to the allowlist. | The Seller should work with the Buyer to determine if the creative warrants addition to the allowlist. |
132 | DYN_CREATIVE_INCOMPATIBLE_TYPE | Dynamic ad-markup bidding is not supported for certain PSP Demand Partners that require client-side rendering when a Seller doesn't support it. | The Seller should correct their setup to align with client-side rendering requirements, on both supply and PSP sides. |
150 | SELLER_MEMBER_NO_CONTRACT | The Seller's contract isn't set up properly. | The Seller should work with Xandr to remedy the contract issue. |
Note
For additional possible error codes, see Bid Error Codes.
Examples
Create JSON formatted report request
The JSON file should include the report_type
of "psp_health_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 psp_health_analytics
{"report":
{
"format": "csv",
"report_interval": "yesterday",
"columns": ["hour", "publisher_id","site_id","header_bidding_demand_partner", "imps", "seller_revenue", "view_rate"],
"report_type": "psp_health_analytics"
}
}
POST
the request to the Report service
POST
the JSON request to get back a report ID.
$ curl -b cookies -c cookies -X post -d @psp_health_analytics "https://api.appnexus.com/report"
{
"response":{
"status":"OK",
"report_id":"97a181df6d77a8f3cd5a45eff4ea3dab"
}
}
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 -c cookies 'https://api.appnexus.com/report?id=97a181df6d77a8f3cd5a45eff4ea3dab'
{
"response": {
"status": "OK",
"report": {
"name": null,
"created_on": "2014-11-19 21:57:00",
"json_request": "{\"report\":{\"format\":\"csv\",\"report_interval\":\"yesterday\",\"row_per\":[\"publisher_id\"],\"columns\":[\"hour\", \"publisher_id\",\"site_id\",\"header_bidding_demand_partner\",\"imps\",\"seller_revenue\", \"view_rate\"],\"report_type\":\"psp_health_analytics\"
"url": "report-download?id=97a181df6d77a8f3cd5a45eff4ea3dab"
},
"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 -c cookies 'https://api.appnexus.com/report-download?id=97a181df6d77a8f3cd5a45eff4ea3dab' > /tmp/psp_health_analytics.csv
Note
There is a limit of 100,000 rows per report when you download them as XLSX and Excel file.