Ad Decision Engine Overview


This section reviews the basics behind how Kevel selects an ad/internal promotion to be shown.

Decision Engine Inputs

Kevel's ad engine chooses to serve a creative to a placement based on:

  • The Creative's size
  • The Targeting and Goal settings tied to each Ad/Flight/Campaign
  • The Channel's Priority for the Flight

Decision Engine Process

First, the engine receives information about the ad placement via the Decision API request. This includes information like Placement Location, User Agent, Keywords, User Key, Custom Targeting data, Location, and more.

Then, the Engine takes a look at all the ads you've created in the system and filters by the right criteria. It also analyzes the Priorities order and will prioritize ads based on their Priority level, such as showing Sponsorship ads first, then Auction ads, then House Ads.

Finally, it chooses a winner based on your Ad Selection Methods within each Priority. For instance, if you're doing Auctions / eCPM Optimization, the winner will be the ad that'll deliver the highest eCPM.

Ad Balancing & Weights

The balancer is a system that examines a given creative every 5 minutes (or whenever you save a campaign, flight, or creative) to determine how often it should serve. The balancer assigns a weight to the creative. For example:

  • A flight set to 100% percentage delivery would be set to a weight of 100
  • A flight set to 50% percentage delivery would be set to a weight of 50
  • A flight that is set to an impression or click goal is assigned a dynamic weight based on projected impressions, or clicks vs. current delivery

When the Ad Decision Engine goes to pick a winning ad, it'll incorporate each ad's weight when selecting.

Selection Methods

These are used to help decide how an ad gets selected.

LotteryThis is the default selection method. Based on the weights of the available ads, Kevel randomly selects which ad to show. Think of a big bingo ball bowl - an ad with a weight of 50 would have 50 balls in the bowl; an ad with a weight of 10 would have 10 balls. The first ad would therefore win ~83% of the time (50/60)
AuctionIn the auction selection method, each ad has an eCPM value based on past behavior. The winning ad will be the one with the highest eCPM
Outbid with LotteryAllows RTB bidders to compete against lottery inventory. The RTB bid with the highest eCPM in the priority will compete against the lottery winner in the priority. If the lottery winner has a higher eCPM, it will serve. Otherwise, the RTB ad will serve.


In a lottery priority, ads with percentage goals are selected separately from ads with impression goals, etc. The percentage goal ads will become eligible to serve first, and any remaining requests will be filled by ads with other goal types. To prevent unpredictable serving behavior, it's a best practice to use the same goal types for each priority.

Launching & Pausing


Even or Percentage goal types start serving a few seconds after you save the flight.

Fixed Impression or Conversion goal types can take several minutes to go live, as our ad balancer monitors # of requests to determine how often to show the ad.


If you set impression or click caps for a Flight, our system will pause the Flight once that cap has been hit. However, due to the number of events processed by Kevel (25K+ requests per second), stopping on a dime is not feasible. Therefore, your total impressions for a flight will likely be slightly over.

This comes into play with click and conversion caps too, but to a lesser extent.

If you pause manually, the ads will also take a few moments to stop.