Create a Demand Gen ad

A Demand Gen ad builds the creative served to a user when an ad auction is won. AdGroupAd resources configure the relevant creative options under the union field ad_details.

Configure ad details

There are four types of Demand Gen ads. Each AdGroupAd resource can only be a single type. Each type is configured in individual field under the union field ad_details:

A link to the relevant ad type requirements is available in the description of each field. Only one of these fields can be populated when creating an AdGroupAd resource.

Image dimension and resolution requirements by type

Each ad type requires different sizes of image assets.

The following table lists the image types and relevant file restrictions:

Image type
Companion banner

Maximum file size: 150 KB

Dimensions: 300x60

Landscape image

Maximum file size: 5120 KB

Recommended dimensions: 1200x628, Minimum: 600x314

Logo image

Maximum file size: 5120 KB

Recommended dimensions: 1200x1200, Minimum: 128x128

Portrait image

Maximum file size: 5120 KB

Recommended dimensions: 960x1200, Minimum: 480x600

Square image

Maximum file size: 5120 KB

Recommended dimensions: 1200x1200, Minimum: 300x300

Create an ad

Here's how to create a Demand Gen video ad:

Java

// Provide the ID of the parent advertiser.
long advertiserId = advertiser-id;

// Provide the ID of the parent ad group.
long adGroupId = ad-group-id;

// Provide the display name of the ad.
String displayName = display-name;

// Provide the information for the ad creative.
String finalAdUrl = final-ad-url;
String callToAction = call-to-action;
String headline = headline;
String longHeadline = long-headline;
String description = description;
String businessName = business-name;
long youtubeAssetId = youtube-video-asset-id;
long logoAssetId = logo-asset-id;

// Create the ad structure.
AdGroupAd ad =
    new AdGroupAd()
        .setAdGroupId(adGroupId)
        .setDisplayName(displayName)
        .setEntityStatus("ENTITY_STATUS_PAUSED")
        .setDemandGenVideoAd(
            new DemandGenVideoAd()
                .setFinalUrl(finalAdUrl)
                .setCallToAction(callToAction)
                .setHeadlines(Arrays.asList(headline))
                .setLongHeadlines(Arrays.asList(longHeadline))
                .setDescriptions(Arrays.asList(description))
                .setBusinessName(businessName)
                .setVideos(
                    Arrays.asList(
                        new YoutubeVideoDetails()
                            .setVideoAssetId(youtubeAssetId)))
                .setLogo(new ImageAsset().setAssetId(logoAssetId)));

// Configure the create request.
AdGroupAds.Create request =
    service.advertisers().adGroupAds().create(advertiserId, ad);

// Create the ad group.
AdGroupAd response = request.execute();

// Display the new ad.
System.out.printf("Demand Gen ad %s was created.", response.getName());

Python

# Provide the ID of the parent advertiser.
advertiser_id = advertiser-id

# Provide the ID of the parent ad group.
ad_group_id = ad-group-id

# Provide the display name of the ad.
display_name = display-name

# Provide the information for the ad creative.
final_ad_url = final-ad-url
call_to_action = call-to-action
headline = headline
long_headline = long-headline
description = description
business_name = business-name
youtube_asset_id = youtube-video-asset-id
logo_asset_id = logo-asset-id

# Create the ad object.
ad_obj = {
    "adGroupId": ad_group_id,
    "displayName": display_name,
    "entityStatus": "ENTITY_STATUS_PAUSED",
    "demandGenVideoAd": {
        "finalUrl": final_ad_url,
        "callToAction": call_to_action,
        "headlines": [headline],
        "longHeadlines": [long_headline],
        "descriptions": [description],
        "businessName": business_name,
        "videos": [{"videoAssetId": youtube_asset_id}],
        "logo": {"assetId": logo_asset_id}
    }
}

# Build and execute request.
response = (
    service.advertisers()
    .adGroupAds()
    .create(advertiserId=advertiser_id, body=ad_obj)
    .execute()
)

# Display the new ad.
print(f"Demand Gen ad {response['name']} was created.")

PHP

// Provide the ID of the parent advertiser.
$advertiserId = advertiser-id;

// Provide the ID of the parent ad group.
$adGroupId = ad-group-id;

// Provide the display name of the ad.
$displayName = display-name;

// Provide the information for the ad creative.
$finalAdUrl = final-ad-url;
$callToAction = call-to-action;
$headline = headline;
$longHeadline = long-headline;
$description = description;
$businessName = business-name;
$youtubeAssetId = youtube-video-asset-id;
$logoAssetId = logo-asset-id;

// Create the ad structure.
$ad = new Google_Service_DisplayVideo_AdGroupAd();
$ad->setAdGroupId($adGroupId);
$ad->setDisplayName($displayName);
$ad->setEntityStatus('ENTITY_STATUS_PAUSED');

// Create the Demand Gen video ad creative.
$demandGenVideoAd = new Google_Service_DisplayVideo_DemandGenVideoAd();
$demandGenVideoAd->setFinalUrl($finalAdUrl);
$demandGenVideoAd->setCallToAction($callToAction);
$demandGenVideoAd->setHeadlines(array($headline));
$demandGenVideoAd->setLongHeadlines(array($longHeadline));
$demandGenVideoAd->setDescriptions(array($description));
$demandGenVideoAd->setBusinessName($businessName);

// Assign the video asset to the ad creative.
$youtubeVideoAsset =
    new Google_Service_DisplayVideo_YoutubeVideoDetails();
$youtubeVideoAsset->setVideoAssetId($youtubeAssetId);
$demandGenVideoAd->setVideos(array($youtubeVideoAsset));

// Assign the logo asset to the ad creative.
$imageAsset = new Google_Service_DisplayVideo_ImageAsset();
$imageAsset->setAssetId($logoAssetId);
$demandGenVideoAd->setLogo($imageAsset);

// Assign the Demand Gen video ad to the ad.
$ad->setDemandGenVideoAd($demandGenVideoAd);

// Call the API, creating the ad under the advertiser and ad group given.
try {
    $result = $this->service->advertisers_adGroupAds->create(
        $advertiserId,
        $ad
    );
} catch (\Exception $e) {
    $this->renderError($e);
    return;
}

// Display the new ad.
printf('<p>Ad %s was created.</p>', $result['name']);