The AdWords API will sunset on April 27, 2022. Migrate to the Google Ads API to take advantage of the latest Google Ads features.

Miscellaneous Samples

The code samples below provide examples of miscellaneous management functions available in the AdWords API. Client Library.

Get all image assets

#!/usr/bin/env python
#
# 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
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""This example gets all image assets.

To upload an image asset, run upload_image_asset.py

The LoadFromStorage method is pulling credentials and properties from a
"googleads.yaml" file. By default, it looks for this file in your home
directory. For more information, see the "Caching authentication information"
section of our README.

"""

from googleads import adwords


PAGE_SIZE = 500


def main(client):
  # Initialize appropriate service.
  asset_service = client.GetService('AssetService', version='v201809')

  # Construct selector and get all images.
  offset = 0
  selector = {
      'fields': ['AssetName', 'AssetStatus', 'ImageFileSize', 'ImageWidth',
                 'ImageHeight', 'ImageFullSizeUrl'],
      'predicates': [{
          'field': 'AssetSubtype',
          'operator': 'IN',
          'values': ['IMAGE']
      }],
      'paging': {
          'startIndex': str(offset),
          'numberResults': str(PAGE_SIZE)
      }
  }
  more_pages = True
  while more_pages:
    page = asset_service.get(selector)

    # Display results.
    if 'entries' in page:
      for image in page['entries']:
        print('Image asset with id %s, name "%s", and status %s was found.\n'
              '\tSize is %sx%s and asset URL is %s.' %
              (image['assetId'], image['assetName'], image['assetStatus'],
               image['fullSizeInfo']['imageWidth'],
               image['fullSizeInfo']['imageHeight'],
               image['fullSizeInfo']['imageUrl']))
    else:
      print('No images/videos were found.')
    offset += PAGE_SIZE
    selector['paging']['startIndex'] = str(offset)
    more_pages = offset < int(page['totalNumEntries'])



if __name__ == '__main__':
  # Initialize client object.
  adwords_client = adwords.AdWordsClient.LoadFromStorage()

  main(adwords_client)

Get all images and videos

#!/usr/bin/env python
#
# Copyright 2016 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.

"""This example gets all images and videos.

To upload an image, run upload_image.py. Use the Google Ads website to upload
new videos.

The LoadFromStorage method is pulling credentials and properties from a
"googleads.yaml" file. By default, it looks for this file in your home
directory. For more information, see the "Caching authentication information"
section of our README.

"""

from googleads import adwords


PAGE_SIZE = 500


def main(client):
  # Initialize appropriate service.
  media_service = client.GetService('MediaService', version='v201809')

  # Construct selector and get all images.
  offset = 0
  selector = {
      'fields': ['MediaId', 'Type', 'Width', 'Height', 'MimeType'],
      'predicates': [{
          'field': 'Type',
          'operator': 'IN',
          'values': ['IMAGE', 'VIDEO']
      }],
      'paging': {
          'startIndex': str(offset),
          'numberResults': str(PAGE_SIZE)
      }
  }
  more_pages = True
  while more_pages:
    page = media_service.get(selector)

    # Display results.
    if 'entries' in page:
      for image in page['entries']:
        try:
          dimensions = dict([(entry['key'], entry['value'])
                             for entry in image['dimensions']])
        except AttributeError:
          dimensions = {'FULL': {'height': 0, 'width': 0}}
        if image['type'] == 'IMAGE':
          print('%s with id "%s", dimensions \'%sx%s\', and MimeType "%s"'
                ' was found.' % (image['type'], image['mediaId'],
                                 dimensions['FULL']['height'],
                                 dimensions['FULL']['width'],
                                 image['mimeType']))
        elif image['type'] == 'VIDEO':
          print('%s with id "%s" was found.' % (image['type'],
                                                image['mediaId']))
    else:
      print('No images/videos were found.')
    offset += PAGE_SIZE
    selector['paging']['startIndex'] = str(offset)
    more_pages = offset < int(page['totalNumEntries'])


if __name__ == '__main__':
  # Initialize client object.
  adwords_client = adwords.AdWordsClient.LoadFromStorage()

  main(adwords_client)

Upload an image

#!/usr/bin/env python
#
# Copyright 2016 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.

"""This example uploads an image.

To get images, run get_all_images.py.

