Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Inject Server-Side Floor Values into Prebid.js Bid Object for Analytics #3765

Open
tej656 opened this issue Jun 20, 2024 · 3 comments

Comments

@tej656
Copy link

tej656 commented Jun 20, 2024

In the current setup of Prebid.js (pbjs) integrated with Prebid Server, the server-side floor data is not propagated to the client side. As a result, analytics adapters on the pbjs side are unable to capture and utilize this floor data effectively.

@tej656 tej656 changed the title Support for injecting prebid server side floors back to prebid js bid object for Analytics purpose [Feature Request] Inject Server-Side Floor Values into Prebid.js Bid Object for Enhanced Analytics Jun 20, 2024
@tej656 tej656 changed the title [Feature Request] Inject Server-Side Floor Values into Prebid.js Bid Object for Enhanced Analytics [Feature Request] Inject Server-Side Floor Values into Prebid.js Bid Object for Analytics Jun 20, 2024
@bretg
Copy link
Contributor

bretg commented Jun 20, 2024

My proposal here is to have the floors feature create a set of analytics tags that can then be propagated to the client as described in #3615

I'm making the assumption that the important elements needed for client-side analytics are:

  • what floor was sent to a each bidder
  • how that floor was determined (floor source, model, rule, bidadjustments)
  • whether a bid was removed because it was under the floor
[{
   activities: [{
    name: "floor-config",
    status: "success",
    results: [{
        // cross-imp and cross-bidder params
        status: "success",
        values: {
          "source": "fetch",              // request, fetch or noData
          "provider": "providerA", 
          "fetchstatus": "success", // none,success,timeout,error,inprogress
          "model": "12345",
          "skiprate": 10,
          "skipped": false,
          "enforcement": true,
          "dealsenforced": false,
          "enforcerate": 100,
          "floormin": 0.50,
          "floormincur": "USD"
        },
        appliedto: {
          "bidders": "bidderA",
           imp: ["1"]
        }
    }],
  },{
    name: "floor-signaling",
    status: "success",
    results: [{
        // most bidders received $1.00 USD as a floor on imp 1
        status: "success",
        values: {
          "bidfloor": 1.00,
          "adjustedbidfloor": 1.00,
          "bidfloorcur": "USD",
          "rule": "*|*|*",
          "rulevalue": 1.00
        },
        appliedto: {
          "bidders": ["bidderA", "bidderB", "bidderC"]
           imp: ["1"]
        }
     },{
        // bidderD received $1.05 USD as a floor on imp 1 due to bid adjustments
        status: "success",
        values: {
          "bidfloor": 1.00,
          "adjustedbidfloor": 1.05,
          "bidfloorcur": "USD",
          "rule": "*|*|*",
          "rulevalue": 1.00
        },
        appliedto: {
          "bidders": ["bidderD"]
           imp: ["1"]
        }
     },{
        // bidderE received $1.10 USD as a floor on imp 1
        status: "success",
        values: {
          "bidfloor": 1.10,
          "adjustedbidfloor": 1.10,
          "bidfloorcur": "USD",
          "rule": "*|*|bidderE",
          "rulevalue": 1.10
        },
        appliedto: {
          "bidders": ["bidderE"]
           imp: ["1"]
        }
     }]
  },{
    name: "floor-enforcement",
    status: "success",
    results: [{
        // bidderD bid rejected
        status: "success-blocked",
        values: {
          "bidfloor": 1.00,
          "adjustedbidfloor": 1.05,
          "bidfloorcur": "USD",
          "bidprice": 1.00,
          "adjustedbidprice": 0.95
        },
        appliedto: {
          "bidders": ["bidderD"]
           imp: ["1"]
        }
    }]
  }]
}]

@tej656 - please look over this and see if this covers all the data you're looking for in your client-side analytics. I've based it off of what we (Magnite) built for server-side floors analytics, which is serving us well.

@tej656
Copy link
Author

tej656 commented Jun 21, 2024

@bretg This data is nearly complete. We just need to add one more field, 'floorProvider', to identify the floor provider. This field is already supported by client-side analytics today.

@bretg
Copy link
Contributor

bretg commented Jun 21, 2024

Provider added. Will bring this up a future PMC meeting. Heads up that it's likely to be fairly low priority, so we can't promise a timeline. If you have some engineering folks who could contribute, that would be welcome.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Needs Requirements
Development

No branches or pull requests

2 participants