デマンド ジェネレーション キャンペーンを作成する

最小要件を満たしていることを確認します。デマンド ジェネレーション キャンペーンのアセットは、Discover や YouTube など、視覚とエンターテイメントを重視したサーフェスに配信されるため、高い品質基準を満たしている必要があります。

デマンド ジェネレーション キャンペーンを作成するには:

  1. 予算を作成する。
  2. 適切な入札戦略を使用してデマンド ジェネレーション キャンペーンを作成します。
  3. タイプのない広告グループを作成します。
  4. オーディエンスを作成します。
  5. アセットとデマンド ジェネレーション広告を作成します。

GoogleAdsService.Mutate メソッドを使用して、必要なすべてのエンティティを 1 つの API リクエストで作成することをおすすめします。

Java

This example is not yet available in Java; you can take a look at the other languages.
    

C#

// The below methods create and return MutateOperations that we later provide to
// the GoogleAdsService.Mutate method in order to create the entities in a single
// request. Since the entities for a Demand Gen campaign are closely tied to one-another
// it's considered a best practice to create them in a single Mutate request; the
// entities will either all complete successfully or fail entirely, leaving no
// orphaned entities. See:
// https://developers.google.com/google-ads/api/docs/mutating/overview
MutateOperation campaignBudgetOperation =
    CreateCampaignBudgetOperation(budgetResourceName);
MutateOperation campaignOperation =
    CreateDemandGenCampaignOperation(campaignResourceName, budgetResourceName);
MutateOperation adGroupOperation =
    CreateAdGroupOperation(adGroupResourceName, campaignResourceName);

// Send the operations in a single mutate request.
MutateGoogleAdsRequest mutateGoogleAdsRequest = new MutateGoogleAdsRequest
{
    CustomerId = customerId.ToString()
};
// It's important to create these entities in this order because they depend on
// each other, for example the ad group depends on the
// campaign, and the ad group ad depends on the ad group.
mutateGoogleAdsRequest.MutateOperations.Add(campaignBudgetOperation);
mutateGoogleAdsRequest.MutateOperations.Add(campaignOperation);
mutateGoogleAdsRequest.MutateOperations.Add(adGroupOperation);

mutateGoogleAdsRequest.MutateOperations.AddRange(
    CreateAssetOperations(
        videoAssetResourceName,
        videoId,
        logoResourceName,
        client.Config
    )
);

mutateGoogleAdsRequest.MutateOperations.Add(
    CreateDemandGenAdOperation(
        adGroupResourceName,
        videoAssetResourceName,
        logoResourceName
    )
);

MutateGoogleAdsResponse response =
        googleAdsServiceClient.Mutate(mutateGoogleAdsRequest);
      

PHP

This example is not yet available in PHP; you can take a look at the other languages.
    

Python

# The below methods create and return MutateOperations that we later provide
# to the GoogleAdsService.Mutate method in order to create the entities in a
# single request. Since the entities for a Demand Gen campaign are closely
# tied to one-another it's considered a best practice to create them in a
# single Mutate request; the entities will either all complete successfully
# or fail entirely, leaving no orphaned entities. See:
# https://developers.google.com/google-ads/api/docs/mutating/overview
mutate_operations: List[MutateOperation] = [
    # It's important to create these entities in this order because they
    # depend on each other, for example the ad group depends on the
    # campaign, and the ad group ad depends on the ad group.
    create_campaign_budget_operation(client, budget_resource_name),
    create_demand_gen_campaign_operation(
        client, campaign_resource_name, budget_resource_name
    ),
    create_ad_group_operation(
        client, ad_group_resource_name, campaign_resource_name
    ),
    *create_asset_operations(  # Use iterable unpacking
        client,
        video_asset_resource_name,
        video_id,
        logo_asset_resource_name,
    ),
    create_demand_gen_ad_operation(
        client,
        ad_group_resource_name,
        video_asset_resource_name,
        logo_asset_resource_name,
    ),
]

# Send the operations in a single mutate request.
googleads_service.mutate(
    customer_id=customer_id, mutate_operations=mutate_operations
)
      

Ruby

This example is not yet available in Ruby; you can take a look at the other languages.
    

Perl

This example is not yet available in Perl; you can take a look at the other languages.
    

予算の作成

予算を作成します。デマンド ジェネレーション キャンペーンでは共有予算を使用できません。1 日の予算として十分な金額(目標コンバージョン単価の 15 倍以上)をアカウントに設定することをおすすめします。詳細

