Demand Gen campaigns offer unique audience targeting features not supported by
other campaign types.

For example, you can use [Lookalike audience segments](https://developers.google.com/google-ads/api/docs/remarketing/audience-segments/lookalike-audiences) to
target users who share characteristics with your existing customers. Read more
about Lookalike segments in the Help Center article [Use Lookalike segments to
grow your audience](https://support.google.com/google-ads/answer/13541369).

Additionally, you can configure audience targeting [at the ad group
level](https://developers.google.com/google-ads/api/docs/remarketing/audiences#ad-group-criterion) using [`AdGroupCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion).

## `AudienceInfo` targeting criteria

Targeting an audience in a Demand Gen ad group requires the following steps:

1. When creating the target [`AdGroup`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroup), set [`audience_setting.use_audience_grouped`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroup.AudienceSetting#use_audience_grouped) to `true` (this setting is immutable after the ad group is created). You can also optionally set `campaign.audience_setting.use_audience_grouped` to `true` when creating the campaign to prevent segment and demographic exclusions at the campaign level.
2. Create or retrieve an [`Audience`](https://developers.google.com/google-ads/api/reference/rpc/v26/Audience) resource using [`AudienceService`](https://developers.google.com/google-ads/api/reference/rpc/v26/AudienceService) and obtain its resource name or ID.
3. Create an [`AdGroupCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion) with an [`AudienceInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/AudienceInfo) criterion whose [`audience`](https://developers.google.com/google-ads/api/reference/rpc/v26/AudienceInfo#audience) field is set to the audience's resource name.

### Inspect `MutateAudienceResult` and attach `AudienceInfo`

When creating an audience with [`AudienceService.MutateAudiences`](https://developers.google.com/google-ads/api/reference/rpc/v26/AudienceService/MutateAudiences),
each operation returns a [`MutateAudienceResult`](https://developers.google.com/google-ads/api/reference/rpc/v26/MutateAudienceResult). You can
obtain the `audience_id` by parsing the returned `resource_name`, and you can
inspect mutable fields (such as `name`) on the returned `audience` object when
`response_content_type` is set to `MUTABLE_RESOURCE`. Then assign the
`resource_name` to an [`AdGroupCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion) on an `AdGroup`
created with [`audience_setting.use_audience_grouped`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroup.AudienceSetting#use_audience_grouped) set
to `true`, and wrap the `AdGroupCriterion` in an
[`AdGroupCriterionOperation`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterionOperation) passed to
[`AdGroupCriterionService.MutateAdGroupCriteria`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterionService/MutateAdGroupCriteria):

    # Step 1: Inspect MutateAudienceResult to get resource_name and audience_id.
    for result in response.results:
        resource_name = result.resource_name
        # Format: customers/{customer_id}/audiences/{audience_id}
        audience_id = audience_service.parse_audience_path(resource_name)[
            "audience_id"
        ]
        print(
            f"Created audience with resource_name '{resource_name}' "
            f"and audience_id '{audience_id}'."
        )

        # Access mutable fields on result.audience when MUTABLE_RESOURCE is set:
        if result.audience.resource_name:
            print(f"Audience name from mutable resource: {result.audience.name}")

        # Step 2: Target the audience at the ad group level with AdGroupCriterion.
        # The target AdGroup must have audience_setting.use_audience_grouped = True
        # set when the ad group is created.
        ad_group_criterion_operation = client.get_type("AdGroupCriterionOperation")
        ad_group_criterion = ad_group_criterion_operation.create
        ad_group_criterion.ad_group = ad_group_resource_name
        ad_group_criterion.audience.audience = resource_name

        ad_group_criterion_service = client.get_service("AdGroupCriterionService")
        ad_group_criterion_service.mutate_ad_group_criteria(
            customer_id=customer_id,
            operations=[ad_group_criterion_operation],
        )