Campaign Management Samples

The code samples below provide examples for managing campaigns using the AdWords API. Client Library.

Add a campaign group and sets a performance target for that group

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example adds a campaign group and sets a performance target for that group. To
  ''' get campaigns, run GetCampaigns.vb. To download reports, run
  ''' DownloadCriteriaReportWithAwql.vb.
  ''' </summary>
  Public Class AddCampaignGroupsAndPerformanceTargets
    Inherits ExampleBase
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New AddCampaignGroupsAndPerformanceTargets
      Console.WriteLine(codeExample.Description)
      Try
        Dim campaignId1 As Long = Long.Parse("INSERT_CAMPAIGN_ID1_HERE")
        Dim campaignId2 As Long = Long.Parse("INSERT_CAMPAIGN_ID2_HERE")

        codeExample.Run(New AdWordsUser, campaignId1, campaignId2)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}",
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example adds a campaign group and sets a performance target for that " +
            "group. To get campaigns, run GetCampaigns.vb. To download reports, run " +
            "DownloadCriteriaReportWithAwql.vb."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="campaignId1">Id of the campaign to be added to the campaign group.</param>
    ''' <param name="campaignId2">Id of the campaign to be added to the campaign group.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal campaignId1 As Long,
                   ByVal campaignId2 As Long)
      Dim campaignGroup As CampaignGroup = CreateCampaignGroup(user)
      AddCampaignsToGroup(user, campaignGroup.id, New Long() {campaignId1, campaignId2})
      CreatePerformanceTarget(user, campaignGroup.id)
      Console.WriteLine("Campaign group and its performance target were setup successfully.")
    End Sub

    ''' <summary>
    ''' Create a campaign group.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <returns>The campaign group.</returns>
    Private Function CreateCampaignGroup(ByVal user As AdWordsUser) As CampaignGroup
      ' Get the CampaignGroupService.
      Dim campaignGroupService As CampaignGroupService = CType(user.GetService(
          AdWordsService.v201708.CampaignGroupService), CampaignGroupService)

      ' Create the campaign group.
      Dim campaignGroup As New CampaignGroup()
      campaignGroup.name = "Mars campaign group - " + ExampleUtilities.GetShortRandomString()

      ' Create the operation.
      Dim operation As New CampaignGroupOperation()
      operation.operand = campaignGroup
      operation.operator = [Operator].ADD

      Try
        Dim retval As CampaignGroupReturnValue = campaignGroupService.mutate(
            New CampaignGroupOperation() {operation})

        ' Display the results.
        Dim newCampaignGroup As CampaignGroup = retval.value(0)
        Console.WriteLine("Campaign group with ID = '{0}' and name = '{1}' was created.",
            newCampaignGroup.id, newCampaignGroup.name)
        Return newCampaignGroup
      Catch e As Exception
        Throw New System.ApplicationException("Failed to add campaign group.", e)
      End Try
    End Function

    ''' <summary>
    ''' Adds multiple campaigns to a campaign group.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="campaignGroupId">The campaign group ID.</param>
    ''' <param name="campaignIds">IDs of the campaigns to be added to the campaign group.</param>
    Private Sub AddCampaignsToGroup(ByVal user As AdWordsUser, ByVal campaignGroupId As Long,
        ByVal campaignIds() As Long)
      ' Get the CampaignService.
      Dim campaignService As CampaignService = CType(user.GetService(
          AdWordsService.v201708.CampaignService), CampaignService)

      Dim operations As New List(Of CampaignOperation)

      For i As Integer = 0 To campaignIds.Length - 1
        Dim campaign As New Campaign()
        campaign.id = campaignIds(i)
        campaign.campaignGroupId = campaignGroupId

        Dim operation As New CampaignOperation()
        operation.operand = campaign
        operation.operator = [Operator].SET
        operations.Add(operation)
      Next

      Try
        Dim retval As CampaignReturnValue = campaignService.mutate(operations.ToArray())

        Dim updatedCampaignIds As New List(Of Long)()
        For Each updatedCampaign As Campaign In retval.value
          updatedCampaignIds.Add(updatedCampaign.id)
        Next

        ' Display the results.
        Console.WriteLine("The following campaign IDs were added to the campaign group " +
          "with ID '{0}':\n\t{1}'", campaignGroupId, String.Join(", ", campaignIds))
      Catch e As Exception
        Throw New System.ApplicationException("Failed to add campaigns to campaign group.", e)
      End Try
    End Sub

    ''' <summary>
    ''' Creates a performance target for the campaign group.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="campaignGroupId">Campaign group ID.</param>
    ''' <returns>The newly created performance target.</returns>
    Private Function CreatePerformanceTarget(ByVal user As AdWordsUser,
        ByVal campaignGroupId As Long) As CampaignGroupPerformanceTarget
      ' Get the CampaignGroupPerformanceTargetService.
      Dim campaignGroupPerformanceTargetService As CampaignGroupPerformanceTargetService =
              CType(user.GetService(AdWordsService.v201708.CampaignGroupPerformanceTargetService),
                  CampaignGroupPerformanceTargetService)

      ' Create the performance target.
      Dim campaignGroupPerformanceTarget As New CampaignGroupPerformanceTarget()
      campaignGroupPerformanceTarget.campaignGroupId = campaignGroupId

      Dim performanceTarget As New PerformanceTarget()
      ' Keep the CPC for the campaigns <$3.
      performanceTarget.efficiencyTargetType = EfficiencyTargetType.CPC_LESS_THAN_OR_EQUAL_TO
      performanceTarget.efficiencyTargetValue= 3000000

      ' Keep the maximum spend under $50.
        PerformanceTarget.spendTargetType = SpendTargetType.MAXIMUM
      Dim maxSpend As New Money()
      maxSpend.microAmount = 500000000
      performanceTarget.spendTarget = maxSpend

      ' Aim for at least 3000 clicks.
      performanceTarget.volumeTargetValue = 3000
      performanceTarget.volumeGoalType = VolumeGoalType.MAXIMIZE_CLICKS

      ' Start the performance target today, And run it for the next 90 days.
      Dim startDate As System.DateTime = System.DateTime.Now
      Dim endDate As System.DateTime = startDate.AddDays(90)

      performanceTarget.startDate = startDate.ToString("yyyyMMdd")
      performanceTarget.endDate = endDate.ToString("yyyyMMdd")

      campaignGroupPerformanceTarget.performanceTarget = performanceTarget

      ' Create the operation.
      Dim operation As New CampaignGroupPerformanceTargetOperation()
      operation.operand = campaignGroupPerformanceTarget
      operation.operator = [Operator].ADD

      Try
        Dim retval As CampaignGroupPerformanceTargetReturnValue =
            campaignGroupPerformanceTargetService.mutate(
                New CampaignGroupPerformanceTargetOperation() {operation})

        ' Display the results.
        Dim newCampaignPerfTarget As CampaignGroupPerformanceTarget = retval.value(0)

        Console.WriteLine("Campaign performance target with id = '{0}' was added for " +
            "campaign group ID '{1}'.", newCampaignPerfTarget.id,
            newCampaignPerfTarget.campaignGroupId)
        Return newCampaignPerfTarget
      Catch e As Exception
        Throw New System.ApplicationException("Failed to create campaign performance target.", e)
      End Try
    End Function
  End Class