Java

private static String addCampaignBudget(GoogleAdsClient googleAdsClient, long customerId) {
  CampaignBudget budget =
      CampaignBudget.newBuilder()
          .setName("Interplanetary Cruise Budget #" + getPrintableDateTime())
          .setDeliveryMethod(BudgetDeliveryMethod.STANDARD)
          .setAmountMicros(500_000)
          .build();

  CampaignBudgetOperation op = CampaignBudgetOperation.newBuilder().setCreate(budget).build();

  try (CampaignBudgetServiceClient campaignBudgetServiceClient =
      googleAdsClient.getLatestVersion().createCampaignBudgetServiceClient()) {
    MutateCampaignBudgetsResponse response =
        campaignBudgetServiceClient.mutateCampaignBudgets(
            Long.toString(customerId), ImmutableList.of(op));
    String budgetResourceName = response.getResults(0).getResourceName();
    System.out.printf("Added budget: %s%n", budgetResourceName);
    return budgetResourceName;
  }
}
      

C#

private static string CreateBudget(GoogleAdsClient client, long customerId)
{
    // Get the BudgetService.
    CampaignBudgetServiceClient budgetService = client.GetService(
        Services.V21.CampaignBudgetService);

    // Create the campaign budget.
    CampaignBudget budget = new CampaignBudget()
    {
        Name = "Interplanetary Cruise Budget #" + ExampleUtilities.GetRandomString(),
        DeliveryMethod = BudgetDeliveryMethod.Standard,
        AmountMicros = 500000
    };

    // Create the operation.
    CampaignBudgetOperation budgetOperation = new CampaignBudgetOperation()
    {
        Create = budget
    };

    // Create the campaign budget.
    MutateCampaignBudgetsResponse response = budgetService.MutateCampaignBudgets(
        customerId.ToString(), new CampaignBudgetOperation[] { budgetOperation });
    return response.Results[0].ResourceName;
}
      

PHP

private static function addCampaignBudget(GoogleAdsClient $googleAdsClient, int $customerId)
{
    // Creates a campaign budget.
    $budget = new CampaignBudget([
        'name' => 'Interplanetary Cruise Budget #' . Helper::getPrintableDatetime(),
        'delivery_method' => BudgetDeliveryMethod::STANDARD,
        'amount_micros' => 500000
    ]);

    // Creates a campaign budget operation.
    $campaignBudgetOperation = new CampaignBudgetOperation();
    $campaignBudgetOperation->setCreate($budget);

    // Issues a mutate request.
    $campaignBudgetServiceClient = $googleAdsClient->getCampaignBudgetServiceClient();
    $response = $campaignBudgetServiceClient->mutateCampaignBudgets(
        MutateCampaignBudgetsRequest::build($customerId, [$campaignBudgetOperation])
    );

    /** @var CampaignBudget $addedBudget */
    $addedBudget = $response->getResults()[0];
    printf("Added budget named '%s'%s", $addedBudget->getResourceName(), PHP_EOL);

    return $addedBudget->getResourceName();
}
      

Python

# Create a budget, which can be shared by multiple campaigns.
campaign_budget_operation: CampaignBudgetOperation = client.get_type(
    "CampaignBudgetOperation"
)
campaign_budget: CampaignBudget = campaign_budget_operation.create
campaign_budget.name = f"Interplanetary Budget {uuid.uuid4()}"
campaign_budget.delivery_method = (
    client.enums.BudgetDeliveryMethodEnum.STANDARD
)
campaign_budget.amount_micros = 500000

# Add budget.
campaign_budget_response: MutateCampaignBudgetsResponse
try:
    budget_operations: List[CampaignBudgetOperation] = [
        campaign_budget_operation
    ]
    campaign_budget_response = (
        campaign_budget_service.mutate_campaign_budgets(
            customer_id=customer_id,
            operations=budget_operations,
        )
    )
except GoogleAdsException as ex:
    handle_googleads_exception(ex)
      

Ruby

# Create a budget, which can be shared by multiple campaigns.
campaign_budget = client.resource.campaign_budget do |cb|
  cb.name = "Interplanetary Budget #{(Time.new.to_f * 1000).to_i}"
  cb.delivery_method = :STANDARD
  cb.amount_micros = 500000
end

operation = client.operation.create_resource.campaign_budget(campaign_budget)

