AI-generated Key Takeaways
-
The code examples demonstrate how to add a data exclusion to a Google Ads account using the Google Ads API.
-
This data exclusion is set at the channel level and applies to all Search campaigns within the specified time interval.
-
The purpose of this data exclusion is to prevent conversions within the specified timeframe from being used by Smart Bidding strategies.
-
The exclusion period is defined by a start and end date and time provided in 'yyyy-MM-dd HH:mm:ss' format.
-
The examples utilize the
BiddingDataExclusionServiceto create a newBiddingDataExclusionresource with the desired properties.
Java
// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.ads.googleads.examples.advancedoperations ; import static com.google.ads.googleads.examples.utils.CodeSampleHelper.getPrintableDateTime ; import com.beust.jcommander.Parameter ; import com.google.ads.googleads.examples.utils.ArgumentNames ; import com.google.ads.googleads.examples.utils.CodeSampleParams ; import com.google.ads.googleads.lib.GoogleAdsClient ; import com.google.ads.googleads.v22.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType ; import com.google.ads.googleads.v22.enums.SeasonalityEventScopeEnum.SeasonalityEventScope ; import com.google.ads.googleads.v22.errors.GoogleAdsError ; import com.google.ads.googleads.v22.errors.GoogleAdsException ; import com.google.ads.googleads.v22.resources.BiddingDataExclusion ; import com.google.ads.googleads.v22.services.BiddingDataExclusionOperation ; import com.google.ads.googleads.v22.services.BiddingDataExclusionServiceClient ; import com.google.ads.googleads.v22.services.MutateBiddingDataExclusionsResponse ; import com.google.common.collect.ImmutableList ; import java.io.FileNotFoundException ; import java.io.IOException ; /** * Adds a data exclusion for all search campaigns that excludes conversions from being used by Smart * Bidding for the time interval specified. * * <p>For more information on using data exclusions, see * https://developers.google.com/google-ads/api/docs/campaigns/bidding/data-exclusions. */ public class AddBiddingDataExclusion { private static class AddBiddingDataExclusionParams extends CodeSampleParams { @Parameter ( names = ArgumentNames . CUSTOMER_ID , required = true , description = "The client customer ID of the Google Ads account that the data exclusion will" + " be added to." ) private Long customerId ; @Parameter ( names = ArgumentNames . START_DATE_TIME , required = true , description = "The start date time in yyyy-MM-dd HH:mm:ss format of the data exclusion period." ) private String startDateTime ; @Parameter ( names = ArgumentNames . END_DATE_TIME , required = true , description = "The end date time in yyyy-MM-dd HH:mm:ss format of the data exclusion period." ) private String endDateTime ; } public static void main ( String [] args ) throws IOException { AddBiddingDataExclusionParams params = new AddBiddingDataExclusionParams (); if ( ! params . parseArguments ( args )) { // Either pass the required parameters for this example on the command line, or insert them // into the code here. See the parameter class definition above for descriptions. params . customerId = Long . parseLong ( "INSERT_CUSTOMER_ID_HERE" ); params . startDateTime = "INSERT_START_DATE_TIME_HERE" ; params . endDateTime = "INSERT_END_DATE_TIME_HERE" ; } GoogleAdsClient googleAdsClient = null ; try { googleAdsClient = GoogleAdsClient . newBuilder (). fromPropertiesFile (). build (); } catch ( FileNotFoundException fnfe ) { System . err . printf ( "Failed to load GoogleAdsClient configuration from file. Exception: %s%n" , fnfe ); System . exit ( 1 ); } catch ( IOException ioe ) { System . err . printf ( "Failed to create GoogleAdsClient. Exception: %s%n" , ioe ); System . exit ( 1 ); } try { new AddBiddingDataExclusion () . runExample ( googleAdsClient , params . customerId , params . startDateTime , params . endDateTime ); } catch ( GoogleAdsException gae ) { // GoogleAdsException is the base class for most exceptions thrown by an API request. // Instances of this exception have a message and a GoogleAdsFailure that contains a // collection of GoogleAdsErrors that indicate the underlying causes of the // GoogleAdsException. System . err . printf ( "Request ID %s failed due to GoogleAdsException. Underlying errors:%n" , gae . getRequestId ()); int i = 0 ; for ( GoogleAdsError googleAdsError : gae . getGoogleAdsFailure (). getErrorsList ()) { System . err . printf ( " Error %d: %s%n" , i ++ , googleAdsError ); } System . exit ( 1 ); } } /** * Adds a "CHANNEL" scoped data exclusion for the client customer ID and dates specified. * * @param googleAdsClient the GoogleAdsClient * @param customerId the client ID of the Google Ads account * @param startDateTime the start time of the data exclusion (in yyyy-MM-dd HH:mm:ss format) in * the account's timezone * @param endDateTime the end time of the data exclusion (in yyyy-MM-dd HH:mm:ss format) in the * account's timezone */ private void runExample ( GoogleAdsClient googleAdsClient , Long customerId , String startDateTime , String endDateTime ) { try ( BiddingDataExclusionServiceClient DataExclusionServiceClient = googleAdsClient . getLatestVersion (). createBiddingDataExclusionServiceClient ()) { BiddingDataExclusion DataExclusion = BiddingDataExclusion . newBuilder () // A unique name is required for every data exclusion. . setName ( "Data exclusion #" + getPrintableDateTime ()) // The CHANNEL scope applies the data exclusion to all campaigns of specific // advertising channel types. In this example, the exclusion will only apply to // Search campaigns. Use the CAMPAIGN scope to instead limit the scope to specific // campaigns. . setScope ( SeasonalityEventScope . CHANNEL ) . addAdvertisingChannelTypes ( AdvertisingChannelType . SEARCH ) // If setting scope CAMPAIGN, add individual campaign resource name(s) according to // the commented out line below. // .addCampaigns("INSERT_CAMPAIGN_RESOURCE_NAME_HERE") . setStartDateTime ( startDateTime ) . setEndDateTime ( endDateTime ) . build (); BiddingDataExclusionOperation operation = BiddingDataExclusionOperation . newBuilder (). setCreate ( DataExclusion ). build (); MutateBiddingDataExclusionsResponse response = DataExclusionServiceClient . mutateBiddingDataExclusions ( customerId . toString (), ImmutableList . of ( operation )); System . out . printf ( "Added data exclusion with resource name: %s%n" , response . getResults ( 0 ). getResourceName ()); } } }
C#
// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. using CommandLine ; using Google.Ads.Gax.Examples ; using Google.Ads.GoogleAds.Lib ; using Google.Ads.GoogleAds.V22.Errors ; using Google.Ads.GoogleAds.V22.Resources ; using Google.Ads.GoogleAds.V22.Services ; using System ; using System.Collections.Generic ; using static Google . Ads . GoogleAds . V22 . Enums . AdvertisingChannelTypeEnum . Types ; using static Google . Ads . GoogleAds . V22 . Enums . SeasonalityEventScopeEnum . Types ; namespace Google.Ads.GoogleAds.Examples.V22 { /// <summary> /// This code example adds a channel-level data exclusion that excludes conversions from /// being used by Smart Bidding for the time interval specified. /// /// For more information on using data exclusions, see /// https://developers.google.com/google-ads/api/docs/campaigns/bidding/data-exclusions. /// </summary> public class AddBiddingDataExclusion : ExampleBase { /// <summary> /// Command line options for running the <see cref="AddBiddingDataExclusion"/> example. /// </summary> public class Options : OptionsBase { /// <summary> /// The Google Ads customer ID for which the call is made. /// </summary> [Option("customerId", Required = true, HelpText = "The Google Ads customer ID for which the call is made.")] public long CustomerId { get ; set ; } /// <summary> /// The start date time in yyyy-MM-dd HH:mm:ss format of the data exclusion period. /// </summary> [Option("startDateTime", Required = true, HelpText = "The start date time in yyyy-MM-dd HH:mm:ss format of the data exclusion period.")] public string StartDateTime { get ; set ; } /// <summary> /// The end date time in yyyy-MM-dd HH:mm:ss format of the data exclusion period. /// </summary> [Option("endDateTime", Required = true, HelpText = "The end date time in yyyy-MM-dd HH:mm:ss format of the data exclusion period.")] public string EndDateTime { get ; set ; } } /// <summary> /// Main method, to run this code example as a standalone application. /// </summary> /// <param name="args">The command line arguments.</param> public static void Main ( string [] args ) { Options options = ExampleUtilities . ParseCommandLine<Options> ( args ); AddBiddingDataExclusion codeExample = new AddBiddingDataExclusion (); Console . WriteLine ( codeExample . Description ); codeExample . Run ( new GoogleAdsClient (), options . CustomerId , options . StartDateTime , options . EndDateTime ); } /// <summary> /// Returns a description about the code example. /// </summary> public override string Description = > "This code example adds a channel-level data exclusion that excludes conversions " + "from being used by Smart Bidding for the time interval specified. For more " + "information on using data exclusions, see " + "https://developers.google.com/google-ads/api/docs/campaigns/bidding/data-exclusions." ; /// <summary> /// Runs the code example. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> /// <param name="startDateTime">The start time of the data exclusion (in /// yyyy-MM-dd HH:mm:ss format) in the account's timezone.</param> /// <param name="endDateTime">The end time of the data exclusion (in /// yyyy-MM-dd HH:mm:ss format) in the account's timezone.</param> public void Run ( GoogleAdsClient client , long customerId , string startDateTime , string endDateTime ) { // Get the BiddingDataExclusionServiceClient. BiddingDataExclusionServiceClient biddingDataExclusionService = client . GetService ( Services . V22 . BiddingDataExclusionService ); BiddingDataExclusion dataExclusion = new BiddingDataExclusion () { // A unique name is required for every data exclusion. Name = "Data exclusion #" + ExampleUtilities . GetRandomString (), // The CHANNEL scope applies the data exclusion to all campaigns of specific // advertising channel types. In this example, the the exclusion will only apply to // Search campaigns. Use the CAMPAIGN scope to instead limit the scope to specific // campaigns. Scope = SeasonalityEventScope . Channel , AdvertisingChannelTypes = { AdvertisingChannelType . Search }, // The date range should be less than 14 days. StartDateTime = startDateTime , EndDateTime = endDateTime , }; BiddingDataExclusionOperation operation = new BiddingDataExclusionOperation () { Create = dataExclusion }; try { MutateBiddingDataExclusionsResponse response = biddingDataExclusionService . MutateBiddingDataExclusions ( customerId . ToString (), new [] { operation }); Console . WriteLine ( $"Added data exclusion with resource name: " + $"{response.Results[0].ResourceName}" ); } catch ( GoogleAdsException e ) { Console . WriteLine ( "Failure:" ); Console . WriteLine ( $"Message: {e.Message}" ); Console . WriteLine ( $"Failure: {e.Failure}" ); Console . WriteLine ( $"Request ID: {e.RequestId}" ); throw ; } } } }
PHP
< ?php /** * Copyright 2021 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace Google\Ads\GoogleAds\Examples\AdvancedOperations; require __DIR__ . '/../../vendor/autoload.php'; use GetOpt\GetOpt; use Google\Ads\GoogleAds\Examples\Utils\ArgumentNames; use Google\Ads\GoogleAds\Examples\Utils\ArgumentParser; use Google\Ads\GoogleAds\Examples\Utils\Helper; use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder; use Google\Ads\GoogleAds\Lib\V22\GoogleAdsClient; use Google\Ads\GoogleAds\Lib\V22\GoogleAdsClientBuilder; use Google\Ads\GoogleAds\Lib\V22\GoogleAdsException; use Google\Ads\GoogleAds\V22\Enums\AdvertisingChannelTypeEnum\AdvertisingChannelType; use Google\Ads\GoogleAds\V22\Enums\SeasonalityEventScopeEnum\SeasonalityEventScope; use Google\Ads\GoogleAds\V22\Errors\GoogleAdsError; use Google\Ads\GoogleAds\V22\Resources\BiddingDataExclusion; use Google\Ads\GoogleAds\V22\Services\BiddingDataExclusionOperation; use Google\Ads\GoogleAds\V22\Services\MutateBiddingDataExclusionsRequest; use Google\ApiCore\ApiException; /** * This example adds a customer-level data exclusion that excludes conversions from being used by * Smart Bidding for the time interval specified. * * For more information on using data exclusions, see * https://developers.google.com/google-ads/api/docs/campaigns/bidding/data-exclusions */ class AddBiddingDataExclusion { private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE'; private const START_DATE_TIME = 'INSERT_START_DATE_TIME_HERE'; private const END_DATE_TIME = 'INSERT_END_DATE_TIME_HERE'; public static function main() { // Either pass the required parameters for this example on the command line, or insert them // into the constants above. $options = (new ArgumentParser())->parseCommandArguments([ ArgumentNames::CUSTOMER_ID => GetOpt::REQUIRED_ARGUMENT, ArgumentNames::START_DATE_TIME => GetOpt::REQUIRED_ARGUMENT, ArgumentNames::END_DATE_TIME => GetOpt::REQUIRED_ARGUMENT ]); // Generate a refreshable OAuth2 credential for authentication. $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build(); // Construct a Google Ads client configured from a properties file and the // OAuth2 credentials above. $googleAdsClient = (new GoogleAdsClientBuilder()) ->fromFile() ->withOAuth2Credential($oAuth2Credential) ->build(); try { self::runExample( $googleAdsClient, $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID, $options[ArgumentNames::START_DATE_TIME] ?: self::START_DATE_TIME, $options[ArgumentNames::END_DATE_TIME] ?: self::END_DATE_TIME ); } catch (GoogleAdsException $googleAdsException) { printf( "Request with ID '%s' has failed.%sGoogle Ads failure details:%s", $googleAdsException->getRequestId(), PHP_EOL, PHP_EOL ); foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) { /** @var GoogleAdsError $error */ printf( "\t%s: %s%s", $error->getErrorCode()->getErrorCode(), $error->getMessage(), PHP_EOL ); } exit(1); } catch (ApiException $apiException) { printf( "ApiException was thrown with message '%s'.%s", $apiException->getMessage(), PHP_EOL ); exit(1); } } /** * Runs the example. Adds a "CUSTOMER" scoped data exclusion for the client customer ID and * dates specified. * * @param GoogleAdsClient $googleAdsClient the Google Ads API client * @param int $customerId the customer ID * @param string $startDateTime the start time of the data exclusion (in yyyy-MM-dd HH:mm:ss * format) in the account's timezone * @param string $endDateTime the end time of the data exclusion (in yyyy-MM-dd HH:mm:ss * format) in the account's timezone */ public static function runExample( GoogleAdsClient $googleAdsClient, int $customerId, string $startDateTime, string $endDateTime ) { // Creates a bidding data exclusion. $dataExclusion = new BiddingDataExclusion([ // A unique name is required for every data exclusion. 'name' => 'Data exclusion #' . Helper::getPrintableDatetime(), // The CHANNEL scope applies the data exclusion to all campaigns of specific // advertising channel types. In this example, the exclusion will only apply to // Search campaigns. Use the CAMPAIGN scope to instead limit the scope to specific // campaigns. 'scope' => SeasonalityEventScope::CHANNEL, 'advertising_channel_types' => [AdvertisingChannelType::SEARCH], // If setting scope CAMPAIGN, add individual campaign resource name(s) according to // the commented out line below. // 'campaigns' => ['INSERT_CAMPAIGN_RESOURCE_NAME_HERE'], 'start_date_time' => $startDateTime, 'end_date_time' => $endDateTime ]); // Creates a bidding data exclusion operation. $biddingDataExclusionOperation = new BiddingDataExclusionOperation(); $biddingDataExclusionOperation->setCreate($dataExclusion); // Submits the bidding data exclusion operation to add the bidding data exclusion. $biddingDataExclusionServiceClient = $googleAdsClient->getBiddingDataExclusionServiceClient(); $response = $biddingDataExclusionServiceClient->mutateBiddingDataExclusions( MutateBiddingDataExclusionsRequest::build($customerId, [$biddingDataExclusionOperation]) ); printf( "Added bidding data exclusion with resource name: '%s'.%s", $response->getResults()[0]->getResourceName(), PHP_EOL ); } } AddBiddingDataExclusion::main();
Python
#!/usr/bin/env python # Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Adds a channel-level data exclusion for Smart Bidding. The exclusion specifically excludes conversions from being used by Smart Bidding for the time interval specified. For more information on using data exclusions, see: https://developers.google.com/google-ads/api/docs/campaigns/bidding/data-exclusions """ import argparse import sys from uuid import uuid4 from google.ads.googleads.client import GoogleAdsClient from google.ads.googleads.errors import GoogleAdsException from google.ads.googleads.v22.resources.types.bidding_data_exclusion import ( BiddingDataExclusion , ) from google.ads.googleads.v22.services.services.bidding_data_exclusion_service import ( BiddingDataExclusionServiceClient , ) from google.ads.googleads.v22.services.types.bidding_data_exclusion_service import ( BiddingDataExclusionOperation , MutateBiddingDataExclusionsResponse , ) def main ( client : GoogleAdsClient , customer_id : str , start_date_time : str , end_date_time : str , ) - > None : """The main method that creates all necessary entities for the example. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. start_date_time: a str of the start date for the exclusion period. end_date_time: a str of the end date for the exclusion period. """ bidding_data_exclusion_service : BiddingDataExclusionServiceClient = ( client . get_service ( "BiddingDataExclusionService" ) ) operation : BiddingDataExclusionOperation = client . get_type ( "BiddingDataExclusionOperation" ) bidding_data_exclusion : BiddingDataExclusion = operation . create # A unique name is required for every data exclusion bidding_data_exclusion . name = f "Data exclusion # { uuid4 () } " # The CHANNEL scope applies the data exclusion to all campaigns of specific # advertising channel types. In this example, the exclusion will only # apply to Search campaigns. Use the CAMPAIGN scope to instead limit the # scope to specific campaigns. bidding_data_exclusion . scope = ( client . enums . SeasonalityEventScopeEnum . CHANNEL ) bidding_data_exclusion . advertising_channel_types . append ( client . enums . AdvertisingChannelTypeEnum . SEARCH ) # If setting scope CAMPAIGN, add individual campaign resource name(s) # according to the commented out line below. # # bidding_data_exclusion.campaigns.append( # "INSERT_CAMPAIGN_RESOURCE_NAME_HERE" # ) bidding_data_exclusion . start_date_time = start_date_time bidding_data_exclusion . end_date_time = end_date_time response : MutateBiddingDataExclusionsResponse = ( bidding_data_exclusion_service . mutate_bidding_data_exclusions ( customer_id = customer_id , operations = [ operation ] ) ) resource_name : str = response . results [ 0 ] . resource_name print ( f "Added data exclusion with resource name: ' { resource_name } '" ) if __name__ == "__main__" : parser = argparse . ArgumentParser ( description = "Adds a data exclusion for conversions in Smart Bidding " "for the given time interval." ) # The following argument(s) should be provided to run the example. parser . add_argument ( "-c" , "--customer_id" , type = str , required = True , help = "The Google Ads customer ID." , ) parser . add_argument ( "-s" , "--start_date_time" , type = str , required = True , help = "The start date for the exclusion period, must be in the format: " "'yyyy-MM-dd HH:mm:ss'." , ) parser . add_argument ( "-e" , "--end_date_time" , type = str , required = True , help = "The end date for the exclusion period, must be in the format: " "'yyyy-MM-dd HH:mm:ss'." , ) args : argparse . Namespace = parser . parse_args () # GoogleAdsClient will read the google-ads.yaml configuration file in the # home directory if none is specified. googleads_client : GoogleAdsClient = GoogleAdsClient . load_from_storage ( version = "v22" ) try : main ( googleads_client , args . customer_id , args . start_date_time , args . end_date_time , ) except GoogleAdsException as ex : print ( f 'Request with ID " { ex . request_id } " failed with status ' f '" { ex . error . code () . name } " and includes the following errors:' ) for error in ex . failure . errors : print ( f 'Error with message " { error . message } ".' ) if error . location : for field_path_element in error . location . field_path_elements : print ( f " \t\t On field: { field_path_element . field_name } " ) sys . exit ( 1 )
Ruby
#!/usr/bin/env ruby # Encoding: utf-8 # # Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Adds a channel-level data exclusion for Smart Bidding. # # The exclusion specifically excludes conversions from being used by Smart # Bidding for the time interval specified. # # For more information on using data exclusions, see: # https://developers.google.com/google-ads/api/docs/campaigns/bidding/data-exclusions require 'optparse' require 'google/ads/google_ads' def add_bidding_data_exclusion ( customer_id , start_date_time , end_date_time ) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google :: Ads :: GoogleAds :: GoogleAdsClient . new operation = client . operation . create_resource . bidding_data_exclusion do | bda | # A unique name is required for every data excluseion. bda . name = "Seasonality Adjustment #{ ( Time . new . to_f * 1000 ) . to_i } " # The CHANNEL scope applies the data exclusion to all campaigns of specific # advertising channel types. In this example, the conversion_rate_modifier # will only apply to Search campaigns. Use the CAMPAIGN scope to instead # limit the scope to specific campaigns. bda . scope = :CHANNEL bda . advertising_channel_types << :SEARCH # If setting scope CAMPAIGN, add individual campaign resource name(s) # according to the commented out line below. # # bda.campaigns << "INSERT_CAMPAIGN_RESOURCE_NAME_HERE" bda . start_date_time = start_date_time bda . end_date_time = end_date_time end response = client . service . bidding_data_exclusion . mutate_bidding_data_exclusions ( customer_id : customer_id , operations : [ operation ] , ) puts "Added data exclusion with resource name #{ response . results . first . resource_name } ." end if __FILE__ == $0 options = {} # The following parameter(s) should be provided to run the example. You can # either specify these by changing the INSERT_XXX_ID_HERE values below, or on # the command line. # # Parameters passed on the command line will override any parameters set in # code. # # Running the example with -h will print the command line usage. options [ :customer_id ] = 'INSERT_CUSTOMER_ID_HERE' options [ :start_date_time ] = 'INSERT_START_DATE_TIME_HERE' options [ :end_date_time ] = 'INSERT_END_DATE_TIME_HERE' OptionParser . new do | opts | opts . banner = sprintf ( 'Usage: %s [options]' , File . basename ( __FILE__ )) opts . separator '' opts . separator 'Options:' opts . on ( '-C' , '--customer-id CUSTOMER-ID' , String , 'Customer ID' ) do | v | options [ :customer_id ] = v end opts . on ( '-s' , '--start-date-time START-DATE-TIME' , String , 'The start date of the adjustment period, must be in the format:' \ 'yyyy-MM-dd HH:mm:ss' ) do | v | options [ :start_date_time ] = v end opts . on ( '-e' , '--end-date-time END-DATE-TIME' , String , 'The end date of the adjustment period, must be in the format:' \ 'yyyy-MM-dd HH:mm:ss' ) do | v | options [ :end_date_time ] = v end opts . separator '' opts . separator 'Help:' opts . on_tail ( '-h' , '--help' , 'Show this message' ) do puts opts exit end end . parse! begin add_bidding_data_exclusion ( options . fetch ( :customer_id ) . tr ( "-" , "" ), options . fetch ( :start_date_time ), options . fetch ( :end_date_time ), ) rescue Google :: Ads :: GoogleAds :: Errors :: GoogleAdsError = > e e . failure . errors . each do | error | STDERR . printf ( "Error with message: %s \n " , error . message ) if error . location error . location . field_path_elements . each do | field_path_element | STDERR . printf ( " \t On field: %s \n " , field_path_element . field_name ) end end error . error_code . to_h . each do | k , v | next if v == :UNSPECIFIED STDERR . printf ( " \t Type: %s \n\t Code: %s \n " , k , v ) end end raise end end
Perl
#!/usr/bin/perl -w # # Copyright 2021, Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Adds a customer-level data exclusion that excludes conversions from being used # by Smart Bidding for the time interval specified. # # For more information on using data exclusions, see: # https://developers.google.com/google-ads/api/docs/campaigns/bidding/data-exclusions. use strict ; use warnings ; use utf8 ; use FindBin qw($Bin) ; use lib "$Bin/../../lib" ; use Google::Ads::GoogleAds::Client ; use Google::Ads::GoogleAds::Utils::GoogleAdsHelper ; use Google::Ads::GoogleAds::V22::Resources::BiddingDataExclusion ; use Google::Ads::GoogleAds::V22::Enums::SeasonalityEventScopeEnum qw(CHANNEL) ; use Google::Ads::GoogleAds::V22::Enums::AdvertisingChannelTypeEnum qw(SEARCH) ; use Google::Ads::GoogleAds::V22::Services::BiddingDataExclusionService::BiddingDataExclusionOperation ; use Getopt::Long qw(:config auto_help) ; use Pod::Usage ; use Cwd qw(abs_path) ; use Data::Uniqid qw(uniqid) ; # The following parameter(s) should be provided to run the example. You can # either specify these by changing the INSERT_XXX_ID_HERE values below, or on # the command line. # # Parameters passed on the command line will override any parameters set in # code. # # Running the example with -h will print the command line usage. my $customer_id = "INSERT_CUSTOMER_ID_HERE" ; my $start_date_time = "INSERT_START_DATE_TIME_HERE" ; my $end_date_time = "INSERT_END_DATE_TIME_HERE" ; # Adds a "CUSTOMER" scoped data exclusion for the client customer ID and dates specified. sub add_bidding_data_exclusion { my ( $api_client , $customer_id , $start_date_time , $end_date_time ) = @_ ; my $data_exclusion = Google::Ads::GoogleAds::V22::Resources:: BiddingDataExclusion - > new ({ # A unique name is required for every data exclusion. name = > "Data exclusion #" . uniqid (), # The CHANNEL scope applies the data exclusion to all campaigns of specific # advertising channel types. In this example, the exclusion will only apply # to Search campaigns. Use the CAMPAIGN scope to instead limit the scope to # specific campaigns. scope = > CHANNEL , advertisingChannelTypes = > [ SEARCH ], # If setting scope CAMPAIGN, add individual campaign resource name(s) # according to the commented out line below. # campaigns => ["INSERT_CAMPAIGN_RESOURCE_NAME_HERE"], startDateTime = > $start_date_time , endDateTime = > $end_date_time }); my $operation = Google::Ads::GoogleAds::V22::Services::BiddingDataExclusionService:: BiddingDataExclusionOperation - > new ({ create = > $data_exclusion }); my $response = $api_client - > BiddingDataExclusionService () - > mutate ({ customerId = > $customer_id , operations = > [ $operation ]}); printf "Added data exclusion with resource name: '%s'.\n" , $response - > { results }[ 0 ]{ resourceName }; return 1 ; } # Don't run the example if the file is being included. if ( abs_path ( $0 ) ne abs_path ( __FILE__ )) { return 1 ; } # Get Google Ads Client, credentials will be read from ~/googleads.properties. my $api_client = Google::Ads::GoogleAds:: Client - > new (); # By default examples are set to die on any server returned fault. $api_client - > set_die_on_faults ( 1 ); # Parameters passed on the command line will override any parameters set in code. GetOptions ( "customer_id=s" = > \ $customer_id , "start_date_time=s" = > \ $start_date_time , "end_date_time=s" = > \ $end_date_time ); # Print the help message if the parameters are not initialized in the code nor # in the command line. pod2usage ( 2 ) if not check_params ( $customer_id , $start_date_time , $end_date_time ); # Call the example. add_bidding_data_exclusion ( $api_client , $customer_id =~ s/-//g r , $start_date_time , $end_date_time ); =pod =head1 NAME add_bidding_data_exclusion =head1 DESCRIPTION Adds a customer-level data exclusion that excludes conversions from being used by Smart Bidding for the time interval specified. For more information on using data exclusions, see: https://developers.google.com/google-ads/api/docs/campaigns/bidding/data-exclusions. =head1 SYNOPSIS add_bidding_data_exclusion.pl [options] -help Show the help message. -customer_id The client customer ID of the Google Ads account that the data exclusion will be added to. -start_date_time The start date time in yyyy-MM-dd HH:mm:ss format of the data exclusion period. -end_date_time The end date time in yyyy-MM-dd HH:mm:ss format of the data exclusion period. =cut