End Namespace

Add a label to multiple campaigns

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example adds a label to multiple campaigns.
  ''' </summary>
  Public Class AddCampaignLabels
    Inherits ExampleBase
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New AddCampaignLabels
      Console.WriteLine(codeExample.Description)
      Try
        Dim campaignId1 As Long = Long.Parse("INSERT_CAMPAIGN_ID1_HERE")
        Dim campaignId2 As Long = Long.Parse("INSERT_CAMPAIGN_ID2_HERE")
        Dim labelId As Long = Long.Parse("INSERT_LABEL_ID_HERE")

        codeExample.Run(New AdWordsUser, campaignId1, campaignId2, labelId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}", _
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example adds a label to multiple campaigns."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="campaignId1">Id of the campaign to which labels are
    ''' added.</param>
    ''' <param name="campaignId2">Id of the ad group to which labels are
    ''' added.</param>
    ''' <param name="labelId">ID of the label to apply.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal campaignId1 As Long, _
                   ByVal campaignId2 As Long, ByVal labelId As Long)
      Try
        ' Get the CampaignService.
        Dim campaignService As CampaignService = CType(user.GetService( _
            AdWordsService.v201708.CampaignService), CampaignService)

        ' Create label operations.
        Dim operations As New List(Of CampaignLabelOperation)

        For Each campaignId As Long In New Long() {campaignId1, campaignId2}
          Dim campaignLabel As New CampaignLabel
          campaignLabel.campaignId = campaignId
          campaignLabel.labelId = labelId

          Dim operation As New CampaignLabelOperation
          operation.operand = campaignLabel
          operation.operator = [Operator].ADD

          operations.Add(operation)
        Next

        Dim retval As CampaignLabelReturnValue = campaignService.mutateLabel( _
                operations.ToArray())

        ' Display campaign labels.
        If Not (retval Is Nothing) AndAlso Not (retval.value Is Nothing) Then
          For Each newCampaignLabel As CampaignLabel In retval.value
            Console.WriteLine("Campaign label for campaign ID {0} and label ID {1} was added.\n", _
                newCampaignLabel.campaignId, newCampaignLabel.labelId)
          Next
        Else
          Console.WriteLine("No campaign labels were added.")
        End If
      Catch e As Exception
        Throw New System.ApplicationException("Failed to add campaign labels.", e)
      End Try
    End Sub
  End Class
End Namespace

Add complete campaigns using batch jobs

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Threading
Imports Google.Api.Ads.AdWords.Util.BatchJob.v201708

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example illustrates how to use BatchJobService to create multiple
  ''' complete campaigns, including ad groups and keywords.
  ''' </summary>
  Public Class AddCompleteCampaignsUsingBatchJob
    Inherits ExampleBase

    ''' <summary>
    ''' The last ID that was automatically generated.
    ''' </summary>
    Private Shared LAST_ID As Long = -1

    ''' <summary>
    ''' The number of campaigns to be added.
    ''' </summary>
    Private Const NUMBER_OF_CAMPAIGNS_TO_ADD As Long = 2

    ''' <summary>
    ''' The number of ad groups to be added per campaign.
    ''' </summary>
    Private Const NUMBER_OF_ADGROUPS_TO_ADD As Long = 2

    ''' <summary>
    ''' The number of keywords to be added per campaign.
    ''' </summary>
    Private Const NUMBER_OF_KEYWORDS_TO_ADD As Long = 5

    ''' <summary>
    ''' The maximum milliseconds to wait for completion.
    ''' </summary>
    Private Const TIME_TO_WAIT_FOR_COMPLETION As Integer = 15 * 60 * 1000 ' 15 minutes

    ''' <summary>
    ''' Create a temporary ID generator that will produce a sequence of descending
    ''' negative numbers.
    ''' </summary>
    ''' <returns></returns>
    Private Shared Function NextId() As Long
      Return Interlocked.Decrement(LAST_ID)
    End Function

    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New AddCompleteCampaignsUsingBatchJob
      Console.WriteLine(codeExample.Description)
      Try
        codeExample.Run(New AdWordsUser)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}",
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example illustrates how to use BatchJobService to create multiple" &
            " complete campaigns, including ad groups and keywords."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    Public Sub Run(ByVal user As AdWordsUser)
      ' Get the BatchJobService.
      Dim batchJobService As BatchJobService = CType(user.GetService(
          AdWordsService.v201708.BatchJobService), BatchJobService)

      Try
        ' Create a BatchJob.
        Dim addOp As New BatchJobOperation()
        addOp.operator = [Operator].ADD
        addOp.operand = New BatchJob()

        Dim batchJob As BatchJob = batchJobService.mutate(
            New BatchJobOperation() {addOp}).value(0)

        ' Get the upload URL from the new job.
        Dim uploadUrl As String = batchJob.uploadUrl.url

        Console.WriteLine("Created BatchJob with ID {0}, status '{1}' and upload URL {2}.",
            batchJob.id, batchJob.status, batchJob.uploadUrl.url)

        ' Create the mutate request that will be sent to the upload URL.
        Dim operations As New List(Of Operation)()

        ' Create and add an operation to create a new budget.
        Dim budgetOperation As BudgetOperation = BuildBudgetOperation()
        operations.Add(budgetOperation)

        ' Create and add operations to create new campaigns.
        Dim campaignOperations As List(Of CampaignOperation) =
            BuildCampaignOperations(budgetOperation.operand.budgetId)
        operations.AddRange(campaignOperations.ToArray())

        Dim adGroupOperations As New List(Of AdGroupOperation)()

        ' Create and add operations to create new ad groups.
        For Each campaignOperation As CampaignOperation In campaignOperations
          adGroupOperations.AddRange(BuildAdGroupOperations(campaignOperation.operand.id))
        Next
        operations.AddRange(adGroupOperations.ToArray())

        ' Create and add operations to create new ad group ads (expanded text ads).
        For Each adGroupOperation As AdGroupOperation In adGroupOperations
          operations.AddRange(BuildAdGroupAdOperations(adGroupOperation.operand.id).ToArray())
        Next

        ' Create and add operations to create new ad group criteria (keywords).
        For Each adGroupOperation As AdGroupOperation In adGroupOperations
          operations.AddRange(BuildAdGroupCriterionOperations(
              adGroupOperation.operand.id).ToArray())
        Next

        Dim batchJobUploadHelper As New BatchJobUtilities(user)

        ' Create a resumable Upload URL to upload the operations.
        Dim resumableUploadUrl As String = batchJobUploadHelper.GetResumableUploadUrl(uploadUrl)

        ' Use the BatchJobUploadHelper to upload all operations.
        batchJobUploadHelper.Upload(resumableUploadUrl, operations.ToArray())

        Dim waitHandler As WaitHandler

        ' Create a wait handler.
        waitHandler = New WaitHandler(batchJob, False)

        Dim isComplete As Boolean = batchJobUploadHelper.WaitForPendingJob(batchJob.id,
            TIME_TO_WAIT_FOR_COMPLETION, AddressOf waitHandler.OnJobWaitForCompletion)

        ' Restore the latest value for batchJob from waithandler.
        batchJob = waitHandler.Job

        If Not isComplete Then
          Throw New TimeoutException("Job is still in pending state after waiting for " &
             TIME_TO_WAIT_FOR_COMPLETION & " seconds.")
        End If

        If Not (batchJob.processingErrors Is Nothing) Then
          For Each processingError As BatchJobProcessingError In batchJob.processingErrors
            Console.WriteLine("  Processing error: {0}, {1}, {2}, {3}, {4}",
                processingError.ApiErrorType, processingError.trigger,
                processingError.errorString, processingError.fieldPath,
                processingError.reason)
          Next
        End If

        If (Not (batchJob.downloadUrl Is Nothing)) AndAlso
           (Not (batchJob.downloadUrl.url Is Nothing)) Then
          Dim mutateResponse As BatchJobMutateResponse = batchJobUploadHelper.Download(
              batchJob.downloadUrl.url)
          Console.WriteLine("Downloaded results from {0}.", batchJob.downloadUrl.url)
          For Each mutateResult As MutateResult In mutateResponse.rval
            Dim outcome As String = ""
            If mutateResult.errorList Is Nothing Then
              outcome = "SUCCESS"
            Else
              outcome = "FAILURE"
            End If
            Console.WriteLine("  Operation [{0}] - {1}", mutateResult.index, outcome)
          Next
        End If
      Catch e As Exception
        Throw New System.ApplicationException("Failed to add campaigns using batch job.", e)
      End Try
    End Sub

    ''' <summary>
    ''' A class that handles wait callbacks for the batch job.
    ''' </summary>
    Class WaitHandler

      ''' <summary>
      ''' The batch job to wait for.
      ''' </summary>
      Private batchJob As BatchJob

      ''' <summary>
      ''' A flag to determine if the job was requested to be cancelled. This
      ''' typically comes from the user.
      ''' </summary>
      Private cancelRequested As Boolean

      ''' <summary>
      ''' Initializes a new instance of the <see cref="WaitHandler"/> class.
      ''' </summary>
      ''' <param name="batchJob">The batch job to wait for.</param>
      ''' <param name="wasCancelRequested">A flag to determine if the job was
      ''' requested to be cancelled. This typically comes from the user.</param>
      Sub New(ByVal batchJob As BatchJob, ByVal wasCancelRequested As Boolean)
        Me.batchJob = batchJob
        Me.WasCancelRequested = wasCancelRequested
      End Sub

      ''' <summary>
      ''' Gets or sets the batch job to wait for.
      ''' </summary>
      Public Property Job As BatchJob
        Get
          Return Me.batchJob
        End Get
        Set(value As BatchJob)
          Me.batchJob = value
        End Set
      End Property

      ''' <summary>
      ''' Gets or sets a flag to determine if the job was requested to be
      ''' cancelled. This typically comes from the user.
      ''' </summary>
      Public Property WasCancelRequested As Boolean
        Get
          Return Me.cancelRequested
        End Get
        Set(value As Boolean)
          Me.cancelRequested = value
        End Set
      End Property

      ''' <summary>
      ''' Callback method when the job is waiting for cancellation.
      ''' </summary>
      ''' <param name="waitBatchJob">The updated batch job being waited for.</param>
      ''' <param name="timeElapsed">The time elapsed.</param>
      ''' <returns>True, if the wait loop should be cancelled, false otherwise.
      '''</returns>
      Public Function OnJobWaitForCancellation(ByVal waitBatchJob As BatchJob,
                                               ByVal timeElapsed As Long) As Boolean
        Console.WriteLine("[{0} seconds]: Batch job ID {1} has status '{2}'.",
                          timeElapsed / 1000, waitBatchJob.id, waitBatchJob.status)
        batchJob = waitBatchJob
        Return False
      End Function

      ''' <summary>
      ''' Callback method when the job is waiting for completion.
      ''' </summary>
      ''' <param name="waitBatchJob">The updated batch job being waited for.</param>
      ''' <param name="timeElapsed">The time elapsed.</param>
      ''' <returns>True, if the wait loop should be cancelled, false otherwise.
      '''</returns>
      Public Function OnJobWaitForCompletion(ByVal waitBatchJob As BatchJob,
                                             ByVal timeElapsed As Long) As Boolean
        Console.WriteLine("[{0} seconds]: Batch job ID {1} has status '{2}'.",
                                timeElapsed / 1000, waitBatchJob.id, waitBatchJob.status)
        batchJob = waitBatchJob
        Return Me.WasCancelRequested
      End Function
    End Class

    ''' <summary>
    ''' Builds the operation for creating an ad within an ad group.
    ''' </summary>
    ''' <param name="adGroupId">ID of the ad group for which ads are created.</param>
    ''' <returns>A list of operations for creating ads.</returns>
    Private Shared Function BuildAdGroupAdOperations(ByVal adGroupId As Long) _
        As List(Of AdGroupAdOperation)
      Dim operations As New List(Of AdGroupAdOperation)()

      Dim adGroupAd As New AdGroupAd()
      adGroupAd.adGroupId = adGroupId

      Dim expandedTextAd As New ExpandedTextAd
      expandedTextAd.headlinePart1 = "Luxury Cruise to Mars"
      expandedTextAd.headlinePart2 = "Visit the Red Planet in style."
      expandedTextAd.description = "Low-gravity fun for everyone!"
      expandedTextAd.finalUrls = New String() {"http://www.example.com/1"}
      adGroupAd.ad = expandedTextAd

      Dim operation As New AdGroupAdOperation()
      operation.operand = adGroupAd
      operation.operator = [Operator].ADD
      operations.Add(operation)
      Return operations
    End Function

    ''' <summary>
    ''' Builds the operations for creating keywords within an ad group.
    ''' </summary>
    ''' <param name="adGroupId">ID of the ad group for which keywords are
    ''' created.</param>
    ''' <returns>A list of operations for creating keywords.</returns>
    Private Shared Function BuildAdGroupCriterionOperations(ByVal adGroupId As Long) _
        As List(Of AdGroupCriterionOperation)
      Dim adGroupCriteriaOperations As New List(Of AdGroupCriterionOperation)()

      ' Create AdGroupCriterionOperations to add keywords.

      For i As Integer = 0 To NUMBER_OF_KEYWORDS_TO_ADD
        ' Create Keyword.
        Dim text As String = String.Format("mars{0}", i)

        ' Make 50% of keywords invalid to demonstrate error handling.
        If (i Mod 2) = 0 Then
          text = text & "!!!"
        End If

        ' Create AdGroupCriterionOperation.
        Dim operation As New AdGroupCriterionOperation()
        operation.operand = New BiddableAdGroupCriterion()
        operation.operand.adGroupId = adGroupId

        Dim keyword As New Keyword
        keyword.text = text
        keyword.matchType = KeywordMatchType.BROAD
        operation.operand.criterion = keyword

        operation.operator = [Operator].ADD
        ' Add to list.
        adGroupCriteriaOperations.Add(operation)
      Next

      Return adGroupCriteriaOperations
    End Function

    ''' <summary>
    ''' Builds the operations for creating ad groups within a campaign.
    ''' </summary>
    ''' <param name="campaignId">ID of the campaign for which ad groups are
    ''' created.</param>
    ''' <returns>A list of operations for creating ad groups.</returns>
    Private Shared Function BuildAdGroupOperations(ByVal campaignId As Long) As _
        List(Of AdGroupOperation)
      Dim operations As New List(Of AdGroupOperation)()
      For i As Integer = 0 To NUMBER_OF_ADGROUPS_TO_ADD
        Dim adGroup As New AdGroup()
        adGroup.campaignId = campaignId
        adGroup.id = NextId()
        adGroup.name = "Batch Ad Group # " & ExampleUtilities.GetRandomString()

        Dim cpcBid As New CpcBid
        cpcBid.bid = New Money()
        cpcBid.bid.microAmount = 10000000L
        Dim biddingStrategyConfiguration As New BiddingStrategyConfiguration()
        biddingStrategyConfiguration.bids = New Bids() {cpcBid}

        adGroup.biddingStrategyConfiguration = biddingStrategyConfiguration

        Dim operation As New AdGroupOperation()
        operation.operand = adGroup
        operation.operator = [Operator].ADD

        operations.Add(operation)
      Next
      Return operations
    End Function

    ''' <summary>
    ''' Builds the operations for creating new campaigns.
    ''' </summary>
    ''' <param name="budgetId">ID of the budget to be used for the campaign.
    ''' </param>
    ''' <returns>A list of operations for creating campaigns.</returns>
    Private Shared Function BuildCampaignOperations(ByVal budgetId As Long) _
        As List(Of CampaignOperation)
      Dim operations As New List(Of CampaignOperation)()

      For i As Integer = 0 To NUMBER_OF_CAMPAIGNS_TO_ADD
        Dim campaign As New Campaign()
        campaign.name = "Batch Campaign " + ExampleUtilities.GetRandomString()

        ' Recommendation: Set the campaign to PAUSED when creating it to prevent
        ' the ads from immediately serving. Set to ENABLED once you've added
        ' targeting and the ads are ready to serve.
        campaign.status = CampaignStatus.PAUSED

        campaign.id = NextId()
        campaign.advertisingChannelType = AdvertisingChannelType.SEARCH

        Dim budget As New Budget()
        budget.budgetId = budgetId
        campaign.budget = budget

        Dim biddingStrategyConfiguration As New BiddingStrategyConfiguration()
        biddingStrategyConfiguration.biddingStrategyType = BiddingStrategyType.MANUAL_CPC

        ' You can optionally provide a bidding scheme in place of the type.
        Dim biddingScheme As New ManualCpcBiddingScheme()
        biddingScheme.enhancedCpcEnabled = False
        biddingStrategyConfiguration.biddingScheme = biddingScheme

        campaign.biddingStrategyConfiguration = biddingStrategyConfiguration

        Dim operation As New CampaignOperation()
        operation.operand = campaign
        operation.operator = [Operator].ADD

        operations.Add(operation)
      Next
      Return operations
    End Function

    ''' <summary>
    ''' Builds an operation for creating a budget.
    ''' </summary>
    ''' <returns>The operation for creating a budget.</returns>
    Private Shared Function BuildBudgetOperation() As BudgetOperation
      Dim budget As New Budget()
      budget.budgetId = NextId()
      budget.name = "Interplanetary Cruise #" & ExampleUtilities.GetRandomString()

      Dim amount As New Money()
      amount.microAmount = 50000000L
      budget.amount = amount

      budget.deliveryMethod = BudgetBudgetDeliveryMethod.STANDARD

      Dim budgetOperation As New BudgetOperation()
      budgetOperation.operand = budget
      budgetOperation.operator = [Operator].ADD

      Return budgetOperation
    End Function
  End Class
End Namespace

Add a draft

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example illustrates how to create a draft and access its
  ''' associated draft campaign. See the Campaign Drafts and Experiments guide
  ''' for more information:
  ''' https://developers.google.com/adwords/api/docs/guides/campaign-drafts-experiments
  ''' </summary>
  Public Class AddDraft
    Inherits ExampleBase
    
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New AddDraft
      Console.WriteLine(codeExample.Description)
      Try
        Dim baseCampaignId As Long = Long.Parse("INSERT_BASE_CAMPAIGN_ID_HERE")

        codeExample.Run(New AdWordsUser, baseCampaignId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}", _
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example adds a label to multiple campaigns."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="baseCampaignId">Id of the base campaign for creating draft.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal baseCampaignId As Long)
      ' Get the DraftService.
      Dim draftService As DraftService = CType(user.GetService( _
          AdWordsService.v201708.DraftService), DraftService)
      Dim draft As New Draft()
      draft.baseCampaignId = baseCampaignId
      draft.draftName = "Test Draft #" + ExampleUtilities.GetRandomString()

      Dim draftOperation As New DraftOperation()
      draftOperation.operator = [Operator].ADD
      draftOperation.operand = draft

      Try
        draft = draftService.mutate(New DraftOperation() {draftOperation}).value(0)

        Console.WriteLine("Draft with ID {0}, base campaign ID {1} and draft campaign ID " & _
            "{2} created.", draft.draftId, draft.baseCampaignId, draft.draftCampaignId)

        ' Once the draft is created, you can modify the draft campaign as if it
        ' were a real campaign. For example, you may add criteria, adjust bids,
        ' or even include additional ads. Adding a criterion is shown here.
        Dim campaignCriterionService As CampaignCriterionService =
            CType(user.GetService(AdWordsService.v201708.CampaignCriterionService),  _
                CampaignCriterionService)
        Dim language As New Language()
        language.id = 1003L ' Spanish

        ' Make sure to use the draftCampaignId when modifying the virtual draft
        ' campaign.
        Dim campaignCriterion As New CampaignCriterion()
        campaignCriterion.campaignId = draft.draftCampaignId
        campaignCriterion.criterion = language

        Dim criterionOperation As New CampaignCriterionOperation()
        criterionOperation.operator = [Operator].ADD
        criterionOperation.operand = campaignCriterion

        campaignCriterion = campaignCriterionService.mutate(
            New CampaignCriterionOperation() {criterionOperation}).value(0)

        Console.WriteLine("Draft updated to include criteria in draft campaign ID {0}.",
            draft.draftCampaignId)
      Catch e As Exception
        Throw New System.ApplicationException("Failed to create draft campaign and add " & _
            "criteria.", e)
      End Try
    End Sub
  End Class
End Namespace

Add a trial

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Threading

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example illustrates how to create a trial and wait for it to
  ''' complete. See the Campaign Drafts and Experiments guide for more
  ''' information:
  ''' https://developers.google.com/adwords/api/docs/guides/campaign-drafts-experiments
  ''' </summary>
  Public Class AddTrial
    Inherits ExampleBase

    ''' <summary>
    ''' The polling interval base to be used for exponential backoff.
    ''' </summary>
    Private const POLL_INTERVAL_SECONDS_BASE As Integer = 30

    ''' <summary>
    ''' The maximum number of retries.
    ''' </summary>
    Private const MAX_RETRIES As Long = 5
        
    ''' <summary>
    ''' Main method, to run this code example As a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New AddTrial
      Console.WriteLine(codeExample.Description)
      Try
        Dim draftId As Long = Long.Parse("INSERT_DRAFT_ID_HERE")
        Dim baseCampaignId As Long = Long.Parse("INSERT_BASE_CAMPAIGN_ID_HERE")
        codeExample.Run(New AdWordsUser(), draftId, baseCampaignId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}", _
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        return "This code example illustrates how to create a trial and wait for it to " & _
            "complete. See the Campaign Drafts and Experiments guide for more information: " & _
            "https://developers.google.com/adwords/api/docs/guides/campaign-drafts-experiments"
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="baseCampaignId">Id of the campaign to use as base of the
    ''' trial.</param>
    ''' <param name="draftId">Id of the draft.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal draftId as Long, ByVal baseCampaignId As Long)
      ' Get the TrialService.
      Dim trialService As TrialService = CType(user.GetService(
        AdWordsService.v201708.TrialService), TrialService)

      Dim newTrial As New Trial
      newTrial.draftId = draftId
      newTrial.baseCampaignId = baseCampaignId
      newTrial.name = "Test Trial #" & ExampleUtilities.GetRandomString()
      newTrial.trafficSplitPercent = 50

      Dim trialOperation As New TrialOperation()
      trialOperation.operator = [Operator].ADD
      trialOperation.operand = newTrial
      Try
        Dim trialId As Long = trialService.mutate(
            New TrialOperation() { trialOperation }).value(0).id

        ' Since creating a trial is asynchronous, we have to poll it to wait
        ' for it to finish.
        Dim trialSelector As New Selector()
        trialSelector.fields = New string() {
            Trial.Fields.Id, Trial.Fields.Status, Trial.Fields.BaseCampaignId,
            Trial.Fields.TrialCampaignId
        }
        trialSelector.predicates = New Predicate() {
            Predicate.Equals(Trial.Fields.Id, trialId)
        }
        newTrial = Nothing
        Dim isPending As Boolean = true
        Dim pollAttempts As Integer = 0

        Do
          Dim sleepMillis As Integer = CType(Math.Pow(2, pollAttempts) * _
              POLL_INTERVAL_SECONDS_BASE * 1000, Integer)
          Console.WriteLine("Sleeping {0} millis...", sleepMillis)
          Thread.Sleep(sleepMillis)

          newTrial = trialService.get(trialSelector).entries(0)

          Console.WriteLine("Trial ID {0} has status '{1}'.", newTrial.id, newTrial.status)
          pollAttempts = pollAttempts + 1
          isPending = (newTrial.status = TrialStatus.CREATING)
        Loop while isPending AndAlso (pollAttempts <= MAX_RETRIES)

        If newTrial.status = TrialStatus.ACTIVE Then
          ' The trial creation was successful.
          Console.WriteLine("Trial created with ID {0} and trial campaign ID {1}.",
              newTrial.id, newTrial.trialCampaignId)
        Else If newTrial.status = TrialStatus.CREATION_FAILED Then
          ' The trial creation failed, and errors can be fetched from the
          ' TrialAsyncErrorService.
          Dim errorsSelector As New Selector()
          errorsSelector.fields = New string() {
              TrialAsyncError.Fields.TrialId, TrialAsyncError.Fields.AsyncError
          }
          errorsSelector.predicates = New Predicate() {
            Predicate.Equals(TrialAsyncError.Fields.TrialId, newTrial.id)
          }

          Dim trialAsyncErrorService As TrialAsyncErrorService = _
              CType(user.GetService(AdWordsService.v201708.TrialAsyncErrorService),
                  TrialAsyncErrorService)

          Dim trialAsyncErrorPage As TrialAsyncErrorPage = trialAsyncErrorService.get(
              errorsSelector)
          If trialAsyncErrorPage.entries Is Nothing OrElse _
              trialAsyncErrorPage.entries.Length = 0 Then
            Console.WriteLine("Could not retrieve errors for trial {0}.", newTrial.id)
          Else
            Console.WriteLine("Could not create trial ID {0} for draft ID {1} due to the " & _
                "following errors:", trialId, draftId)
            Dim i As Integer = 1
            For Each err As TrialAsyncError In trialAsyncErrorPage.entries
              Dim asyncError As ApiError = err.asyncError
              Console.WriteLine("Error #{0}: errorType='{1}', errorString='{2}', trigger='{3}'," & _
                " fieldPath='{4}'", i, asyncError.ApiErrorType, asyncError.errorString, _
                asyncError.trigger, asyncError.fieldPath)
              i += 1
            Next
          End If
        Else
          ' Most likely, the trial is still being created. You can continue
          ' polling, but we have limited the number of attempts in the
          ' example.
          Console.WriteLine("Timed out waiting to create trial from draft ID {0} with " +
              "base campaign ID {1}.", draftId, baseCampaignId)
        End If
      Catch e As Exception
        Throw New System.ApplicationException("Failed to create trial from draft.", e)
      End Try
    End Sub
  End Class
End Namespace

Get all disapproved ads in an ad group

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example retrieves all the disapproved ads in a given campaign.
  ''' </summary>
  Public Class GetAllDisapprovedAds
    Inherits ExampleBase
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New GetAllDisapprovedAds
      Console.WriteLine(codeExample.Description)
      Try
        Dim campaignId As Long = Long.Parse("INSERT_CAMPAIGN_ID_HERE")
        codeExample.Run(New AdWordsUser, campaignId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}",
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example retrieves all the disapproved ads in a given campaign."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="campaignId">Id of the campaign for which disapproved ads
    ''' are retrieved.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal campaignId As Long)
      ' Get the AdGroupAdService.
      Dim service As AdGroupAdService = CType(user.GetService(
          AdWordsService.v201708.AdGroupAdService), AdGroupAdService)

      ' Create the selector.
      Dim selector As New Selector
      selector.fields = New String() {
        Ad.Fields.Id, AdGroupAd.Fields.PolicySummary
      }

      ' Set the filters.
      selector.predicates = New Predicate() {
        Predicate.Equals(AdGroup.Fields.CampaignId, campaignId),
        Predicate.Equals(AdGroupAdPolicySummary.Fields.CombinedApprovalStatus,
             PolicyApprovalStatus.DISAPPROVED.ToString())
      }

      ' Set the selector paging.
      selector.paging = Paging.Default

      Dim page As New AdGroupAdPage
      Dim disapprovedAdsCount As Integer = 0

      Try
        Do
          ' Get the disapproved ads.
          page = service.get(selector)

          ' Display the results.
          If Not (page Is Nothing) AndAlso Not (page.entries Is Nothing) Then
            For Each AdGroupAd As AdGroupAd In page.entries
              Dim policySummary As AdGroupAdPolicySummary = AdGroupAd.policySummary
              disapprovedAdsCount += 1
              Console.WriteLine("Ad with ID {0} and type '{1}' was disapproved with the " +
                "following policy topic entries: ", AdGroupAd.ad.id, AdGroupAd.ad.AdType)
              For Each PolicyTopicEntry As PolicyTopicEntry In policySummary.policyTopicEntries
                Console.WriteLine("  topic id: {0}, topic name: '{1}'",
                  PolicyTopicEntry.policyTopicId, PolicyTopicEntry.policyTopicName)
              Next
            Next
          End If

          selector.paging.IncreaseOffset()
        Loop While selector.paging.startIndex < page.totalNumEntries
        Console.WriteLine("Number of disapproved ads found: {0}", disapprovedAdsCount)
      Catch e As Exception
        Throw New System.ApplicationException("Failed to get disapproved ads.", e)
      End Try
    End Sub
  End Class
End Namespace

Get all disapproved ads in an ad group using AWQL

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example retrieves all the disapproved ads in a given campaign
  ''' using an AWQL query. See
  ''' https://developers.google.com/adwords/api/docs/guides/awql for AWQL
  ''' documentation.
  ''' </summary>
  Public Class GetAllDisapprovedAdsWithAwql
    Inherits ExampleBase
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New GetAllDisapprovedAdsWithAwql
      Console.WriteLine(codeExample.Description)
      Try
        Dim campaignId As Long = Long.Parse("INSERT_CAMPAIGN_ID_HERE")
        codeExample.Run(New AdWordsUser, campaignId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}",
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example retrieves all the disapproved ads in a given campaign using " &
            "an AWQL query. See https://developers.google.com/adwords/api/docs/guides/awql for " &
            "AWQL documentation."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="campaignId">Id of the campaign for which disapproved ads
    ''' are retrieved.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal campaignId As Long)
      ' Get the AdGroupAdService.
      Dim service As AdGroupAdService = CType(user.GetService(
          AdWordsService.v201708.AdGroupAdService), AdGroupAdService)

      ' Get all the disapproved ads for this campaign.
      Dim query As String = String.Format("SELECT Id, PolicySummary WHERE CampaignId = {0} " &
          "and CombinedApprovalStatus = DISAPPROVED ORDER BY Id", campaignId)

      Dim offset As Long = 0
      Dim pageSize As Long = 500

      Dim page As New AdGroupAdPage()
      Dim disapprovedAdsCount As Integer = 0

      Try
        Do
          Dim queryWithPaging As String = String.Format("{0} LIMIT {1}, {2}", query, offset,
              pageSize)
          ' Get the disapproved ads.
          page = service.query(queryWithPaging)

          ' Display the results.
          If Not (page Is Nothing) AndAlso Not (page.entries Is Nothing) Then
            For Each AdGroupAd As AdGroupAd In page.entries
              Dim policySummary As AdGroupAdPolicySummary = AdGroupAd.policySummary
              disapprovedAdsCount += 1
              Console.WriteLine("Ad with ID {0} and type '{1}' was disapproved with the " +
                "following policy topic entries: ", AdGroupAd.ad.id, AdGroupAd.ad.AdType)
              For Each PolicyTopicEntry As PolicyTopicEntry In policySummary.policyTopicEntries
                Console.WriteLine("  topic id: {0}, topic name: '{1}'",
                  PolicyTopicEntry.policyTopicId, PolicyTopicEntry.policyTopicName)
              Next
            Next
          End If

          offset = offset + pageSize
        Loop While (offset < page.totalNumEntries)
        Console.WriteLine("Number of disapproved ads found: {0}", disapprovedAdsCount)
      Catch e As Exception
        Throw New System.ApplicationException("Failed to get disapproved ads.", e)
      End Try
    End Sub
  End Class
