You can retrieve reporting attributes and performance metrics for Demand Gen
campaigns at the campaign, ad, and asset levels.

## Campaign-level reporting

As with other campaign types, you can use
[`GoogleAdsService.SearchStream`](https://developers.google.com/google-ads/api/reference/rpc/v26/GoogleAdsService/SearchStream)
to retrieve attributes and performance metrics for Demand Gen campaigns:

    SELECT
      campaign.id,
      campaign.status,
      campaign.bidding_strategy_type,
      metrics.impressions,
      metrics.clicks,
      metrics.cost_micros
    FROM campaign
    WHERE campaign.advertising_channel_type = DEMAND_GEN

To segment clicks in reporting for Demand Gen campaigns by click type, filter by
`segments.click_type = CROSS_NETWORK`:

    SELECT
      campaign.id,
      segments.click_type,
      metrics.clicks
    FROM campaign
    WHERE campaign.advertising_channel_type = DEMAND_GEN
      AND segments.click_type = CROSS_NETWORK

To break down Demand Gen performance by channel (such as `YOUTUBE`, `DISCOVER`,
`GMAIL`, `MAPS`, or `CONTENT`) and YouTube surface (`YOUTUBE_INSTREAM`,
`YOUTUBE_INFEED`, `YOUTUBE_SHORTS`, or `UNSEGMENTED`), select both
`segments.ad_network_type` and `segments.ad_sub_network_type` (note that
`segments.ad_sub_network_type` must always be selected together with
`segments.ad_network_type`):

    SELECT
      campaign.id,
      segments.ad_network_type,
      segments.ad_sub_network_type,
      metrics.impressions,
      metrics.clicks,
      metrics.cost_micros,
      metrics.video_trueview_views
    FROM campaign
    WHERE campaign.advertising_channel_type = DEMAND_GEN

## Ad-level reporting

The Google Ads API supports Demand Gen multi-asset, carousel, video responsive, and
product ads
([`DemandGenMultiAssetAdInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/DemandGenMultiAssetAdInfo),
[`DemandGenCarouselAdInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/DemandGenCarouselAdInfo),
[`DemandGenVideoResponsiveAdInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/DemandGenVideoResponsiveAdInfo), and
[`DemandGenProductAdInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/DemandGenProductAdInfo)). Use these queries with
[`GoogleAdsService.SearchStream`](https://developers.google.com/google-ads/api/reference/rpc/v26/GoogleAdsService/SearchStream) to retrieve their attributes
and metrics:

    SELECT
      ad_group_ad.ad.id,
      ad_group_ad.ad.type,
      ad_group_ad.ad.demand_gen_multi_asset_ad.marketing_images,
      ad_group_ad.ad.demand_gen_multi_asset_ad.square_marketing_images,
      ad_group_ad.ad.demand_gen_multi_asset_ad.portrait_marketing_images,
      ad_group_ad.ad.demand_gen_multi_asset_ad.tall_portrait_marketing_images,
      ad_group_ad.ad.demand_gen_multi_asset_ad.classic_display_images,
      ad_group_ad.ad.demand_gen_multi_asset_ad.logo_images,
      ad_group_ad.ad.demand_gen_multi_asset_ad.headlines,
      ad_group_ad.ad.demand_gen_multi_asset_ad.descriptions,
      ad_group_ad.ad.demand_gen_multi_asset_ad.business_name,
      ad_group_ad.ad.demand_gen_multi_asset_ad.call_to_action_text,
      metrics.impressions,
      metrics.clicks,
      metrics.cost_micros
    FROM ad_group_ad
    WHERE ad_group_ad.ad.type = DEMAND_GEN_MULTI_ASSET_AD

    SELECT
      ad_group_ad.ad.id,
      ad_group_ad.ad.type,
      ad_group_ad.ad.demand_gen_carousel_ad.business_name,
      ad_group_ad.ad.demand_gen_carousel_ad.logo_image,
      ad_group_ad.ad.demand_gen_carousel_ad.headline,
      ad_group_ad.ad.demand_gen_carousel_ad.description,
      ad_group_ad.ad.demand_gen_carousel_ad.call_to_action_text,
      ad_group_ad.ad.demand_gen_carousel_ad.carousel_cards,
      metrics.impressions,
      metrics.clicks,
      metrics.cost_micros
    FROM ad_group_ad
    WHERE ad_group_ad.ad.type = DEMAND_GEN_CAROUSEL_AD

    SELECT
      ad_group_ad.ad.id,
      ad_group_ad.ad.type,
      ad_group_ad.ad.demand_gen_video_responsive_ad.breadcrumb1,
      ad_group_ad.ad.demand_gen_video_responsive_ad.breadcrumb2,
      ad_group_ad.ad.demand_gen_video_responsive_ad.business_name,
      ad_group_ad.ad.demand_gen_video_responsive_ad.call_to_actions,
      ad_group_ad.ad.demand_gen_video_responsive_ad.companion_banners,
      ad_group_ad.ad.demand_gen_video_responsive_ad.descriptions,
      ad_group_ad.ad.demand_gen_video_responsive_ad.headlines,
      ad_group_ad.ad.demand_gen_video_responsive_ad.logo_images,
      ad_group_ad.ad.demand_gen_video_responsive_ad.long_headlines,
      ad_group_ad.ad.demand_gen_video_responsive_ad.videos,
      metrics.impressions,
      metrics.clicks,
      metrics.cost_micros,
      metrics.video_trueview_views
    FROM ad_group_ad
    WHERE ad_group_ad.ad.type = DEMAND_GEN_VIDEO_RESPONSIVE_AD

    SELECT
      ad_group_ad.ad.id,
      ad_group_ad.ad.type,
      ad_group_ad.ad.demand_gen_product_ad.headline,
      ad_group_ad.ad.demand_gen_product_ad.description,
      ad_group_ad.ad.demand_gen_product_ad.logo_image,
      ad_group_ad.ad.demand_gen_product_ad.breadcrumb1,
      ad_group_ad.ad.demand_gen_product_ad.breadcrumb2,
      ad_group_ad.ad.demand_gen_product_ad.business_name,
      ad_group_ad.ad.demand_gen_product_ad.call_to_action,
      metrics.impressions,
      metrics.clicks,
      metrics.cost_micros
    FROM ad_group_ad
    WHERE ad_group_ad.ad.type = DEMAND_GEN_PRODUCT_AD

You can also query all Demand Gen ad types together in a single request:

    SELECT
      ad_group_ad.ad.id,
      ad_group_ad.ad.type,
      ad_group_ad.ad.demand_gen_multi_asset_ad.headlines,
      ad_group_ad.ad.demand_gen_carousel_ad.headline,
      ad_group_ad.ad.demand_gen_video_responsive_ad.headlines,
      ad_group_ad.ad.demand_gen_product_ad.headline,
      ad_group_ad.ad.demand_gen_product_ad.description,
      ad_group_ad.ad.demand_gen_product_ad.business_name,
      metrics.impressions,
      metrics.clicks,
      metrics.cost_micros
    FROM ad_group_ad
    WHERE ad_group_ad.ad.type IN (
      DEMAND_GEN_MULTI_ASSET_AD,
      DEMAND_GEN_CAROUSEL_AD,
      DEMAND_GEN_VIDEO_RESPONSIVE_AD,
      DEMAND_GEN_PRODUCT_AD
    )

## Asset-level reporting

Demand Gen campaigns have a specialized asset type for carousel cards
(`DEMAND_GEN_CAROUSEL_CARD`). Use
[`GoogleAdsService.SearchStream`](https://developers.google.com/google-ads/api/reference/rpc/v26/GoogleAdsService/SearchStream) to retrieve these assets:

    SELECT
      asset.id,
      asset.demand_gen_carousel_card_asset.marketing_image_asset,
      asset.demand_gen_carousel_card_asset.square_marketing_image_asset,
      asset.demand_gen_carousel_card_asset.portrait_marketing_image_asset,
      asset.demand_gen_carousel_card_asset.headline,
      asset.demand_gen_carousel_card_asset.call_to_action_text
    FROM asset
    WHERE asset.type = DEMAND_GEN_CAROUSEL_CARD

You can also retrieve performance metrics for `DEMAND_GEN_CAROUSEL_CARD` assets
using `ad_group_ad_asset_view`:

    SELECT
      asset.id,
      asset.name,
      asset.type,
      metrics.impressions
    FROM ad_group_ad_asset_view
    WHERE ad_group_ad_asset_view.field_type = DEMAND_GEN_CAROUSEL_CARD

## Unsupported entities

While standard Demand Gen video responsive ads
(`DEMAND_GEN_VIDEO_RESPONSIVE_AD`) are supported, deprecated legacy Discovery
video ads that show up in the Google Ads UI with ad type "Demand Gen video ad
(legacy)" are not supported by the Google Ads API and won't be returned by
[`GoogleAdsService.SearchStream`](https://developers.google.com/google-ads/api/reference/rpc/v26/GoogleAdsService/SearchStream) or
[`GoogleAdsService.Search`](https://developers.google.com/google-ads/api/reference/rpc/v26/GoogleAdsService/Search).