diff --git a/samples/adexchangebuyer/client_secrets.json b/samples/adexchangebuyer/client_secrets.json
new file mode 100644
index 0000000..323ffd0
--- /dev/null
+++ b/samples/adexchangebuyer/client_secrets.json
@@ -0,0 +1,9 @@
+{
+  "installed": {
+    "client_id": "[[INSERT CLIENT ID HERE]]",
+    "client_secret": "[[INSERT CLIENT SECRET HERE]]",
+    "redirect_uris": [],
+    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+    "token_uri": "https://accounts.google.com/o/oauth2/token"
+  }
+}
diff --git a/samples/adexchangebuyer/get_all_accounts.py b/samples/adexchangebuyer/get_all_accounts.py
new file mode 100644
index 0000000..1cba97d
--- /dev/null
+++ b/samples/adexchangebuyer/get_all_accounts.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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 accounts for the logged in user.
+
+Tags: accounts.list
+"""
+
+__author__ = 'david.t@google.com (David Torres)'
+
+import pprint
+import sys
+from oauth2client.client import AccessTokenRefreshError
+import sample_utils
+
+
+def main(argv):
+  sample_utils.process_flags(argv)
+  pretty_printer = pprint.PrettyPrinter()
+
+  # Authenticate and construct service
+  service = sample_utils.initialize_service()
+
+  try:
+    # Retrieve account list and display data as received
+    result = service.accounts().list().execute()
+    pretty_printer.pprint(result)
+  except AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adexchangebuyer/get_creative.py b/samples/adexchangebuyer/get_creative.py
new file mode 100644
index 0000000..e2b2da9
--- /dev/null
+++ b/samples/adexchangebuyer/get_creative.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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 illustrates how to retrieve the information of a creative.
+
+Tags: creatives.insert
+"""
+
+__author__ = 'david.t@google.com (David Torres)'
+
+import pprint
+import sys
+import gflags
+from oauth2client.client import AccessTokenRefreshError
+import sample_utils
+
+# Declare command-line flags, and set them as required.
+gflags.DEFINE_string('account_id', None,
+                     'The ID of the account that contains the creative',
+                     short_name='a')
+gflags.MarkFlagAsRequired('account_id')
+gflags.DEFINE_string('adgroup_id', None,
+                     'The pretargeting adgroup id to which the creative is '
+                     'associated with',
+                     short_name='g')
+gflags.MarkFlagAsRequired('adgroup_id')
+gflags.DEFINE_string('buyer_creative_id', None,
+                     'A buyer-specific id that identifies this creative',
+                     short_name='c')
+gflags.MarkFlagAsRequired('buyer_creative_id')
+
+
+def main(argv):
+  sample_utils.process_flags(argv)
+  account_id = gflags.FLAGS.account_id
+  adgroup_id = gflags.FLAGS.adgroup_id
+  buyer_creative_id = gflags.FLAGS.buyer_creative_id
+  pretty_printer = pprint.PrettyPrinter()
+
+  # Authenticate and construct service.
+  service = sample_utils.initialize_service()
+
+  try:
+    # Construct the request.
+    request = service.creatives().get(accountId=account_id,
+                                      adgroupId=adgroup_id,
+                                      buyerCreativeId=buyer_creative_id)
+
+    # Execute request and print response.
+    pretty_printer.pprint(request.execute())
+  except AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adexchangebuyer/get_direct_deals.py b/samples/adexchangebuyer/get_direct_deals.py
new file mode 100644
index 0000000..4acd7c6
--- /dev/null
+++ b/samples/adexchangebuyer/get_direct_deals.py
@@ -0,0 +1,51 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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 the active direct deals associated to the logged in user.
+
+Tags: directDeals.list
+"""
+
+__author__ = 'david.t@google.com (David Torres)'
+
+import pprint
+import sys
+from oauth2client.client import AccessTokenRefreshError
+import sample_utils
+
+
+def main(argv):
+  sample_utils.process_flags(argv)
+  pretty_printer = pprint.PrettyPrinter()
+
+  # Authenticate and construct service.
+  service = sample_utils.initialize_service()
+
+  try:
+    # Retrieve direct deals and display them as received if any.
+    result = service.directDeals().list().execute()
+    if 'direct_deals' in result:
+      deals = result['direct_deals']
+      for deal in deals:
+        pretty_printer.pprint(deal)
+    else:
+      print 'No direct deals found'
+  except AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adexchangebuyer/sample_utils.py b/samples/adexchangebuyer/sample_utils.py
new file mode 100644
index 0000000..fd04097
--- /dev/null
+++ b/samples/adexchangebuyer/sample_utils.py
@@ -0,0 +1,111 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""Auxiliary file for Ad Exchange Buyer API code samples.
+
+Handles various tasks to do with logging, authentication and initialization.
+"""
+
+__author__ = 'david.t@google.com (David Torres)'
+
+import logging
+import os
+import sys
+from apiclient.discovery import build
+import gflags
+import httplib2
+from oauth2client.client import flow_from_clientsecrets
+from oauth2client.file import Storage
+from oauth2client.tools import run
+
+
+FLAGS = gflags.FLAGS
+
+# CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this
+# application, including client_id and client_secret, which are found
+# on the API Access tab on the Google APIs
+# Console <http://code.google.com/apis/console>
+CLIENT_SECRETS = 'client_secrets.json'
+
+# Helpful message to display in the browser if the CLIENT_SECRETS file
+# is missing.
+MISSING_CLIENT_SECRETS_MESSAGE = """
+WARNING: Please configure OAuth 2.0
+
+To make this sample run you will need to populate the client_secrets.json file
+found at:
+
+   %s
+
+with information from the APIs Console <https://code.google.com/apis/console>.
+
+""" % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS)
+
+# Set up a Flow object to be used if we need to authenticate.
+FLOW = flow_from_clientsecrets(
+    CLIENT_SECRETS,
+    scope='https://www.googleapis.com/auth/adexchange.buyer',
+    message=MISSING_CLIENT_SECRETS_MESSAGE
+    )
+
+# The gflags module makes defining command-line options easy for applications.
+# Run this program with the '--help' argument to see all the flags that it
+# understands.
+gflags.DEFINE_enum('logging_level', 'ERROR',
+                   ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
+                   'Set the level of logging detail.')
+
+
+def process_flags(argv):
+  """Uses the command-line flags to set the logging level."""
+
+  # Let the gflags module process the command-line arguments.
+  try:
+    argv = FLAGS(argv)
+  except gflags.FlagsError, e:
+    print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS)
+    sys.exit(1)
+
+  # Set the logging according to the command-line flag.
+  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
+
+
+def initialize_service():
+  """Initializes and returns an instance of the Ad Exchange Buyer service.
+
+  Authorizes the user for use of the service and returns it backs.
+
+  Returns:
+      The authorized and initialized service.
+  """
+
+  # Create an httplib2.Http object to handle our HTTP requests.
+  http = httplib2.Http()
+
+  # Prepare credentials, and authorize HTTP object with them.
+  # If the credentials don't exist or are invalid run through the native client
+  # flow. The Storage object will ensure that if successful the good
+  # credentials will get written back to a file.
+  storage = Storage('adexchangebuyer.dat')
+  credentials = storage.get()
+  if credentials is None or credentials.invalid:
+    credentials = run(FLOW, storage)
+  http = credentials.authorize(http)
+
+  # Construct a service object via the discovery service.
+  service = build('adexchangebuyer', 'v1', http=http)
+  return service
+ 
diff --git a/samples/adexchangebuyer/submit_creative.py b/samples/adexchangebuyer/submit_creative.py
new file mode 100644
index 0000000..1052eae
--- /dev/null
+++ b/samples/adexchangebuyer/submit_creative.py
@@ -0,0 +1,78 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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 illustrates how to submit a new creative for its verification.
+
+Tags: creatives.insert
+"""
+
+__author__ = 'david.t@google.com (David Torres)'
+
+import pprint
+import sys
+import gflags
+from oauth2client.client import AccessTokenRefreshError
+import sample_utils
+
+# Declare command-line flags, and set them as required.
+gflags.DEFINE_string('account_id', None,
+                     'The ID of the account to which submit the creative',
+                     short_name='a')
+gflags.MarkFlagAsRequired('account_id')
+gflags.DEFINE_string('adgroup_id', None,
+                     'The pretargeting adgroup id that this creative will be '
+                     'associated with',
+                     short_name='g')
+gflags.MarkFlagAsRequired('adgroup_id')
+gflags.DEFINE_string('buyer_creative_id', None,
+                     'A buyer-specific id identifying the creative in this ad',
+                     short_name='c')
+gflags.MarkFlagAsRequired('buyer_creative_id')
+
+
+def main(argv):
+  sample_utils.process_flags(argv)
+  account_id = gflags.FLAGS.account_id
+  adgroup_id = gflags.FLAGS.adgroup_id
+  buyer_creative_id = gflags.FLAGS.buyer_creative_id
+  pretty_printer = pprint.PrettyPrinter()
+
+  # Authenticate and construct service.
+  service = sample_utils.initialize_service()
+
+  try:
+    # Create a new creative to submit.
+    creative_body = {
+        'accountId': account_id,
+        'adgroupId': adgroup_id,
+        'buyerCreativeId': buyer_creative_id,
+        'HTMLSnippet': ('<html><body><a href="http://www.google.com">'
+                        'Hi there!</a></body></html>'),
+        'clickThroughUrl': ['http://www.google.com'],
+        'width': 300,
+        'height': 250,
+        'advertiserName': 'google'
+        }
+    creative = service.creatives().insert(body=creative_body).execute()
+    # Print the response. If the creative has been already reviewed, its status
+    # and categories will be included in the response.
+    pretty_printer.pprint(creative)
+  except AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adexchangebuyer/update_account.py b/samples/adexchangebuyer/update_account.py
new file mode 100644
index 0000000..eaf17a9
--- /dev/null
+++ b/samples/adexchangebuyer/update_account.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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 illustrates how to do a sparse update of the account attributes.
+
+Tags: accounts.patch
+"""
+
+__author__ = 'david.t@google.com (David Torres)'
+
+import pprint
+import sys
+import gflags
+from oauth2client.client import AccessTokenRefreshError
+import sample_utils
+
+# Declare command-line flags, and set them as required.
+gflags.DEFINE_string('account_id', None,
+                     'The ID of the account to which submit the creative',
+                     short_name='a')
+gflags.MarkFlagAsRequired('account_id')
+gflags.DEFINE_string('cookie_matching_url', None,
+                     'New cookie matching URL to set for the account ',
+                     short_name='u')
+gflags.MarkFlagAsRequired('cookie_matching_url')
+
+
+def main(argv):
+  sample_utils.process_flags(argv)
+  account_id = gflags.FLAGS.account_id
+  cookie_matching_url = gflags.FLAGS.cookie_matching_url
+  pretty_printer = pprint.PrettyPrinter()
+
+  # Authenticate and construct service.
+  service = sample_utils.initialize_service()
+
+  try:
+    # Account information to be updated.
+    account_body = {
+        'accountId': account_id,
+        'cookieMatchingUrl': cookie_matching_url
+        }
+    account = service.accounts().patch(id=account_id,
+                                       body=account_body).execute()
+    pretty_printer.pprint(account)
+  except AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