End Namespace

Get all campaigns with a specific label

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example gets all campaigns with a specific label. To add a
  ''' label to campaigns, run AddCampaignLabels.vb.
  ''' </summary>
  Public Class GetCampaignsByLabel
    Inherits ExampleBase
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New GetCampaignsByLabel
      Console.WriteLine(codeExample.Description)
      Dim labelId As Long = Long.Parse("INSERT_LABEL_ID_HERE")

      Try
        codeExample.Run(New AdWordsUser, labelId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}", _
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example gets all campaigns with a specific label. To add a" & _
            " label to campaigns, run AddCampaignLabels.vb."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="labelId">ID of the label.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal labelId As Long)
      ' Get the CampaignService.
      Dim campaignService As CampaignService = CType(user.GetService( _
          AdWordsService.v201708.CampaignService), CampaignService)

      ' Create the selector.
      Dim selector As New Selector
      selector.fields = New String() {
        Campaign.Fields.Id, Campaign.Fields.Name, Campaign.Fields.Labels
      }

      ' Labels filtering is performed by ID. You can use CONTAINS_ANY to
      ' select campaigns with any of the label IDs, CONTAINS_ALL to select
      ' campaigns with all of the label IDs, or CONTAINS_NONE to select
      ' campaigns with none of the label IDs.
      selector.predicates = New Predicate() {
        Predicate.ContainsAny(Campaign.Fields.Labels, New String() {labelId.ToString()})
      }

      ' Set the selector paging.
      selector.paging = Paging.Default

      Dim page As New CampaignPage

      Try
        Do
          ' Get the campaigns.
          page = campaignService.get(selector)

          ' Display the results.
          If Not (page Is Nothing) AndAlso Not (page.entries Is Nothing) Then
            Dim i As Integer = selector.paging.startIndex
            For Each campaign As Campaign In page.entries
              Dim labelNames As New List(Of String)
              For Each label As Label In campaign.labels
                labelNames.Add(label.name)
              Next

              Console.WriteLine("{0}) Campaign with id = '{1}', name = '{2}' and labels = " & _
                                "'{3}' was found.", i + 1, campaign.id, campaign.name, _
                  String.Join(", ", labelNames.ToArray()))
              i = i + 1
            Next
          End If
          selector.paging.IncreaseOffset()
        Loop While selector.paging.startIndex < page.totalNumEntries
        Console.WriteLine("Number of campaigns found: {0}", page.totalNumEntries)
      Catch e As Exception
        Throw New System.ApplicationException("Failed to retrieve campaigns by label.", e)
      End Try
    End Sub
  End Class
