Whether you are creating an App campaign to drive more app installs, in-app
actions or in-app action value, you will need ad groups and ads.

## Create ad group and criteria

Create an [ad group](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroup) using
[`AdGroupService`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupService). Do *not* specify a `type`
for the ad group.

- (Optional) If the [`advertising_channel_sub_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#advertising_channel_sub_type)
  of the campaign is `APP_CAMPAIGN_FOR_ENGAGEMENT`, you can override the
  default CPA target at the ad group level by setting
  [`target_cpa_micros`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroup#target_cpa_micros).

- If the [`advertising_channel_sub_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#advertising_channel_sub_type)
  is `APP_CAMPAIGN`, you cannot override bid settings at the ad group level.

If the
[`advertising_channel_sub_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#advertising_channel_sub_type)
of the campaign is `APP_CAMPAIGN_FOR_ENGAGEMENT`, you must target a specific
audience by adding an [`AdGroupCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion). Set
the [`user_list`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion#user_list) field to a
[`UserListInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/UserListInfo), where
[`UserListInfo.user_list`](https://developers.google.com/google-ads/api/reference/rpc/v26/UserListInfo#user_list) contains the
resource name of the [`UserList`](https://developers.google.com/google-ads/api/reference/rpc/v26/UserList) to target.

- You cannot override bid settings at the ad group criterion level.

- You cannot *exclude* criteria at the ad group level, so ensure that
  [`negative`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion#negative) is `false`.
  To exclude keywords at the campaign level, use negative keyword shared sets
  ([`CampaignSharedSet`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignSharedSet)).

- If the [`advertising_channel_sub_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#advertising_channel_sub_type)
  is `APP_CAMPAIGN`, you can add an
  [`AdGroupCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion) with an
  [`Audience`](https://developers.google.com/google-ads/api/reference/rpc/v26/Audience) for the purpose of audience signals.

## Create ad group ad

For each logical set of [assets](https://developers.google.com/google-ads/api/docs/assets/overview), including videos,
images, and text, add an [ad group ad](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupAd) with the
corresponding [ad](https://developers.google.com/google-ads/api/reference/rpc/v26/Ad) for the campaign's
[`advertising_channel_sub_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#advertising_channel_sub_type):

- If the subtype is `APP_CAMPAIGN`, use
  [`AppAdInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/AppAdInfo).

- If the subtype is `APP_CAMPAIGN_FOR_ENGAGEMENT`, use
  [`AppEngagementAdInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/AppEngagementAdInfo).

- If the subtype is `APP_CAMPAIGN_FOR_PRE_REGISTRATION`, use
  [`AppPreRegistrationAdInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/AppPreRegistrationAdInfo).

> [!IMPORTANT]
> **Key Point:** You can create text assets for your ad during ad creation. For all other asset types, use existing assets and identify each asset by its resource name. For more detailed information about using assets, see the [Assets](https://developers.google.com/google-ads/api/docs/assets/overview) developer guide.