prebid / Prebid.js

Setup and manage header bidding advertising partners without writing code or confusing line items. Prebid.js is open source and free.
https://docs.prebid.org
Apache License 2.0
1.33k stars 2.09k forks source link

Discrepancy in VAST Impression Tracking #12375

Open vivekyadav15 opened 3 weeks ago

vivekyadav15 commented 3 weeks ago

Type of issue

Description of issue

Description:

Raising this to discuss two issues identified during the implementation of the registerVastTrackers function in an analytics adapter for recording instream impressions, it is essential to have access to certain adUnit, auction and bidRequest information to ensure accurate data handling.

ISSUE 1 Some necessary information like requested mediatype, context etc is not available in bidResponse. So adUnit, auction and bidRequest information obtained from analytics events becomes crucial for recording such data in impression pixels. However, in some instances, this data is unavailable due to debounce delays in analytics adapters. This delay has led to a 15–30% discrepancy between GAM and our recorded impressions, as the data required to log impressions is not always accessible.

ISSUE 2 Since context is unavailable it becomes difficult to write business logic to add tracker for specific context.

Details about adUnit, auction and bidRequest information we access is listed below. Field Path Description Event
timeout args.timeout Max auction timeout AuctionInit
context args.adUnits.video.context Video Context AuctionInit
Ad unit ext args.adUnits.ext Ad unit ext AuctionInit
User id args.bidderRequests.bids.userId User id present for the auction AuctionInit
Auction start time - Difference between Auction start time and auction init time (args.timestamp) AuctionInit
Auction end time - Difference between Auction end time and auction Init time (args.timestamp) AuctionInit
Set targeting time - Difference between Set targeting time and auction init time (args.timestamp) AuctionInit
Bid won time - Difference between Bid won time and auction init time (args.timestamp) AuctionInit
Floor data args.bidderRequests.bids.floorData Floor data present for the auction AuctionInit
Requets mediatypes args.bids.mediaTypes Request media type BidRequested
Turn around time - Difference between bid response time and bid request time (args.start) BidRequested and BidResponse
Bidder params args.bids.params Bidder specific params BidRequested
Request sizes args.bids.sizes Request sizes BidRequested

Other link

https://github.com/prebid/Prebid.js/issues/9110
https://github.com/prebid/Prebid.js/pull/10191

vivekyadav15 commented 3 weeks ago

@dgirardi Could you please take a look at this issue? I noticed you've worked on this, so any insights you have would be really helpful

dgirardi commented 3 weeks ago

I am interpreting this as a feature request: make the bid request available in callbacks passed to registerVastTrackers. Is that a fair summary?

vivekyadav15 commented 2 weeks ago

@dgirardi We (analytics adapters) would want to have request and auction level info.

patmmccann commented 2 weeks ago

If requested mediatype and context are available in bidResponse does that solve completely? Are the gam numbers higher or lower than yours?

dgirardi commented 2 weeks ago

Could you clarify what you mean by data not available? Do you need to package that data into the VAST, before the auction ends (and some of the data does not exist yet)? Otherwise I think an analytics adapter should have access to all that information - passing auction / request to registerVastTrackers would just avoid the need to cross-reference them with the response.

vivekyadav15 commented 2 weeks ago

@patmmccann

If requested mediatype and context are available in bidResponse does that solve completely? Are the gam numbers higher or lower than yours?

  1. No, even though the requested media type and context are available, we would still be missing the ad slot information as well as the auction information.
  2. Yes, the GAM numbers were much higher than ours.
vivekyadav15 commented 2 weeks ago

@dgirardi

Could you clarify what you mean by data not available? Do you need to package that data into the VAST, before the auction ends (and some of the data does not exist yet)? Otherwise I think an analytics adapter should have access to all that information - passing auction / request to registerVastTrackers would just avoid the need to cross-reference them with the response.

  1. Due to the analytics event running with a debounce delay, there are many cases where getVastTrackers (a function inside vastTracker.js that fetches impression pixels from the analytics adapter) is called before the AUCTION_INIT and BID_REQUESTED events are triggered. As a result, when getVastTrackers is called, we don't have access to the auction and bid request data.

  2. If getVastTrackers could pass the auction and request information, it would resolve the issue.

vivekyadav15 commented 1 week ago

@dgirardi @patmmccann Were you able to check this ?

vivekyadav15 commented 1 week ago

@dgirardi @patmmccann Were you able to check this ?

@dgirardi @patmmccann Just looping back on this. Let me know if you need any clarification.

patmmccann commented 3 days ago

@vivekyadav15 we're marking this ready for dev, thanks for the details