End Namespace

Graduate a trial

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example illustrates how to graduate a trial. See the Campaign
  ''' Drafts and Experiments guide for more information: 
  ''' https://developers.google.com/adwords/api/docs/guides/campaign-drafts-experiments
  ''' </summary>
  Public Class GraduateTrial
    Inherits ExampleBase
    
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New GraduateTrial
      Console.WriteLine(codeExample.Description)
      Try
        Dim trialId as Long = Long.Parse("INSERT_TRIAL_ID_HERE")
        codeExample.Run(new AdWordsUser(), trialId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}", _
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        return "This code example illustrates how to graduate a trial. See the Campaign " & _
            "Drafts and Experiments guide for more information: " & _
            "https://developers.google.com/adwords/api/docs/guides/campaign-drafts-experiments"
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="trialId">Id of the trial to be graduated.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal trialId As Long)
      ' Get the TrialService and BudgetService.
      Dim trialService as TrialService = CType(user.GetService(
          AdWordsService.v201708.TrialService), TrialService)
      Dim budgetService as BudgetService = CType(user.GetService(
          AdWordsService.v201708.BudgetService), BudgetService)

      Try
        ' To graduate a trial, you must specify a different budget from the
        ' base campaign. The base campaign (in order to have had a trial based
        ' on it) must have a non-shared budget, so it cannot be shared with
        ' the new independent campaign created by graduation.
        Dim budget As new Budget()
        budget.name = "Budget #" + ExampleUtilities.GetRandomString()
        budget.amount = new Money()
        budget.amount.microAmount = 50000000L
        budget.deliveryMethod = BudgetBudgetDeliveryMethod.STANDARD

        Dim budgetOperation As new BudgetOperation()
        budgetOperation.operator = [Operator].ADD
        budgetOperation.operand = budget

        ' Add budget.
        Dim budgetId as Long = budgetService.mutate(
            new BudgetOperation() {budgetOperation}).value(0).budgetId

        Dim trial As new Trial()
        trial.id = trialId
        trial.budgetId = budgetId
        trial.status = TrialStatus.GRADUATED

        Dim trialOperation As new TrialOperation()
        trialOperation.operator = [Operator].SET
        trialOperation.operand = trial
 
        ' Update the trial.
        trial = trialService.mutate(new TrialOperation() {trialOperation}).value(0)

        ' Graduation is a synchronous operation, so the campaign is already
        ' ready. If you promote instead, make sure to see the polling scheme
        ' demonstrated in AddTrial.cs to wait for the asynchronous operation
        ' to finish.
        Console.WriteLine("Trial ID {0} graduated. Campaign ID {1} was given a new budget " &
            "ID {2} and is no Longer dependent on this trial.", trial.id, trial.trialCampaignId,
            budgetId)
      Catch e As Exception
        Throw New System.ApplicationException("Failed to graduate trial.", e)
      End Try
    End Sub
  End Class
End Namespace

Set ad parameters

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example illustrates how to create a text ad with ad parameters.
  ''' To add an ad group, run AddAdGroup.vb. To add a keyword, run
  ''' AddKeyword.vb.
  ''' </summary>
  Public Class SetAdParameters
    Inherits ExampleBase
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New SetAdParameters
      Console.WriteLine(codeExample.Description)
      Try
        Dim adGroupId As Long = Long.Parse("INSERT_ADGROUP_ID_HERE")
        Dim criterionId As Long = Long.Parse("INSERT_CRITERION_ID_HERE")

        codeExample.Run(New AdWordsUser, adGroupId, criterionId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}", _
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example illustrates how to create a text ad with ad parameters. To " & _
            "add an ad group, run AddAdGroup.vb. To add a keyword, run AddKeyword.vb."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="adGroupId">Id of the ad group that contains the criterion.
    ''' </param>
    ''' <param name="criterionId">Id of the keyword for which the ad
    ''' parameters are set.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal adGroupId As Long, ByVal criterionId As Long)
      ' Get the AdGroupAdService.
      Dim adGroupAdService As AdGroupAdService = CType(user.GetService( _
          AdWordsService.v201708.AdGroupAdService), AdGroupAdService)

      ' Get the AdParamService.
      Dim adParamService As AdParamService = CType(user.GetService( _
          AdWordsService.v201708.AdParamService), AdParamService)

      ' Create the expanded text ad.
      Dim expandedTextAd As New ExpandedTextAd()
      expandedTextAd.headlinePart1 = "Mars Cruises"
      expandedTextAd.headlinePart2 = "Low-gravity fun for {param1:cheap}."
      expandedTextAd.description = "Only {param2:a few} seats left!"
      expandedTextAd.finalUrls = New String() {"http://www.example.com"}

      Dim adOperand As New AdGroupAd
      adOperand.adGroupId = adGroupId
      adOperand.status = AdGroupAdStatus.ENABLED
      adOperand.ad = expandedTextAd

      ' Create the operation.
      Dim adOperation As New AdGroupAdOperation
      adOperation.operand = adOperand
      adOperation.operator = [Operator].ADD

      ' Create the expanded text ad.
      Dim retVal As AdGroupAdReturnValue = adGroupAdService.mutate( _
          New AdGroupAdOperation() {adOperation})

      ' Display the results.
      If ((Not retVal Is Nothing) AndAlso (Not retVal.value Is Nothing) _
          AndAlso (retVal.value.Length > 0)) Then
        Console.WriteLine("Expanded text ad with id = ""{0}"" was successfully added.", _
            retVal.value(0).ad.id)
      Else
        Throw New System.ApplicationException("Failed to create expanded text ads.")
        Return
      End If

      ' Create the ad param for price.
      Dim priceParam As New AdParam
      priceParam.adGroupId = adGroupId
      priceParam.criterionId = criterionId
      priceParam.paramIndex = 1
      priceParam.insertionText = "$100"

      ' Create the ad param for seats.
      Dim seatParam As New AdParam
      seatParam.adGroupId = adGroupId
      seatParam.criterionId = criterionId
      seatParam.paramIndex = 2
      seatParam.insertionText = "50"

      ' Create the operations.
      Dim priceOperation As New AdParamOperation
      priceOperation.operator = [Operator].SET
      priceOperation.operand = priceParam

      Dim seatOperation As New AdParamOperation
      seatOperation.operator = [Operator].SET
      seatOperation.operand = seatParam

      Try
        ' Set the ad parameters.
        Dim newAdParams As AdParam() = adParamService.mutate(New AdParamOperation() _
            {priceOperation, seatOperation})

        'Display the results.
        If (Not newAdParams Is Nothing) Then
          Console.WriteLine("Ad parameters were successfully updated.")
        Else
          Console.WriteLine("No ad parameters were set.")
        End If
      Catch e As Exception
        Throw New System.ApplicationException("Failed to set ad parameter(s).", e)
      End Try
    End Sub
  End Class
End Namespace

Set bid modifier

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example sets a bid modifier for the mobile platform on given
  ''' campaign. The campaign must be an enhanced type of campaign. To get
  ''' campaigns, run GetCampaigns.vb. To enhance a campaign, run
  ''' SetCampaignEnhanced.vb.
  ''' </summary>
  Public Class SetBidModifier
    Inherits ExampleBase
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New SetBidModifier
      Console.WriteLine(codeExample.Description)
      Try
        Dim campaignId As Long = Long.Parse("INSERT_CAMPAIGN_ID_HERE")
        Dim bidModifier As Double = Double.Parse("INSERT_BID_MODIFIER_HERE")
        codeExample.Run(New AdWordsUser, campaignId, bidModifier)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}", _
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    '''
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example sets a bid modifier for the mobile platform on given " & _
            "campaign. The campaign must be an enhanced type of campaign. To get campaigns, " & _
            "run GetCampaigns.vb. To enhance a campaign, run SetCampaignEnhanced.vb."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="campaignId">Id of the campaign whose bid should be modified.
    ''' </param>
    ''' <param name="bidModifier">The bid modifier.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal campaignId As Long, ByVal bidModifier As Double)
      ' Get the CampaignCriterionService.
      Dim campaignCriterionService As CampaignCriterionService = CType(user.GetService( _
          AdWordsService.v201708.CampaignCriterionService),  _
          CampaignCriterionService)

      ' Create mobile platform. The ID can be found in the documentation.
      ' https://developers.google.com/adwords/api/docs/appendix/platforms
      Dim mobile As New Platform()
      mobile.id = 30001

      ' Create criterion with modified bid.
      Dim criterion As New CampaignCriterion()
      criterion.campaignId = campaignId
      criterion.criterion = mobile
      criterion.bidModifier = bidModifier

      ' Create SET operation.
      Dim operation As New CampaignCriterionOperation()
      operation.operator = [Operator].SET
      operation.operand = criterion

      Try
        ' Update campaign criteria.
        Dim result As CampaignCriterionReturnValue = campaignCriterionService.mutate( _
            New CampaignCriterionOperation() {operation})

        ' Display campaign criteria.
        If Not result.value Is Nothing Then
          For Each newCriterion As CampaignCriterion In result.value
            Console.WriteLine("Campaign criterion with campaign id '{0}', criterion id '{1}' " & _
                "and type '{2}' was modified with bid {3:F2}.", newCriterion.campaignId, _
                newCriterion.criterion.id, newCriterion.criterion.type, newCriterion.bidModifier)
          Next
        Else
          Console.WriteLine("No campaigns were modified.")
        End If
      Catch e As Exception
        Throw New System.ApplicationException("Failed to set bid modifier.", e)
      End Try
    End Sub
  End Class
