title: How to export Google Ads reports to csv in Python? (getting AuthenticationError and HTTP Error 400)
body: <p>Connecting to ads api, configured yaml with credentials and testing out google's python example code but receiving above errors. How do I export simple keywords performance reports for all time to a csv?</p>
  
  <p>Using Jupyter to test and run code on Python 3.6. I've used code from here: <a href="https://github.com/googleads/googleads-python-lib/tree/master/examples/adwords/v201809/reporting" rel="nofollow noreferrer">https://github.com/googleads/googleads-python-lib/tree/master/examples/adwords/v201809/reporting</a></p>
  
  <pre><code>#!/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 downloads a criteria performance report with AWQL.
  
  To get report fields, run get_report_fields.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.
  
  """
  
  import sys
  from googleads import adwords
  
  
  def main(client):
    # Initialize appropriate service.
    report_downloader = client.GetReportDownloader(version='v201809')
  
    # Create report query.
    report_query = (adwords.ReportQueryBuilder()
                    .Select('CampaignId', 'AdGroupId', 'Id', 'Criteria',
                            'CriteriaType', 'FinalUrls', 'Impressions', 'Clicks',
                            'Cost')
                    .From('CRITERIA_PERFORMANCE_REPORT')
                    .Where('Status').In('ENABLED', 'PAUSED')
                    .During('LAST_7_DAYS')
                    .Build())
  
    # You can provide a file object to write the output to. For this
    # demonstration we use sys.stdout to write the report to the screen.
    report_downloader.DownloadReportWithAwql(
        report_query, 'CSV', sys.stdout, skip_report_header=False,
        skip_column_header=False, skip_report_summary=False,
        include_zero_impressions=True)
  
  
  if __name__ == '__main__':
    # Initialize client object.
    adwords_client = adwords.AdWordsClient.LoadFromStorage()
  
    main(adwords_client)
  </code></pre>
  
  <p>alternatively used the following but getting the same errors:</p>
  
  <pre><code># Using Pandas
  
  from googleads import adwords
  import pandas as pd
  import numpy as np
  import io
  
  # Define output as a string
  output = io.StringIO()
  
  # Initialize appropriate service.
  adwords_client = adwords.AdWordsClient.LoadFromStorage()
  
  report_downloader = adwords_client.GetReportDownloader(version='v201809')
  
  # Create report query.
  report_query = ('''
  select Date, HourOfDay, Clicks
  from ACCOUNT_PERFORMANCE_REPORT
  during LAST_7_DAYS''')
  
  # Write query result to output file
  report_downloader.DownloadReportWithAwql(
      report_query, 
      'CSV',
      output,
      client_customer_id='xxx-xxx-xxxx', # denotes which adw account to pull from
      skip_report_header=True, 
      skip_column_header=False,
      skip_report_summary=True, 
      include_zero_impressions=False)
  
  
  output.seek(0)
  
  df = pd.read_csv(output)
  
  df.head()
  </code></pre>
  
  <p>Expecting some sort of output with the google ads report specified.</p>