This guide describes best practices for bidding on mobile app inventory,
including high-engagement ads, app install ads, and re-engagement ads.

## Bid on high-engagement ads

High-engagement ads (HEA) are a type of [app interstitial](https://support.google.com/admanager/answer/10320506) ad
inventory with increased visibility or user interaction requirements. For
example, HEA inventory is suitable for placing a creative that includes a short
playable demo of your advertised app before prompting the user to install the
advertised app. If your pretargeting configuration lets your bidding endpoint
receive bid requests for one or more supported formats, the inventory
you receive in bid requests for those formats can be high-engagement ads.
High-engagement ads are supported for app interstitial ads and
[app rewarded](https://support.google.com/admob/answer/7372450) ads that use the VAST video creative format.

To learn more about rendering behavior for high-engagement ads, see
[About high-engagement ads](https://support.google.com/authorizedbuyers/answer/16891088#high-engagement-ads).

### Bid with VAST video creatives

Bid requests that you receive for high-engagement ad inventory for the VAST
video format set the following fields:

| Field | Description |
|---|---|
| `BidRequest.imp.ext.highengagement` | Set to `true` if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value, or `1` if the `bidProtocol` field is set to the `OPENRTB_JSON` enum value. |
| `BidRequest.imp.instl` | Set to `true` if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value, or `1` if the `bidProtocol` field is set to the `OPENRTB_JSON` enum value. |
| `BidRequest.imp.video.companionad` | Contains eligible sizes for the end card you can include with your video in the bid response. |
| `BidRequest.imp.video.companiontype` | If your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value, this is set to the `HTML` or `COMPANION_IFRAME` enum value. If your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_JSON` enum value, this is set to `2` or `3`. |
| `BidRequest.imp.video.maxduration` | Has a higher maximum duration than standard interstitial VAST video ads. You can place longer videos on high-engagement ad inventory. |

> [!NOTE]
> **Note:** You can also receive high-engagement app rewarded ads. App rewarded ads also set the `BidRequest.imp.rwdd` field to `true` if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value, or `1` if the `bidProtocol` field is set to the `OPENRTB_JSON` enum value.

Your bid response must include the following fields:

| Field | Description |
|---|---|
| `BidResponse.seatbid.bid.crid` | You must set this to the creative ID of the video creative you want to place. The creative must be an approved video creative. Otherwise, your bid is ineligible to win the auction. |
| `BidResponse.seatbid.bid.adm` | You must set this field to either the VAST XML or video URL linking to a VAST XML document for the video creative you want to place. If your video includes a companion ad, the companion ad specified in your video creative's VAST XML must be consistent with the `BidRequest.imp.video.companionad` and `BidRequest.imp.video.companiontype` fields from the bid request. |
| `BidResponse.seatbid.bid.bundle` | You must set this field to the ID of the advertised app on the corresponding app store. - For Android apps, this field is a package ID found in the Play Store URL. For example, if the Play Store URL is `https://play.google.com/store/apps/details?id=com.example.myawesomeapp`, the package ID is `com.example.myawesomeapp`. - For iOS apps, this field is a numeric string ID for the app found in the Apple App Store URL. For example, if the Apple App Store URL is `https://apps.apple.com/app/id123456789`, the numeric string ID is `123456789`. |

Your video can optionally have an end card containing an HTML snippet that
displays after the video ends. Google also displays a generated end card that
is based on the app specified in the `BidResponse.seatbid.bid.bundle` field.

You can include end cards in your video creative by including `Companion` nodes
in your video's VAST XML. If you want to display an end card, your bid must
include a video with a companion ad matching one or more types specified in the
`BidRequest.imp.video.companiontype` field. For additional information about end
cards, see [Render an end card for a mobile video ad](https://support.google.com/authorizedbuyers/answer/6276890).

## Drive installs with app install ads

App install ads encourage users of a publisher's mobile app to download and
install an advertised app. App install ads are supported for all app
interstitial ad inventory in the following creative formats:

- [VAST video](https://support.google.com/authorizedbuyers/answer/7357662)
- HTML
- [Native video](https://support.google.com/authorizedbuyers/answer/6339083)

### Identify `BidRequest` signals

You can bid with app install ads in response to bid requests for Android and
iOS [mobile app interstitial](https://support.google.com/admanager/answer/10320506) inventory. The following fields
are always set for mobile app interstitial inventory:

| Field | Description |
|---|---|
| `BidRequest.app.bundle` | An identifier for the publisher app. Set to a package name as seen in the Google Play store, such as `com.google.android.youtube` for Android apps. Set to a numeric ID as seen in the Apple App Store for iOS apps. |
| `BidRequest.imp.instl` | Set to `true` if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value, or `1` if the `bidProtocol` field is set to the `OPENRTB_JSON` enum value. |
| `BidRequest.device.devicetype` | Set to the `HIGHEND_PHONE` or `TABLET` enum value if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value. Set to `4` or `5` if your [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_JSON` enum value. |

> [!IMPORTANT]
> **Important:** Google recommends that you use the `BidRequest.bapp` field to identify app IDs that the publisher blocked. If you include an app install ad for a blocked application in your bid response, your bid is ineligible to win the Real-time Bidding auction.

### Populate `BidResponse` fields

You can bid with app install ads for mobile inventory of any interstitial
format that accepts the supported creative formats. Your bid response must
set the following fields in order to successfully bid with an app install
ad:

| Field | Description |
|---|---|
| `BidResponse.seatbid.bid.bundle` | You must set this field to the ID of the advertised app on the corresponding app store. - For Android apps, this field is a package ID found in the Play Store URL. For example, if the Play Store URL is `https://play.google.com/store/apps/details?id=com.example.myawesomeapp`, the package ID is `com.example.myawesomeapp`. - For iOS apps, this field is a numeric string ID for the app found in the Apple App Store URL. For example, if the Apple App Store is `https://apps.apple.com/app/id123456789`, the numeric string ID is `123456789`. |
| `BidResponse.seatbid.bid.ext.clickurl` | You must set this field to the URL of the final destination, excluding any intermediate calls to an ad server that are unrelated to the final landing page. You must set this field to a value that is consistent with the value you provide in the `BidResponse.seatbid.bid.bundle` field. For example, for an Android app found in the Play Store, this might be set to `https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1`. > [!NOTE] > **Note:** Google recommends that you set the `referrer` query parameter for clickthrough URLs linking to the Play Store. When the app is installed and opened, the value you specify is used to attribute the app installation to a campaign. To learn more about the formatting of the `referrer` query parameter, see [Play Campaign URL Builder.](https://ga-dev-tools.google/campaign-url-builder/play/) |
| `BidResponse.seatbid.bid.ext.app_promotion_type` | You must set this field to the `INSTALLS` enum value if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value, or `1` if the `bidProtocol` field is set to the `OPENRTB_JSON` enum value. This field indicates that you want the specified creative rendered as an app install ad. |

> [!IMPORTANT]
> **Important:** Rendering behavior differs depending on whether the advertised app is installed. To learn more about how the rendering behavior differs, see [About app install ads](https://support.google.com/authorizedbuyers/answer/16891088#app-install-ads).

### Use consistent clickthrough URLs

The clickthrough URL you specify in the `BidResponse.seatbid.bid.ext.clickurl`
field must be identical to the landing page URL that is specified in your
creative. For examples of creatives in supported formats that are consistent
with the `clickurl` field, see
[Use consistent clickthrough URLs](https://developers.google.com/authorized-buyers/rtb/get-started/response-guide#use-consistent-clickthrough-urls).

## Re-engage users with re-engagement ads

Re-engagement ads target a user of a publisher's mobile app who has already
downloaded and installed the advertised app, and direct the user to a specific
location in the advertised app using a deep link. To learn more about deep
links, see the following articles:

- **Android** : [About deep links](https://developer.android.com/training/app-links)
- **iOS** : [Allowing apps and websites to link to your content](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content/)

Re-engagement ads are supported for all app interstitial ad inventory in the
following creative formats:

- [VAST video](https://support.google.com/authorizedbuyers/answer/7357662)
- HTML
- [Native video](https://support.google.com/authorizedbuyers/answer/6339083)

### Identify `BidRequest` signals

You can bid with re-engagement ads in response to bid requests for mobile app
interstitial inventory. The following fields are always set for mobile app
interstitial inventory:

| Field | Description |
|---|---|
| `BidRequest.app.bundle` | An identifier for the publisher app. Set to a package name as seen in the Google Play store, such as `com.google.android.youtube` for Android apps. Set to a numeric ID as seen in the Apple App Store for iOS apps. |
| `BidRequest.imp.instl` | Set to `true` if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value, or `1` if the `bidProtocol` field is set to the `OPENRTB_JSON` enum value. |
| `BidRequest.device.devicetype` | Set to the `HIGHEND_PHONE` or `TABLET` enum value if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value. Set to `4` or `5` if your [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_JSON` enum value. |

> [!IMPORTANT]
> **Important:** Google recommends that you enable the `BidRequest.bapp` field to identify app IDs the publisher blocked. You can enable the `BidRequest.bapp` field by contacting your technical account manager, or using the [Contact us](https://support.google.com/authorizedbuyers/gethelp) form. If you include a re-engagement ad for a blocked application in your bid response, your bid is ineligible to win the Real-time Bidding auction.

### Populate `BidResponse` fields

You can bid with re-engagement ads for mobile inventory of any interstitial
format that accepts the supported creative formats. Your bid response must
set the following fields to successfully bid with a re-engagement ad:

| Field | Description |
|---|---|
| `BidResponse.seatbid.bid.bundle` | You must set this field to the ID of the advertised app on its corresponding app store. - For Android apps, this is a package ID found in the Play Store URL. For example, if the Play Store URL is `https://play.google.com/store/apps/details?id=com.google.android.youtube`, the package ID is `com.google.android.youtube`. - For iOS apps, this is a numeric string ID for the app found in the Apple App Store URL. For example, if the Apple App Store URL is `https://apps.apple.com/us/app/id123456789`, the numeric string ID is `123456789`. |
| `BidResponse.seatbid.bid.ext.clickurl` | You must set this field to a URL deep link that opens specific content in the advertised app. Google recommends that you use [Universal Links](https://developer.apple.com/documentation/xcode/supporting-universal-links-in-your-app) for iOS and [Android App Links](https://developer.android.com/studio/write/app-link-indexing) for Android. Custom URL schemes aren't supported. For example, if you place a re-engagement ad for the YouTube app, you could link to a specific video by setting the `clickurl` field to a value such as `https://www.youtube.com/watch?v=a1b2c3d4e5f`. |
| `BidResponse.seatbid.bid.ext.app_promotion_type` | You must set this field to the `ENGAGEMENT` enum value if your bidding [endpoint](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.endpoints) has the `bidProtocol` field set to the `OPENRTB_PROTOBUF` enum value, or `2` if the `bidProtocol` field is set to the `OPENRTB_JSON` enum value. These values indicate that you want the specified creative rendered as a re-engagement ad. |
| `BidResponse.seatbid.bid.ext.engagementclickfailureurl` | You can optionally set this field to a URL that receives a ping when Google Mobile Ads SDK fails to open the app through your specified clickthrough URL. Google Mobile Ads SDK can fail to open the app when the app isn't installed or the specified clickthrough URL isn't a valid deep link. |

> [!IMPORTANT]
> **Important:** Rendering behavior differs if you set the `app_promotion_type` field to values other than the `ENGAGEMENT` enum value for endpoints with their bidding protocol set to the `OPENRTB_PROTOBUF` enum value, or `2` for endpoints with their bidding protocol set to the `OPENRTB_JSON` enum value. Additionally, rendering behavior differs depending on whether the advertised app is installed on the user's device. To learn more about rendering differences, see [About re-engagement ads](https://support.google.com/authorizedbuyers/answer/16891088#re-engagement-ads).