End Namespace

Validate text ad

' Copyright 2017, Google Inc. All Rights Reserved.
'
' 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.

Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.v201708

Imports System
Imports System.Collections.Generic
Imports System.IO

Namespace Google.Api.Ads.AdWords.Examples.VB.v201708
  ''' <summary>
  ''' This code example shows how to use the validateOnly header to validate
  ''' an expanded text ad. No objects will be created, but exceptions will
  ''' still be thrown.
  ''' </summary>
  Public Class ValidateTextAd
    Inherits ExampleBase
    ''' <summary>
    ''' Main method, to run this code example as a standalone application.
    ''' </summary>
    ''' <param name="args">The command line arguments.</param>
    Public Shared Sub Main(ByVal args As String())
      Dim codeExample As New ValidateTextAd
      Console.WriteLine(codeExample.Description)
      Try
        Dim adGroupId As Long = Long.Parse("INSERT_ADGROUP_ID_HERE")
        codeExample.Run(New AdWordsUser, adGroupId)
      Catch e As Exception
        Console.WriteLine("An exception occurred while running this code example. {0}", _
            ExampleUtilities.FormatException(e))
      End Try
    End Sub

    ''' <summary>
    ''' Returns a description about the code example.
    ''' </summary>
    '''
    Public Overrides ReadOnly Property Description() As String
      Get
        Return "This code example shows how to use the validateOnly header to validate an " & _
            "expanded text ad. No objects will be created, but exceptions will still be thrown."
      End Get
    End Property

    ''' <summary>
    ''' Runs the code example.
    ''' </summary>
    ''' <param name="user">The AdWords user.</param>
    ''' <param name="adGroupId">Id of the ad group to which text ads are
    ''' added.</param>
    Public Sub Run(ByVal user As AdWordsUser, ByVal adGroupId As Long)
      ' Get the AdGroupAdService.
      Dim adGroupAdService As AdGroupAdService = CType(user.GetService( _
          AdWordsService.v201708.AdGroupAdService), AdGroupAdService)

      ' Set the validateOnly headers.
      adGroupAdService.RequestHeader.validateOnly = True

      ' Create your expanded text ad.
      Dim expandedTextAd As New ExpandedTextAd()
      expandedTextAd.headlinePart1 = "Luxury Cruise to Mars"
      expandedTextAd.headlinePart2 = "Visit the Red Planet in style."
      expandedTextAd.description = "Low-gravity fun for everyone!!"
      expandedTextAd.finalUrls = New String() {"http://www.example.com"}

      Dim adGroupAd As New AdGroupAd
      adGroupAd.adGroupId = adGroupId
      adGroupAd.ad = expandedTextAd

      Dim operation As New AdGroupAdOperation
      operation.operator = [Operator].ADD
      operation.operand = adGroupAd
      Try
        Dim retVal As AdGroupAdReturnValue = adGroupAdService.mutate( _
            New AdGroupAdOperation() {operation})
        ' Since validation is ON, result will be null.
        Console.WriteLine("Expanded text ad validated successfully.")
      Catch e As AdWordsApiException
        ' This block will be hit if there is a validation error from the server.
        Console.WriteLine("There were validation error(s) while adding expanded text ad.")

        If (Not e.ApiException Is Nothing) Then
          For Each apiError As ApiError In DirectCast(e.ApiException, ApiException).errors
            Console.WriteLine("  Error type is '{0}' and fieldPath is '{1}'.", _
                apiError.ApiErrorType, apiError.fieldPath)
          Next
        End If
      Catch e As Exception
        Throw New System.ApplicationException("Failed to validate expanded text ad.", e)
      End Try
    End Sub
  End Class
End Namespace

Send feedback about...

AdWords API
AdWords API
Need help? Visit our support page.