diff --git a/samples/dfareporting/README b/samples/dfareporting/README
deleted file mode 100644
index ca8f9e9..0000000
--- a/samples/dfareporting/README
+++ /dev/null
@@ -1,5 +0,0 @@
-A collection of command-line samples for the DFA Reporting REST API.
-
-api: dfareporting
-keywords: cmdline
-author: Jonathon Imperiosi (jimper@google.com)
\ No newline at end of file
diff --git a/samples/dfareporting/README.md b/samples/dfareporting/README.md
new file mode 100644
index 0000000..5e21e25
--- /dev/null
+++ b/samples/dfareporting/README.md
@@ -0,0 +1,5 @@
+Where are the samples?
+=======================================================
+The DoubleClick for Advertisers Reporting API samples are now hosted separately
+from the client library project. You can find them
+[here.](https://github.com/googleads/googleads-dfa-reporting-samples)
diff --git a/samples/dfareporting/client_secrets.json b/samples/dfareporting/client_secrets.json
deleted file mode 100644
index f9cf7ff..0000000
--- a/samples/dfareporting/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"
-  }
-}
\ No newline at end of file
diff --git a/samples/dfareporting/create_report.py b/samples/dfareporting/create_report.py
deleted file mode 100644
index 94efe56..0000000
--- a/samples/dfareporting/create_report.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 create a report.
-
-Tags: reports.insert
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to create a report for')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-
-  try:
-    # Create a new report resource to insert
-    report = {
-        'name': 'Example Standard Report',
-        'type': 'STANDARD',
-        'criteria': {
-            'dateRange': {'relativeDateRange': 'YESTERDAY'},
-            'dimensions': [{'name': 'dfa:campaign'}],
-            'metricNames': ['dfa:clicks']
-        }
-    }
-    
-    # Construct the request.
-    request = service.reports().insert(profileId=profile_id, body=report)
-
-    # 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)
\ No newline at end of file
diff --git a/samples/dfareporting/delete_report.py b/samples/dfareporting/delete_report.py
deleted file mode 100644
index ac60cd0..0000000
--- a/samples/dfareporting/delete_report.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 delete a report.
-
-Tags: reports.delete
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to delete a report for')
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the report to delete')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-  report_id = flags.report_id
-
-  try: 
-    # Construct the request.
-    request = service.reports().delete(profileId=profile_id, reportId=report_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)
\ No newline at end of file
diff --git a/samples/dfareporting/download_file.py b/samples/dfareporting/download_file.py
deleted file mode 100644
index b03f547..0000000
--- a/samples/dfareporting/download_file.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 download a file.
-
-Tags: files.get
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-import argparse
-import sys
-
-from googleapiclient import sample_tools
-from oauth2client import client
-
-# Declare command-line flags.
-argparser = argparse.ArgumentParser(add_help=False)
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the report to get a file for')
-argparser.add_argument('file_id', type=int,
-                     help='The ID of the file to get')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  report_id = flags.report_id
-  file_id = flags.file_id
-
-  try: 
-    # Construct the request.
-    request = service.files().get_media(reportId=report_id, fileId=file_id)
-
-    # Execute request and print the file contents
-    print 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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_all_dimension_values.py b/samples/dfareporting/get_all_dimension_values.py
deleted file mode 100644
index fe6983d..0000000
--- a/samples/dfareporting/get_all_dimension_values.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get all dimension values for a dimension.
-
-Tags: dimensionValues.query
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to get a report for')
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-
-  try: 
-    # Create the dimension to query
-    dimension = {
-      'dimensionName': 'dfa:advertiser',
-      'startDate': '2013-01-01',
-      'endDate': '2013-12-31'
-    }
-    
-    # Construct the request.
-    request = service.dimensionValues().query(profileId=profile_id,
-                                              body=dimension)
-
-    while request is not None:
-      # Execute request and print response.
-      response = request.execute()
-      pprint.pprint(response)
-      
-      nextPageToken = response.get('nextPageToken')
-      
-      if nextPageToken and nextPageToken != '0':
-        request = service.dimensionValues().query_next(request, response)
-      else:
-        request = None
-  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/dfareporting/get_all_files.py b/samples/dfareporting/get_all_files.py
deleted file mode 100644
index 3785cfc..0000000
--- a/samples/dfareporting/get_all_files.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get a list of all the files for a profile.
-
-Tags: files.list
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to use')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-
-  try: 
-    # Construct a get request for the specified profile.    
-    request = service.files().list(profileId=profile_id, maxResults=10)
-    
-    while request is not None:
-      # Execute request and print response.
-      response = request.execute()
-      pprint.pprint(response)
-
-      nextPageToken = response.get('nextPageToken')
-
-      if nextPageToken:
-        request = service.files().list_next(request, response)
-      else:
-        request = None
-  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/dfareporting/get_all_report_files.py b/samples/dfareporting/get_all_report_files.py
deleted file mode 100644
index 9b6af0d..0000000
--- a/samples/dfareporting/get_all_report_files.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get a list of all the files for a report.
-
-Tags: reports.files.list
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to use')
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the report to list files for')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-  report_id = flags.report_id
-
-  try: 
-    # Construct a get request for the specified report.    
-    request = service.reports().files().list(profileId=profile_id, 
-                                             reportId=report_id)
-    
-    while request is not None:
-      # Execute request and print response.
-      response = request.execute()
-      pprint.pprint(response)
-    
-      nextPageToken = response.get('nextPageToken')
-    
-      if nextPageToken:
-        request = service.reports().files().list_next(request, response)
-      else:
-        request = None
-  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_all_reports.py b/samples/dfareporting/get_all_reports.py
deleted file mode 100644
index d36fc19..0000000
--- a/samples/dfareporting/get_all_reports.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get a list of all reports.
-
-Tags: reports.list
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to list reports for')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-
-  try:
-    # Construct the request.
-    request = service.reports().list(profileId=profile_id)
-    
-    while request is not None:
-      # Execute request and print response.
-      response = request.execute()
-      pprint.pprint(response)
-      
-      nextPageToken = response.get('nextPageToken')
-      
-      if nextPageToken:
-        request = service.reports().list_next(request, response)
-      else:
-        request = None
-  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_all_userprofiles.py b/samples/dfareporting/get_all_userprofiles.py
deleted file mode 100644
index ea1e57c..0000000
--- a/samples/dfareporting/get_all_userprofiles.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get a list of all user profiles.
-
-Tags: userProfiles.list
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-import argparse
-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, 'dfareporting', 'v1.3', __doc__, __file__,
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  try: 
-    # Construct the request.
-    request = service.userProfiles().list()
-
-    # 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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_compatible_fields.py b/samples/dfareporting/get_compatible_fields.py
deleted file mode 100644
index d28f40a..0000000
--- a/samples/dfareporting/get_compatible_fields.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get the compatible fields for a report.
-
-Tags: reports.compatibleFields.query
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to use')
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the report to get compatible fields for')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-  report_id = flags.report_id
-
-  try: 
-    # Retrieve the specified report resource
-    report = service.reports().get(profileId=profile_id,
-                                   reportId=report_id).execute()
-    
-    # Execute request and print response.
-    request = service.reports().compatibleFields().query(profileId=profile_id, 
-                                                         body=report)
-    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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_report.py b/samples/dfareporting/get_report.py
deleted file mode 100644
index 8fbc298..0000000
--- a/samples/dfareporting/get_report.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get a report.
-
-Tags: reports.delete
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to get a report for')
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the report to get')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-  report_id = flags.report_id
-
-  try: 
-    # Construct the request.
-    request = service.reports().get(profileId=profile_id, reportId=report_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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_report_file.py b/samples/dfareporting/get_report_file.py
deleted file mode 100644
index 37b1fdb..0000000
--- a/samples/dfareporting/get_report_file.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get a file for a report.
-
-Tags: reports.files.get
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to use')
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the report to get a file for')
-argparser.add_argument('file_id', type=int,
-                     help='The ID of the file to get')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-  report_id = flags.report_id
-  file_id = flags.file_id
-
-  try: 
-    # Construct a get request for the specified report.    
-    request = service.reports().files().get(fileId=file_id,
-                                            profileId=profile_id, 
-                                            reportId=report_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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_userprofile.py b/samples/dfareporting/get_userprofile.py
deleted file mode 100644
index 0d30f2a..0000000
--- a/samples/dfareporting/get_userprofile.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 get a user profile.
-
-Tags: userProfiles.get
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to get a report for')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-
-  try: 
-    # Construct the request.
-    request = service.userProfiles().get(profileId=profile_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)
\ No newline at end of file
diff --git a/samples/dfareporting/patch_report.py b/samples/dfareporting/patch_report.py
deleted file mode 100644
index fa7fbff..0000000
--- a/samples/dfareporting/patch_report.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 patch a standard report.
-
-Tags: reports.patch
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to patch a report for')
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the standard report to patch')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-  report_id = flags.report_id
-
-  try: 
-    # Create a report resource with the fields to patch
-    report = {
-      'criteria': {
-        'dateRange': {'relativeDateRange': 'YESTERDAY'}
-      }
-    }
-    
-    # Construct the request.
-    request = service.reports().patch(profileId=profile_id, reportId=report_id,
-                                      body=report)
-
-    # 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)
\ No newline at end of file
diff --git a/samples/dfareporting/run_report.py b/samples/dfareporting/run_report.py
deleted file mode 100644
index f19d0af..0000000
--- a/samples/dfareporting/run_report.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 run a report.
-
-Tags: reports.run
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to use')
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the report to run')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-  report_id = flags.report_id
-
-  try: 
-    # Construct a get request for the specified report.    
-    request = service.reports().run(profileId=profile_id, reportId=report_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)
\ No newline at end of file
diff --git a/samples/dfareporting/update_report.py b/samples/dfareporting/update_report.py
deleted file mode 100644
index 8dbfede..0000000
--- a/samples/dfareporting/update_report.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2013 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 update a report.
-
-Tags: reports.update
-"""
-
-__author__ = ('jimper@google.com (Jonathon Imperiosi)')
-
-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('profile_id', type=int,
-                     help='The ID of the profile to update a report for')
-argparser.add_argument('report_id', type=int,
-                     help='The ID of the report to update')
-
-
-def main(argv):
-  # Authenticate and construct service.
-  service, flags = sample_tools.init(
-      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
-      scope='https://www.googleapis.com/auth/dfareporting')
-
-  profile_id = flags.profile_id
-  report_id = flags.report_id
-
-  try: 
-    # Construct a get request for the specified report.
-    request = service.reports().get(profileId=profile_id, reportId=report_id)
-
-    # Execute request
-    response = request.execute()
-    
-    # Create a report resource with the fields to update
-    report = {
-      'accountId': response['accountId'],
-      'id': response['id'],
-      'lastModifiedTime': response['lastModifiedTime'],
-      'name': 'Example Standard Report (Updated)',
-      'ownerProfileId': response['ownerProfileId'],
-      'type': response['type']
-    }
-    
-    # Create the update request
-    request = service.reports().update(profileId=profile_id,
-                                       reportId=report_id, body=report)
-    
-    # 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)
\ No newline at end of file