# Add budget.
return_budget = client.service.campaign_budget.mutate_campaign_budgets(
  customer_id: customer_id,
  operations: [operation],
)
      

Perl

# Create a campaign budget, which can be shared by multiple campaigns.
my $campaign_budget =
  Google::Ads::GoogleAds::V21::Resources::CampaignBudget->new({
    name           => "Interplanetary budget #" . uniqid(),
    deliveryMethod => STANDARD,
    amountMicros   => 500000
  });

# Create a campaign budget operation.
my $campaign_budget_operation =
  Google::Ads::GoogleAds::V21::Services::CampaignBudgetService::CampaignBudgetOperation
  ->new({create => $campaign_budget});

# Add the campaign budget.
my $campaign_budgets_response = $api_client->CampaignBudgetService()->mutate({
    customerId => $customer_id,
    operations => [$campaign_budget_operation]});
      

キャンペーンと入札戦略を作成する

予算を作成したら、キャンペーンを作成できます。

デマンド ジェネレーション キャンペーンの AdvertisingChannelTypeDEMAND_GEN です。AdvertisingChannelSubType は設定しないでください。

キャンペーンのコンバージョン目標を設定します。

サポートされている入札戦略は、クリック数の最大化、目標アクション単価、コンバージョン数の最大化、目標広告費用対効果です。

Java

This example is not yet available in Java; you can take a look at the other languages.
    

C#

private MutateOperation CreateDemandGenCampaignOperation(
    string campaignResourceName, string budgetResourceName)
{
    return new MutateOperation
    {
        CampaignOperation = new CampaignOperation
        {
            Create = new Campaign
            {
                Name = $"Demand Gen #{ExampleUtilities.GetRandomString()}",
                // Set the campaign status as PAUSED.
                Status = CampaignStatus.Paused,

                // AdvertisingChannelType must be DEMAND_GEN.
                AdvertisingChannelType = AdvertisingChannelType.DemandGen,

                // Assign the resource name with a temporary ID.
                ResourceName = campaignResourceName,

                // Set the budget using the given budget resource name.
                CampaignBudget = budgetResourceName,

                // Use the Target CPA bidding strategy.
                TargetCpa = new TargetCpa()
                {
                    TargetCpaMicros = 1_000_000,
                },

                ContainsEuPoliticalAdvertising =
                    EuPoliticalAdvertisingStatus.DoesNotContainEuPoliticalAdvertising
            }
        }
    };
}
      

PHP

This example is not yet available in PHP; you can take a look at the other languages.
    

Python

def create_demand_gen_campaign_operation(
    client: GoogleAdsClient,
    campaign_resource_name: str,
    budget_resource_name: str,
) -> MutateOperation:
    """Creates a MutateOperation that creates a new Campaign.

    A temporary ID will be assigned to this campaign so that it can be
    referenced by other objects being created in the same Mutate request.

    Args:
        client: An initialized GoogleAdsClient instance.
        campaign_resource_name: The temporary resource name of the campaign.
        budget_resource_name: The resource name of the budget to assign.

    Returns:
        A MutateOperation for creating a Campaign.
    """
    mutate_operation: MutateOperation = client.get_type("MutateOperation")
    campaign_operation: CampaignOperation = mutate_operation.campaign_operation
    campaign: Campaign = campaign_operation.create
    campaign.name = f"Demand Gen #{uuid4()}"
    # Set the campaign status as PAUSED. The campaign is the only entity in the
    # mutate request that should have its status set.
    campaign.status = client.enums.CampaignStatusEnum.PAUSED
    # AdvertisingChannelType must be DEMAND_GEN.
    campaign.advertising_channel_type = (
        client.enums.AdvertisingChannelTypeEnum.DEMAND_GEN
    )
    # Assign the resource name with a temporary ID.
    campaign.resource_name = campaign_resource_name
    # Set the budget using the given budget resource name.
    campaign.campaign_budget = budget_resource_name
    # Use the Target CPA bidding strategy.
    campaign.bidding_strategy_type = (
        client.enums.BiddingStrategyTypeEnum.TARGET_CPA
    )
    campaign.target_cpa.target_cpa_micros = 1_000_000
    return mutate_operation
      

Ruby

This example is not yet available in Ruby; you can take a look at the other languages.
    

Perl

This example is not yet available in Perl; you can take a look at the other languages.
    

広告グループの作成

