Skip to content
Bright Face AdsBright Face Ads
OpenRTB 2.6 · Real-time bidding

Attention, auctioned in milliseconds.

Every impression on the Bright Face Ads network is sold through a sealed, second-price OpenRTB auction, resolved in under 90 milliseconds, end to end, on a pipeline built with Scala, Python and Kafka.

<0ms
p95 latency
0+
Auctions / day
0%
Fill rate
auction.log
streaming
+2msBid request
+16msEnrichment
+54msAuction
+78msBid response
RESOLVED· Google Ads · $5.91 CPM
latency budget · 90ms78 ms
The auction lifecycle

Six stages, one budget: 90 milliseconds.

From the moment an impression appears to the instant the winning creative renders, here is everywhere the time goes.

0 ms

01 · Bid request

An impression becomes available and a structured OpenRTB request is broadcast to demand.

14 ms

02 · Enrichment

Geo, venue type, audience and floor signals are attached to the request.

38 ms

03 · Auction

Demand partners respond; the engine runs a sealed second-price auction against the floor.

62 ms

04 · Bid response

The winning bid returns with its creative markup and tracking URLs.

71 ms

05 · Win notice

The winner is billed at second price and notified through the win URL.

84 ms

06 · Render

The creative plays on the screen, in context, comfortably inside budget.

How the auction clears

Second-price, sealed, and fair by design.

Every bidder submits one sealed bid above the floor. The highest bid wins, but pays just one cent more than the runner-up. Buyers never overpay, and publishers always clear at true market value.

  • Hard price floors per slot, per deal and per buyer.
  • Private marketplace (PMP) deals with guaranteed priority.
  • Strict tmax timeouts, slow bidders are simply excluded.
  • Transparent clearing: you always see what each impression was worth.
A live auction, clearedFloor $4.50
Google AdsWinner · pays 2nd price$6.70
Meta$5.90
Eskimi$5.20
Direct$4.10
Clears at$5.91CPM

Google Ads bids highest at $6.70 but clears at $5.91, one cent over the runner-up.

Under the hood

An engine built to stay up and stay fast.

Requests stream through Kafka into a horizontally-partitioned bidder cluster written in Scala. Each shard runs auctions independently, so the system degrades gracefully under load and scales by adding partitions, not by slowing down.

  • Scala
  • Python
  • Apache Kafka
  • Kubernetes
  • Partitioned
  • Stateless
Architecture diagram · placeholder
Image placeholder

Exchange / SSP

Inbound OpenRTB requests over HTTPS.

Kafka ingest

Partitioned, replayable request streams.

Bidder cluster

Stateless Scala shards, auto-scaled.

Auction core

Sealed second-price clearing in-shard.

Response & logs

Bid response out; events to the lake.

Speak the protocol

Standards all the way down.

The exact shapes your DSP already speaks, OpenRTB 2.6 bid request in, bid response out.

bid-request.json
json
POST /openrtb/2.6/bid  HTTP/1.1
Authorization: Bearer <api_key>

{
  "id": "8f2a91e0-…-e91",
  "at": 2,                 // second-price
  "tmax": 90,              // ms budget
  "cur": ["USD"],
  "imp": [{
    "id": "1",
    "bidfloor": 4.50,
    "video": {
      "mimes": ["video/mp4"],
      "minduration": 5,
      "maxduration": 15,
      "w": 1920, "h": 1080
    }
  }],
  "dooh": {
    "venuetype": ["transit"],
    "geo": { "city": "Douala", "country": "CMR" }
  }
}
Performance you can rely on

The numbers we hold ourselves to.

<90ms

p95 auction latency

End-to-end, request to response.

6.5M+

Auctions per day

Across the live network.

94%

Fill rate

Average across all slots.

99.9%

Uptime

Rolling 90-day availability.

Capabilities

What the bidding engine gives you.

Sub-90ms auctions

p95 bid response times that keep screens full and buyers competitive.

OpenRTB native

Standards-compliant bid requests and responses your DSP already speaks.

Fault tolerant

A resilient pipeline that degrades gracefully under load.

Built to scale

Millions of auctions a day, partitioned and streamed through Kafka.

Compatibility

Integrates with the stack you already run.

Standards-compliant interfaces mean most DSPs and exchanges connect with little to no custom work.

  • OpenRTB 2.6
  • VAST 4.x
  • OpenRTB Native 1.2
  • PMP / Deal IDs
  • JSON over HTTPS
  • OAuth2 bearer

Frequently asked questions

Yes, we implement OpenRTB 2.6 for bid requests, responses and win notifications, so integration with existing DSPs is straightforward.

Let's put your brand on the brightest screens.

Launch a campaign in days, not weeks.

Talk to our team