Set Google-hosted frequency caps for RTB bids

Limit how many times a user sees an ad

bookmarkJump to: 

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.

*Be sure these properties are correctly formatted to prevent your bid from being rejected. Learn more about reasons why frequency caps might be rejected
 

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

        }]

      }

    }]

  }]

}

Developer documentation

To learn more about setting frequency caps, review the protocols for AdSlot object or FrequencyCap object.

 

 Back to top

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.”
For exact values, visit the Real-time Bidding Protocols guide and scroll to frequency_capping_scope, or check the Open RTB integration guide and scroll to fcap_scope.

Here’s an example of how this works for the “site” frequency cap:

  1. A user visits a website.
  2. If Google can support frequency capping at the site level, scope=site is populated on the bid request.
  3. The bidder receives the bid request, decides to bid, and includes frequency caps in their bid response.
  4. 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:

  • A single bid has more than 10 frequency caps
  • An fcap_id is longer than 64 characters 
  • max_impressions is less than 1
  • time_range is less than 1
  • time_unit is not specified
  • Any of the bid response frequency capping fields are missing

Frequency cap lookup failure

Google was unable to determine impression counts, so the bid was filtered to prevent seeing too many impressions

Frequency caps are applied to each bid independently. If you want an alternate bid to be considered in case your frequency-capped bid is rejected, you can include additional bids in your bid response.

 Back to top

Was this helpful?

How can we improve it?

Need more help?

Try these next steps:

Search
Clear search
Close search
Google apps
Main menu
8371716855034554548
true
Search Help Center
true
true
true
true
true
71030
false
false