タイプのない広告グループを作成し、デマンド ジェネレーション キャンペーンに関連付けます。

デマンド ジェネレーションでは、地域とターゲット言語のグループ条件を広告グループ単位で設定できます。

広告グループを作成する際に、チャネル コントロールを設定して、広告の掲載先を指定することもできます。

Java

This example is not yet available in Java; you can take a look at the other languages.
    

C#

private MutateOperation CreateAdGroupOperation(
    string adGroupResourceName,
    string campaignResourceName
)
{
    return new MutateOperation
    {
        AdGroupOperation = new AdGroupOperation
        {
            // Creates an ad group.
            Create = new AdGroup
            {
                ResourceName = adGroupResourceName,
                Name = $"Earth to Mars Cruises #{ExampleUtilities.GetRandomString()}",
                Status = AdGroupStatus.Enabled,
                Campaign = campaignResourceName,

                // Select the specific channels for the ad group.
                // For further information on Demand Gen channel controls, see
                // https://developers.google.com/google-ads/api/docs/demand-gen/channel-controls
                DemandGenAdGroupSettings = new DemandGenAdGroupSettings
                {
                    ChannelControls = new DemandGenChannelControls
                    {
                        SelectedChannels = new DemandGenSelectedChannels
                        {
                            Gmail = false,
                            Discover = false,
                            Display = false,
                            YoutubeInFeed = true,
                            YoutubeInStream = true,
                            YoutubeShorts = true,
                        }
                    }
                }
            }
        }
    };
}
      

PHP

This example is not yet available in PHP; you can take a look at the other languages.
    

Python

def create_ad_group_operation(
    client: GoogleAdsClient,
    ad_group_resource_name: str,
    campaign_resource_name: str,
) -> MutateOperation:
    """Creates a MutateOperation that creates a new AdGroup.

    Args:
        client: An initialized GoogleAdsClient instance.
        ad_group_resource_name: The temporary resource name of the ad group.
        campaign_resource_name: The temporary resource name of the campaign the
            ad group will belong to.

    Returns:
        A MutateOperation for creating an AdGroup.
    """
    mutate_operation: MutateOperation = client.get_type("MutateOperation")
    ad_group_operation: AdGroupOperation = mutate_operation.ad_group_operation
    # Creates an ad group.
    ad_group: AdGroup = ad_group_operation.create
    ad_group.resource_name = ad_group_resource_name
    ad_group.name = f"Earth to Mars Cruises #{uuid4()}"
    ad_group.status = client.enums.AdGroupStatusEnum.ENABLED
    ad_group.campaign = campaign_resource_name

    # Select the specific channels for the ad group. For further information on
    # Demand Gen channel controls, see:
    # https://developers.google.com/google-ads/api/docs/demand-gen/channel-controls
    selected_channel_controls = (
        ad_group.demand_gen_ad_group_settings.channel_controls.selected_channels
    )
    selected_channel_controls.gmail = False
    selected_channel_controls.discover = False
    selected_channel_controls.display = False
    selected_channel_controls.youtube_in_feed = True
    selected_channel_controls.youtube_in_stream = True
    selected_channel_controls.youtube_shorts = True

    return mutate_operation
      

Ruby

This example is not yet available in Ruby; you can take a look at the other languages.
    

Perl

This example is not yet available in Perl; you can take a look at the other languages.
    

オーディエンスを作成

AdGroupCriterion を使用してオーディエンスを作成して関連付けます。

アセットと広告を作成する

デマンド ジェネレーション キャンペーンでは、次の 3 種類の広告を利用できます。

まず、これらの広告タイプ用のアセットを作成します。各デマンド ジェネレーション広告タイプで利用できるアセットの一覧については、デマンド ジェネレーション キャンペーンのアセットの仕様とベスト プラクティス ガイドをご覧ください。このガイドには、必要なアセットと推奨されるアセットの数に関するガイダンスが記載されています。また、アセットのパフォーマンスを評価してクリエイティブを調整することもおすすめします。レポート セクションでは、デマンド ジェネレーション キャンペーンのパフォーマンス指標を取得する方法について説明しています。

DemandGenCarouselAdInfo には、AdDemandGenCarouselCardAsset という追加の特殊なアセットがあります。

アセットと広告を作成したら、広告を広告グループに追加します。

Java

This example is not yet available in Java; you can take a look at the other languages.
    

C#

