Jump to:
- How Google-hosted frequency caps work
- Frequency cap properties
- Understand the scope of frequency caps
- Rejection reasons
Frequency caps limit the number of times that a user will see ads from a given entity (such as a campaign, creative, line item, and so on) within a designated time period. Setting these limits can increase ROI by potentially broadening the reach of a campaign, and by preventing budget waste on numerous impressions for the same user.
Normally, a bidder would enforce these themselves, keying impression counters by user identifiers from the bid request and choosing not to bid if a user has already seen enough impressions. Google-hosted frequency capping is a more privacy-centric solution that allows for frequency cap enforcement without the sharing of user identifiers in bid requests
How Google-hosted frequency caps work
With Google-hosted frequency capping, you can set frequency caps on bid responses. Depending on the parameters you select, the cap will prevent the bid from winning an impression if the bid violates the specified cap. This is true even if the bid has the highest CPM.
Example 1
A user visits a site, and the ad exchange makes a request. Bidder A bids with a $2 CPM and a frequency cap allowing only 1 impression. Bidder B bids with a $1 CPM and no frequency cap. Assuming the user has not seen impressions from either Bidder, the bid with the higher CPM would win the impression. Now, let’s say that the same user visits the site again, prompting another ad request. Using the same parameters, Bidder A’s bid would be filtered before the auction because the user has already met the frequency cap of 1 impression, and Bidder B would win the impression with the lower CPM.
Note that this framework depends on Google having access to a stable user identifier, such as a third-party cookie or a first-party cookie.
Frequency cap properties
You can specify frequency caps based on the following properties:
ID |
The fcap_id describes the unit of frequency capping that you want to set. This unit could be at the level of the campaign, creative, line item, advertiser, or other element. The ID can't contain more than 64 characters.* |
Time unit |
The time_unit property establishes the duration for which the frequency capping will last. Possible values include MINUTE, DAY, WEEK, MONTH, or INDEFINITE. Note that if time_unit is set to INDEFINITE, the time_range property will be ignored. |
Time range |
The time_range property limits the number of times that an impression can be seen over the established time unit. For example, if time_unit is DAY, and time_range is 2, then at most max_impressions could be shown every 2 days. The time_range property can't be less than 1.* |
Max impressions |
The max_imp property sets the limit on how many times a user can see an impression for the established time unit and time range. Using the previous example: If max_impressions is 10, time_unit is DAY, and time_range is 2, this means at most 10 impressions could be shown to a user every 2 days. Or, let’s say you want to allow only 10 impressions per week: You would set max_impressions to 10, time_range to 1, and time_unit to WEEK. The max_impressions property can't be less than 1.* |
Example 2
Suppose you’re running a campaign called video-campaign-US, and you want to allow users to see 10 max impressions per week from any creative that is part of the campaign. You would add the following frequency cap to bid responses when bidding with a creative from the video-campaign-US campaign:
// OpenRTB bid response
{
"seatbid": [{
"bid": [{
"ext": {
"fcap": [{
"fcap_id": "video-campaign-US",
"time_unit": "WEEK",
"time_range": 1,
"max_imp": 10
}]
}
}]
}]
}
You can also use multiple frequency capping properties on the same bid response, with fcap_id units of your choosing:
Example 3
Suppose you once again have a campaign called video-campaign-US, and you want to limit the impressions from this campaign as well as impressions from each product within the campaign. You might achieve this with the following frequency caps:
// Bid response
{
"seatbid": [{
"bid": [{
"ext": {
"fcap": [{
"fcap_id": "video-campaign-US",
"time_unit": "WEEK",
"time_range": 2,
"max_imp": 25
}, {
"fcap_id": "super-cool-headphones",
"time_unit": "WEEK",
"time_range": 2,
"max_imp": 5
}]
}
}]
}]
}
To learn more about setting frequency caps, review the protocols for AdSlot object or FrequencyCap object. |
Understand the scope of Google-hosted frequency caps
Google can enforce frequency caps for the inventory indicated by the frequency_capping_scope field in the bid request. This field can have any of the following values:
App | Frequency caps are enforced within a single app. |
Browser |
The maximum number of times a user will see the same impression across sites within the same browser. |
Device |
The maximum number of times a user will see the same impression across multiple apps (excluding browsers) while using the same device. |
Site | Frequency caps are enforced within a single site. |
None | Indicates that frequency capping is not supported for the request. Bids containing frequency caps will be filtered before the auction if the frequency capping scope is “None.” |
Here’s an example of how this works for the “site” frequency cap:
- A user visits a website.
- If Google can support frequency capping at the site level, scope=site is populated on the bid request.
- The bidder receives the bid request, decides to bid, and includes frequency caps in their bid response.
- On the specified website, Google ensures that no more than the allowed number of impressions are shown to the user. Note that the user might see more impressions on other sites.
The process is similar for other scopes. For example, for scope=app, Google can limit impressions within a specified app. The user might see additional impressions if they switch apps.
Note: Regardless of the indicated scope, all frequency capping enforcement is scoped to impressions served by Google. Impressions served by other exchanges can't be taken into account when determining if the impression limit has been met.
Understand rejection reasons
When you set frequency caps, a bid might be rejected for a number of reasons. Here are some of the most common:
Reason |
Possible cause |
---|---|
Bid filtered due to frequency cap |
The user has already seen the maximum number of allowed impressions according to your bid response. |
Bid filtered due to malformed frequency caps or because frequency capping was specified for a request which doesn't support it |
Bid with invalid or malformed frequency caps might be rejected for the following reasons:
|
Frequency cap lookup failure |
Google was unable to determine impression counts, so the bid was filtered to prevent seeing too many impressions |