diff --git a/samples/adexchangebuyer/README b/samples/adexchangebuyer/README
deleted file mode 100644
index 87ad8c4..0000000
--- a/samples/adexchangebuyer/README
+++ /dev/null
@@ -1,4 +0,0 @@
-Samples for working with the Ad Exchange Buyer API.
-
-api: adexchangebuyer
-keywords: cmdline
diff --git a/samples/adexchangebuyer/client_secrets.json b/samples/adexchangebuyer/client_secrets.json
deleted file mode 100644
index 323ffd0..0000000
--- a/samples/adexchangebuyer/client_secrets.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "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
deleted file mode 100644
index 4be7d26..0000000
--- a/samples/adexchangebuyer/get_all_accounts.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/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 googleapiclient import sample_tools
-from oauth2client import client
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'adexchangebuyer', 'v1.3', __doc__, __file__,
-      scope='https://www.googleapis.com/auth/adexchange.buyer')
-
-  try:
-    # Retrieve account list and display data as received
-    result = service.accounts().list().execute()
-    pprint.pprint(result)
-  except client.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
deleted file mode 100644
index 9af1a48..0000000
--- a/samples/adexchangebuyer/get_creative.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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)',
-              'jdilallo@google.com (Joseph DiLallo)')
-
-import argparse
-import pprint
-import sys
-
-from googleapiclient import sample_tools
-from oauth2client import client
-
-# Declare command-line flags.
-argparser = argparse.ArgumentParser(add_help=False)
-argparser.add_argument('account_id', type=int,
-                     help='The ID of the account that contains the creative')
-argparser.add_argument('buyer_creative_id',
-                     help='A buyer-specific id that identifies this creative')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'adexchangebuyer', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/adexchange.buyer')
-
-  account_id = flags.account_id
-  buyer_creative_id = flags.buyer_creative_id
-
-  try:
-    # Construct the request.
-    request = service.creatives().get(accountId=account_id,
-                                      buyerCreativeId=buyer_creative_id)
-
-    # Execute request and print response.
-    pprint.pprint(request.execute())
-  except client.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
deleted file mode 100644
index a824ed6..0000000
--- a/samples/adexchangebuyer/get_direct_deals.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/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 googleapiclient import sample_tools
-from oauth2client import client
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'adexchangebuyer', 'v1.3', __doc__, __file__,
-      scope='https://www.googleapis.com/auth/adexchange.buyer')
-
-  try:
-    # Retrieve direct deals and display them as received if any.
-    result = service.directDeals().list().execute()
-    if 'directDeals' in result:
-      deals = result['directDeals']
-      for deal in deals:
-        pprint.pprint(deal)
-    else:
-      print 'No direct deals found'
-  except client.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/submit_creative.py b/samples/adexchangebuyer/submit_creative.py
deleted file mode 100644
index 25531aa..0000000
--- a/samples/adexchangebuyer/submit_creative.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/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)',
-              'jdilallo@google.com (Joseph DiLallo)')
-
-import argparse
-import pprint
-import sys
-
-from googleapiclient import sample_tools
-from oauth2client import client
-
-# Declare command-line flags.
-argparser = argparse.ArgumentParser(add_help=False)
-argparser.add_argument('account_id', type=int,
-                     help='The ID of the account to which submit the creative')
-argparser.add_argument('buyer_creative_id',
-                     help='A buyer-specific id identifying the creative in'
-                       'this ad')
-argparser.add_argument('agency_id', type=int,
-                     help='The ID of the agency who created this ad')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'adexchangebuyer', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/adexchange.buyer')
-
-  account_id = flags.account_id
-  agency_id = flags.agency_id
-  buyer_creative_id = flags.buyer_creative_id
-  try:
-    # Create a new creative to submit.
-    creative_body = {
-        'accountId': account_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'
-        }
-    if agency_id:
-      creative_body['agencyId'] = agency_id
-    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.
-    pprint.pprint(creative)
-  except client.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
deleted file mode 100644
index f4ea331..0000000
--- a/samples/adexchangebuyer/update_account.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/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 argparse
-import pprint
-import sys
-
-from googleapiclient import sample_tools
-from oauth2client import client
-
-# Declare command-line flags.
-argparser = argparse.ArgumentParser(add_help=False)
-argparser.add_argument('account_id', type=int,
-                     help='The ID of the account to which submit the creative')
-argparser.add_argument('cookie_matching_url',
-                     help='New cookie matching URL to set for the account ')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'adexchangebuyer', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/adexchange.buyer')
-
-  account_id = flags.account_id
-  cookie_matching_url = flags.cookie_matching_url
-
-  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()
-    pprint.pprint(account)
-  except client.AccessTokenRefreshError:
-    print ('The credentials have been revoked or expired, please re-run the '
-           'application to re-authorize')
-
-if __name__ == '__main__':
-  main(sys.argv)
