The AdTech auction, from request to impression
Trace the main handoffs across publisher, exchange, DSP, and ad server.
Architecture
The choice is not simply client versus server. It affects observability, browser work, bidder integrations, consent handling, and operational ownership.
Prebid.js runs the auction logic in the user's browser. This gives operators direct access to browser-level evidence such as network requests, auction events, slot configuration, and rendering behavior. The trade-off is that the browser carries more work and each page integration must be maintained carefully.
Prebid Server moves parts of the auction workflow to a server environment. This can reduce some browser-side work and support server-side demand integrations. It also introduces an operational system that must be monitored, configured, secured, and debugged.
For client-side integrations, browser developer tools are often the fastest diagnostic surface. For server-side integrations, request logs, response traces, bidder adapter behavior, timeout configuration, and server metrics become more important. A team should decide what evidence it needs before choosing an architecture.
Verify consent behavior, timeout behavior, media types, bidder parameters, duplicate auctions, error handling, price mapping, ad-server targeting, and impression tracking. Test both successful and no-bid scenarios. The exact configuration should follow the version and bidder documentation used by the implementation.
Contrast browser-visible bidder calls and server-side adapter calls. Explain identity availability, timeout boundaries, debugging visibility, and bidder support.
For one ad unit, capture the Prebid.js auction timeline and the Prebid Server request/response path. Compare missing bids by stage rather than assuming server-side is faster or better.
A bidder may support one path but not the other. Identity, consent, adapter parameters, and demand configurations can produce different results.
Purpose. This exercise turns the guide into a reproducible investigation. The scenario is synthetic and is provided for learning, not as evidence of a production incident. Begin with one publisher evaluating browser-side Prebid.js and a server-side auction for the same demand partners. The question to answer is not merely whether a component is present, but whether the relevant system behavior can be demonstrated with a traceable set of observations. Record the environment, configuration version, test date, and which participant owns each piece of evidence before drawing a conclusion.
Suppose a partner performs well in browser auctions but yields fewer valid responses when routed through the server. Write down the expected behavior in one sentence and the observed behavior in another. Avoid diagnosing the entire system from a final dashboard number: many upstream failures collapse into the same visible symptom. Start at the earliest boundary that can be independently verified, then follow the transaction toward the user-visible outcome. Treat a missing log entry as an unknown until logging coverage is confirmed. A negative result is meaningful only if the test could have observed a positive one.
For this investigation, compare supported adapters, identity availability, consent propagation, request payloads, latency, and bidder-specific integration requirements. Preserve raw samples and a normalized summary separately. Redact identifiers that could expose real users, partner credentials, proprietary bid details, or account-specific configuration. Label every timestamp with its time zone and specify whether it is client time, server receipt time, or reporting time. Keep an explicit column for missing information. This makes the exercise repeatable and prevents an apparent mismatch from being explained away by undocumented assumptions.
First, freeze the test conditions: choose a known placement or request fixture, record configuration hashes, and ensure that unrelated releases are not running. Next, run a controlled split with stable placements and comparable traffic, then normalize outcomes by eligible requests rather than raw page views. Repeat the baseline at least twice to check whether the observation is stable. Change one variable at a time and record both the intended change and the actual request payload produced by the system. If a result changes, repeat the original baseline before attributing causality. Where production experiments could affect revenue or privacy, use synthetic fixtures or a non-billable test environment instead.
One useful distinction is between configured, requested, accepted, and counted. A setting can exist without appearing in a network request; a request can reach a partner without being accepted; and an accepted auction event can fail to become a billable impression. In this topic, moving work server-side changes observability and identity context; it does not automatically increase yield. Build a small decision table that identifies the system responsible for each transition and the observable proof needed to confirm it. When two dashboards disagree, compare their event definitions before comparing totals.
Create one known-good fixture and at least three deliberate failure fixtures: a missing required input, a syntactically acceptable but semantically wrong value, and a delayed or partially unavailable dependency. For each fixture, specify the expected validation message, whether the system should fail open or fail closed, and whether any downstream report should change. Record what happens if the same request is retried, if a partner returns no response, and if the response arrives after the decision deadline. These checks reveal whether a diagnostic method is robust or only succeeds for a happy-path demonstration.
Conclude the investigation with four fields: confirmed observation, leading hypothesis, disconfirming evidence, and next smallest experiment. A useful outcome can be “insufficient evidence” when a partner-controlled log is unavailable. different partners may support only one integration path or require separate account approval. If the issue cannot be reproduced, document what was attempted and what instrumentation would make the next occurrence diagnosable. Do not claim a performance improvement until the outcome metric and comparison population are defined in advance.
Takeaway: A high-quality technical investigation should be repeatable by another engineer. Keep the fixture, expected output, observed output, and limits of inference together so that a reader can test the claim rather than merely accept it.