The LoadFromStorage method is pulling credentials and properties from a
"googleads.yaml" file. By default, it looks for this file in your home
directory. For more information, see the "Caching authentication information"
section of our README.

"""


from googleads import adwords


IMAGE_FILENAME = 'INSERT_IMAGE_PATH_HERE'


def main(client, image_filename):
  # Initialize appropriate service.
  media_service = client.GetService('MediaService', version='v201809')

  with open(image_filename, 'rb') as image_handle:
    image_data = image_handle.read().decode('utf-8')

  # Construct media and upload image.
  media = [{
      'xsi_type': 'Image',
      'data': image_data,
      'type': 'IMAGE'
  }]
  media = media_service.upload(media)[0]

  # Display results.
  if media:
    dimensions = dict([(entry['key'], entry['value'])
                       for entry in media['dimensions']])
    print('Image with id "%s", dimensions \'%sx%s\', and MimeType "%s" was'
          ' uploaded.' % (media['mediaId'], dimensions['FULL']['height'],
                          dimensions['FULL']['width'], media['mimeType']))
  else:
    print('No images were uploaded.')


if __name__ == '__main__':
  # Initialize client object.
  adwords_client = adwords.AdWordsClient.LoadFromStorage()

  main(adwords_client, IMAGE_FILENAME)

Upload an image asset

#!/usr/bin/env python
#
# 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
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""This example uploads an image asset.

To get image assets, run get_all_image_assets.py.

The LoadFromStorage method is pulling credentials and properties from a
"googleads.yaml" file. By default, it looks for this file in your home
directory. For more information, see the "Caching authentication information"
section of our README.

"""

from googleads import adwords
import requests


def main(client):
  # Initialize appropriate service.
  asset_service = client.GetService('AssetService', version='v201809')

  image_request = requests.get('https://goo.gl/3b9Wfh')
  image_data = image_request.content

  # Construct media and upload image asset.
  image_asset = {
      'xsi_type': 'ImageAsset',
      # Optional: Provide a unique friendly name to identify your asset. If you
      # specify the assetName field, then both the asset name and the image
      # being uploaded should be unique, and should not match another ACTIVE
      # asset in this customer account.
      # 'assetName': 'Jupiter Trip #' + str(uuid.uuid4())[:8],
      'imageData': image_data,

  }

  operation = {'operator': 'ADD', 'operand': image_asset}

  asset = asset_service.mutate([operation])['value'][0]

  # Display results.
  if asset:
    print('Image asset with id %s, name "%s", and status %s was created.\n'
          '\tSize is %sx%s and asset URL is %s.' %
          (asset['assetId'], asset['assetName'], asset['assetStatus'],
           asset['fullSizeInfo']['imageWidth'],
           asset['fullSizeInfo']['imageHeight'],
           asset['fullSizeInfo']['imageUrl']))
  else:
    print('No images were uploaded.')


if __name__ == '__main__':
  # Initialize client object.
  adwords_client = adwords.AdWordsClient.LoadFromStorage()

  main(adwords_client)

Upload an HTML5 zip file as a MediaBundle

#!/usr/bin/env python
#
# Copyright 2016 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.

"""This example uploads an HTML5 zip file.

"""

from urllib.request import urlopen

from googleads import adwords


def main(client):
  # Initialize appropriate service.
  media_service = client.GetService('MediaService', version='v201809')
  # Create HTML5 media.
  html5_zip = GetHTML5ZipFromUrl('https://goo.gl/9Y7qI2')
  # Create a media bundle containing the zip file with all the HTML5 components.
  media = [{
      'xsi_type': 'MediaBundle',
      'data': html5_zip,
      'type': 'MEDIA_BUNDLE'
  }]
  # Upload HTML5 zip.
  response = media_service.upload(media)

  if response:
    for media in response:
      print(
          'HTML5 media with ID %d, dimensions %dx%d, and MIME type "%s" '
          'uploaded successfully.' %
          (media['mediaId'], media['dimensions'][0]['value']['width'],
           media['dimensions'][0]['value']['height'], media['mimeType']))


def GetHTML5ZipFromUrl(url):
  """Retrieve zip file from the given URL."""
  response = urlopen(url)
  # Note: The utf-8 decode is for 2to3 Python 3 compatibility.
  return response.read().decode('utf-8')


if __name__ == '__main__':
  # Initialize client object.
  adwords_client = adwords.AdWordsClient.LoadFromStorage()
  main(adwords_client)