private MutateOperation CreateDemandGenAdOperation(
    string adGroupResourceName,
    string videoAssetResourceName,
    string logoResourceName
)
{

    Ad ad = new Ad
    {
        Name = "Demand gen video responsive ad",
        FinalUrls = { "http://example.com/demand_gen" },
        DemandGenVideoResponsiveAd = new DemandGenVideoResponsiveAdInfo
        {
            BusinessName = new AdTextAsset
            {
                Text = "Interplanetary Cruises"
            },

        }
    };

    ad.DemandGenVideoResponsiveAd.Videos.Add(new AdVideoAsset
    {
        Asset = videoAssetResourceName
    });

    ad.DemandGenVideoResponsiveAd.LogoImages.Add(new AdImageAsset
    {
        Asset = logoResourceName
    });

    ad.DemandGenVideoResponsiveAd.Headlines.Add(new AdTextAsset
    {
        Text = "Interplanetary cruises"
    });

    ad.DemandGenVideoResponsiveAd.LongHeadlines.Add(new AdTextAsset
    {
        Text = "Travel the World"
    });

    ad.DemandGenVideoResponsiveAd.Descriptions.Add(new AdTextAsset
    {
        Text = "Book now for an extra discount"
    });


    return new MutateOperation
    {
        AdGroupAdOperation = new AdGroupAdOperation
        {
            Create = new AdGroupAd
            {
                AdGroup = adGroupResourceName,
                Ad = ad
            }
        }
    };
}
      

PHP

This example is not yet available in PHP; you can take a look at the other languages.
    

Python

def create_demand_gen_ad_operation(
    client: GoogleAdsClient,
    ad_group_resource_name: str,
    video_asset_resource_name: str,
    logo_asset_resource_name: str,
) -> MutateOperation:
    """Creates a MutateOperation that creates a new Demand Gen Ad.

    Args:
        client: An initialized GoogleAdsClient instance.
        ad_group_resource_name: The ad group the ad will belong to.
        video_asset_resource_name: The video asset resource name.
        logo_asset_resource_name: The logo asset resource name.

    Returns:
        A MutateOperation for creating an AdGroupAd.
    """
    mutate_operation: MutateOperation = client.get_type("MutateOperation")
    ad_group_ad_operation: AdGroupAdOperation = (
        mutate_operation.ad_group_ad_operation
    )
    ad_group_ad: AdGroupAd = ad_group_ad_operation.create
    ad_group_ad.ad_group = ad_group_resource_name
    ad_group_ad.status = client.enums.AdGroupAdStatusEnum.ENABLED

    ad: Ad = ad_group_ad.ad
    ad.name = "Demand gen multi asset ad"
    ad.final_urls.append(DEFAULT_FINAL_URL)

    demand_gen_ad: DemandGenVideoResponsiveAdInfo = (
        ad.demand_gen_video_responsive_ad
    )
    # Ensure business_name is an AssetLink and assign text to its text_asset.text
    demand_gen_ad.business_name.text = "Interplanetary Cruises"
    # If it needs to be an AssetLink to a text asset,
    # that would require creating another asset.

    # Create AssetLink for video
    video_asset_link: AdVideoAsset = client.get_type("AdVideoAsset")
    video_asset_link.asset = video_asset_resource_name
    demand_gen_ad.videos.append(video_asset_link)

    # Create AssetLink for logo
    logo_image_asset_link: AdImageAsset = client.get_type("AdImageAsset")
    logo_image_asset_link.asset = logo_asset_resource_name
    demand_gen_ad.logo_images.append(logo_image_asset_link)

    # Create AssetLink for headline
    headline_asset_link: AdTextAsset = client.get_type("AdTextAsset")
    headline_asset_link.text = "Interplanetary cruises"
    demand_gen_ad.headlines.append(headline_asset_link)

    # Create AssetLink for long headline
    long_headline_asset_link: AdTextAsset = client.get_type("AdTextAsset")
    long_headline_asset_link.text = "Travel the World"
    demand_gen_ad.long_headlines.append(long_headline_asset_link)

    # Create AssetLink for description
    description_asset_link: AdTextAsset = client.get_type("AdTextAsset")
    description_asset_link.text = "Book now for an extra discount"
    demand_gen_ad.descriptions.append(description_asset_link)

    return mutate_operation
      

Ruby

This example is not yet available in Ruby; you can take a look at the other languages.
    

Perl

This example is not yet available in Perl; you can take a look at the other languages.