The code samples below provide examples of common account management functions using the AdWords API. Client Library.
Accept an invitation for linking to a manager account
' Copyright 2018 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. Imports Google.Api.Ads.AdWords.Lib Imports Google.Api.Ads.AdWords.v201809 Namespace Google.Api.Ads.AdWords.Examples.VB.v201809 ''' <summary> ''' This code example accepts a pending invitation to link your AdWords ''' account to a Google Merchant Center account. ''' </summary> Public Class AcceptServiceLink 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 AcceptServiceLink Console.WriteLine(codeExample.Description) Try Dim serviceLinkId As Long = Long.Parse("INSERT_SERVICE_LINK_ID_HERE") codeExample.Run(New AdWordsUser, serviceLinkId) 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 accepts a pending invitation to link your AdWords " & "account to a Google Merchant Center account." End Get End Property ''' <summary> ''' Runs the code example. ''' </summary> ''' <param name="user">The AdWords user.</param> ''' <param name="serviceLinkId">The service link ID to accept.</param> Public Sub Run(ByVal user As AdWordsUser, ByVal serviceLinkId As Long) Using customerService As CustomerService = CType( user.GetService( AdWordsService.v201809.CustomerService), CustomerService) ' Create the operation to set the status to ACTIVE. Dim op As New ServiceLinkOperation() op.operator = [Operator].SET Dim serviceLink As New ServiceLink() serviceLink.serviceLinkId = serviceLinkId serviceLink.serviceType = ServiceType.MERCHANT_CENTER serviceLink.linkStatus = ServiceLinkLinkStatus.ACTIVE op.operand = serviceLink Try ' Update the service link. Dim mutatedServiceLinks As ServiceLink() = customerService.mutateServiceLinks(New ServiceLinkOperation() {op}) ' Display the results. For Each mutatedServiceLink As ServiceLink In mutatedServiceLinks Console.WriteLine( "Service link with service link ID {0}, type '{1}' updated to " & "status: {2}.", mutatedServiceLink.serviceLinkId, mutatedServiceLink.serviceType, mutatedServiceLink.linkStatus) Next Catch e As Exception Throw New System.ApplicationException("Failed to update service link.", e) End Try End Using End Sub End Class End Namespace
Create a new account under an AdWords manager
' Copyright 2018 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. Imports Google.Api.Ads.AdWords.Lib Imports Google.Api.Ads.AdWords.v201809 Namespace Google.Api.Ads.AdWords.Examples.VB.v201809 ''' <summary> ''' This code example illustrates how to create an account. Note by default, ''' this account will only be accessible via its parent AdWords manager ''' account. ''' </summary> Public Class CreateAccount 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 CreateAccount 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 create an account. Note by default, " & "this account will only be accessible via its parent AdWords manager " & "account." End Get End Property ''' <summary> ''' Runs the code example. ''' </summary> ''' <param name="user">The AdWords user.</param> Public Sub Run(ByVal user As AdWordsUser) Using managedCustomerService As ManagedCustomerService = CType( user.GetService( AdWordsService.v201809.ManagedCustomerService), ManagedCustomerService) ' Create account. Dim customer As New ManagedCustomer() customer.name = "Customer created with ManagedCustomerService on " & New DateTime().ToString() customer.currencyCode = "EUR" customer.dateTimeZone = "Europe/London" ' Create operations. Dim operation As New ManagedCustomerOperation() operation.operand = customer operation.operator = [Operator].ADD Try Dim operations As ManagedCustomerOperation() = New ManagedCustomerOperation() _ {operation} ' Add account. Dim result As ManagedCustomerReturnValue = managedCustomerService.mutate(operations) ' Display accounts. If (Not result.value Is Nothing) AndAlso (result.value.Length > 0) Then Dim customerResult As ManagedCustomer = result.value(0) Console.WriteLine("Account with customer ID '{0}' was created.", customerResult.customerId) Else Console.WriteLine("No accounts were created.") End If Catch e As Exception Throw New System.ApplicationException("Failed to create accounts.", e) End Try End Using End Sub End Class End Namespace
Get all account changes during the past 24 hours
' Copyright 2018 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. Imports Google.Api.Ads.AdWords.Lib Imports Google.Api.Ads.AdWords.v201809 Imports System.Text Namespace Google.Api.Ads.AdWords.Examples.VB.v201809 ''' <summary> ''' This code example gets the changes in the account during the last 24 ''' hours. ''' </summary> Public Class GetAccountChanges 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 GetAccountChanges 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 gets the changes in the account during the last 24 hours." End Get End Property ''' <summary> ''' Runs the code example. ''' </summary> ''' <param name="user">The AdWords user.</param> Public Sub Run(ByVal user As AdWordsUser) Using customerSyncService As CustomerSyncService = CType( user.GetService( AdWordsService.v201809.CustomerSyncService), CustomerSyncService) ' The date time string should be of the form yyyyMMdd HHmmss zzz. Dim minDateTime As String = (DateTime.Now.AddDays(- 1).ToUniversalTime.ToString( "yyyyMMdd HHmmss") & " UTC") Dim maxDateTime As String = (DateTime.Now.ToUniversalTime.ToString( "yyyyMMdd HHmmss") & " UTC") ' Create date time range. Dim dateTimeRange As New DateTimeRange dateTimeRange.min = minDateTime dateTimeRange.max = maxDateTime Try ' Create the selector. Dim selector As New CustomerSyncSelector selector.dateTimeRange = dateTimeRange selector.campaignIds = GetAllCampaignIds(user) ' Get all account changes for campaign. Dim accountChanges As CustomerChangeData = customerSyncService.get(selector) ' Display the changes. If ((Not accountChanges Is Nothing) AndAlso (Not accountChanges.changedCampaigns Is Nothing)) Then Console.WriteLine("Displaying changes up to: {0}", accountChanges.lastChangeTimestamp) For Each campaignChanges As CampaignChangeData In _ accountChanges.changedCampaigns Console.WriteLine("Campaign with id ""{0}"" was changed:", campaignChanges.campaignId) Console.WriteLine(" Campaign changed status: {0}", campaignChanges.campaignChangeStatus) If (campaignChanges.campaignChangeStatus <> ChangeStatus.NEW) Then Console.WriteLine(" Added campaign criteria: {0}", GetFormattedList( campaignChanges.addedCampaignCriteria)) Console.WriteLine(" Removed campaign criteria: {0}", GetFormattedList( campaignChanges.removedCampaignCriteria)) If (Not campaignChanges.changedAdGroups Is Nothing) Then For Each adGroupChanges As AdGroupChangeData In _ campaignChanges.changedAdGroups Console.WriteLine(" Ad group with id ""{0}"" was changed:", adGroupChanges.adGroupId) Console.WriteLine(" Ad group changed status: {0}", adGroupChanges.adGroupChangeStatus) If (adGroupChanges.adGroupChangeStatus <> ChangeStatus.NEW) Then Console.WriteLine(" Ads changed: {0}", GetFormattedList( adGroupChanges.changedAds)) Console.WriteLine(" Criteria changed: {0}", GetFormattedList( adGroupChanges.changedCriteria)) Console.WriteLine(" Criteria removed: {0}", GetFormattedList( adGroupChanges.removedCriteria)) End If Next End If End If Console.WriteLine() Next Else Console.WriteLine("No account changes were found.") End If Catch e As Exception Throw New System.ApplicationException("Failed to get account changes.", e) End Try End Using End Sub ''' <summary> ''' Formats a list of ids as a comma separated string. ''' </summary> ''' <param name="ids">The list of ids.</param> ''' <returns>The comma separed formatted string, enclosed in square braces. ''' </returns> Private Function GetFormattedList(ByVal ids As Long()) As String Dim builder As New StringBuilder If (Not ids Is Nothing) Then For Each id As Long In ids builder.AppendFormat("{0}, ", id) Next End If Return ("[" & builder.ToString.TrimEnd(New Char() {","c, " "c}) & "]") End Function ''' <summary> ''' Gets all campaign ids in the account. ''' </summary> ''' <param name="user">The user for which campaigns are retrieved.</param> ''' <returns>The list of campaign ids.</returns> Private Function GetAllCampaignIds(ByVal user As AdWordsUser) As Long() ' Get the CampaignService. Using campaignService As CampaignService = CType( user.GetService( AdWordsService.v201809.CampaignService), CampaignService) Dim allCampaigns As New List(Of Long) ' Create the selector. Dim selector As New Selector selector.fields = New String() {Campaign.Fields.Id} ' Get all campaigns. Dim page As CampaignPage = campaignService.get(selector) ' Return the results. If ((Not page Is Nothing) AndAlso (Not page.entries Is Nothing)) Then For Each campaign As Campaign In page.entries allCampaigns.Add(campaign.id) Next End If Return allCampaigns.ToArray End Using End Function End Class End Namespace
Get the account hierarchy under the current account
' Copyright 2018 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. Imports Google.Api.Ads.AdWords.Lib Imports Google.Api.Ads.AdWords.v201809 Imports System.Text Namespace Google.Api.Ads.AdWords.Examples.VB.v201809 ''' <summary> ''' This code example illustrates how to retrieve the account hierarchy under ''' an account. This code example won't work with Test Accounts. See ''' https://developers.google.com/adwords/api/docs/test-accounts ''' </summary> Public Class GetAccountHierarchy 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 GetAccountHierarchy 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 retrieve the account hierarchy under " & "an account. This code example won't work with Test Accounts. See " & "https://developers.google.com/adwords/api/docs/test-accounts" End Get End Property ''' <summary> ''' Runs the code example. ''' </summary> ''' <param name="user">The AdWords user.</param> Public Sub Run(ByVal user As AdWordsUser) Using managedCustomerService As ManagedCustomerService = CType( user.GetService( AdWordsService.v201809.ManagedCustomerService), ManagedCustomerService) ' Create selector. Dim selector As New Selector() selector.fields = New String() { _ ManagedCustomer.Fields.CustomerId, ManagedCustomer.Fields.Name } selector.paging = Paging.Default ' Map from customerId to customer node. Dim customerIdToCustomerNode As Dictionary(Of Long, ManagedCustomerTreeNode) = New Dictionary(Of Long, ManagedCustomerTreeNode)() ' Temporary cache to save links. Dim allLinks As New List(Of ManagedCustomerLink) Dim page As ManagedCustomerPage = Nothing Try Do page = managedCustomerService.get(selector) ' Display serviced account graph. If Not page.entries Is Nothing Then ' Create account tree nodes for each customer. For Each customer As ManagedCustomer In page.entries Dim node As New ManagedCustomerTreeNode() node.Account = customer customerIdToCustomerNode.Add(customer.customerId, node) Next If Not page.links Is Nothing Then allLinks.AddRange(page.links) End If End If selector.paging.IncreaseOffset() Loop While (selector.paging.startIndex < page.totalNumEntries) ' For each link, connect nodes in tree. For Each link As ManagedCustomerLink In allLinks Dim managerNode As ManagedCustomerTreeNode = customerIdToCustomerNode(link.managerCustomerId) Dim childNode As ManagedCustomerTreeNode = customerIdToCustomerNode(link.clientCustomerId) childNode.ParentNode = managerNode If (Not managerNode Is Nothing) Then managerNode.ChildAccounts.Add(childNode) End If Next ' Find the root account node in the tree. Dim rootNode As ManagedCustomerTreeNode = Nothing For Each node As ManagedCustomerTreeNode In customerIdToCustomerNode.Values If node.ParentNode Is Nothing Then rootNode = node Exit For End If Next ' Display account tree. Console.WriteLine("CustomerId, Name") Console.WriteLine(rootNode.ToTreeString(0, New StringBuilder())) Catch e As Exception Throw New System.ApplicationException("Failed to get accounts.", e) End Try End Using End Sub End Class ''' <summary> '''Example implementation of a node that would exist in an account tree. ''' </summary> Class ManagedCustomerTreeNode ''' <summary> ''' The parent node. ''' </summary> Private _parentNode As ManagedCustomerTreeNode ''' <summary> ''' The account associated with this node. ''' </summary> Private _account As ManagedCustomer ''' <summary> ''' The list of child accounts. ''' </summary> Private _childAccounts As New List(Of ManagedCustomerTreeNode) ''' <summary> ''' Gets or sets the parent node. ''' </summary> Public Property ParentNode() As ManagedCustomerTreeNode Get Return _parentNode End Get Set(ByVal value As ManagedCustomerTreeNode) _parentNode = value End Set End Property ''' <summary> ''' Gets or sets the account. ''' </summary> Public Property Account() As ManagedCustomer Get Return _account End Get Set(ByVal value As ManagedCustomer) _account = value End Set End Property ''' <summary> ''' Gets or sets the child accounts. ''' </summary> Public Property ChildAccounts() As List(Of ManagedCustomerTreeNode) Get Return _childAccounts End Get Set(ByVal value As List(Of ManagedCustomerTreeNode)) _childAccounts = value End Set End Property ''' <summary> ''' Returns a <see cref="System.String"/> that represents this instance. ''' </summary> ''' <returns> ''' A <see cref="System.String"/> that represents this instance. ''' </returns> Public Overrides Function ToString() As String Return String.Format("{0}, {1}", _account.customerId, _account.name) End Function ''' <summary> ''' Returns a string representation of the current level of the tree and ''' recursively returns the string representation of the levels below it. ''' </summary> ''' <param name="depth">The depth of the node.</param> ''' <param name="sb">The String Builder containing the tree ''' representation.</param> ''' <returns>The tree string representation.</returns> Public Function ToTreeString(ByVal depth As Integer, ByVal sb As StringBuilder) _ As StringBuilder sb.Append("-"c, depth*2) sb.Append(Me) sb.AppendLine() For Each childAccount As ManagedCustomerTreeNode In _childAccounts childAccount.ToTreeString(depth + 1, sb) Next Return sb End Function End Class End Namespace