My favorites | English | Sign in

v2009 Docs | v13 Docs

Documentation for the requested version is not available.Documentation for the requested diff is not available.

ReportService

Link to this version

Use ReportService to schedule and retrieve reports about your AdWords account. Generated reports are in XML format.

To generate and download a report:

  1. Create a DefinedReportJob object that specifies the type of report you want.
  2. Validate your report job using validateReportJob before scheduling the report. Validating a report job costs only 1 API unit, whereas a failed call to scheduleReportJob will cost 500 API units.
  3. Schedule your report job using scheduleReportJob. This request returns an ID for the scheduled report job.
  4. Get the status of your report job using getReportJobStatus.
  5. When your report job is complete, use getReportDownloadUrl to retrieve the URL where your report is stored. The returned URL is valid for five minutes. If the URL expires, just call getReportDownloadUrl again. Keep this URL private, since anyone can use it to access your report.
  6. Download your report by sending an HTTP GET requests to the report's URL.

The Report Center stores up to 15 generated reports per account. When the sixteenth report is generated, the Report Center deletes the oldest stored report.

For more information about reports and report types, see the Report Center section of the AdWords Help Center.

More Information

Requests

deleteReport

Deletes a report job along with the report it produced, if any. You can delete a pending report job, but not a job in progress.

Parameters

reportJobId long
ID of the report job.

Response

(none)

getAllJobs

Returns an array consisting of all jobs the user has scheduled.

Response

ReportJob[] an array of report jobs.

ReportJob is one of:

getGzipReportDownloadUrl

Returns a URL from which a compressed report with the given job ID can be downloaded (in Gzip format). After invoking this method, the caller can do a regular HTTP GET on the returned URL to retrieve the report.

Warning: Served XML reports are truncated to 263064146 bytes (about 250MB). Be careful not to create a report that includes lots of data.

Parameters

reportJobId long
The ID of the report job.

Response

string A URL from which the compressed report can be downloaded.

Samples

Code sample not available.
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
      // Create report job structure.
      DefinedReportJob job = new DefinedReportJob();
      job.setSelectedReportType("Keyword");
      job.setName("Sample Keyword Report");
      job.setAggregationTypes(new String[] {"Summary"});
      job.setAdWordsType(AdWordsType.SearchOnly);
      job.setKeywordType(KeywordType.Broad);
      job.setStartDay(new java.util.GregorianCalendar(2009, 0, 1).getTime());
      job.setEndDay(new java.util.GregorianCalendar(2009, 0, 31).getTime());
      job.setSelectedColumns(new String[] {
          "Campaign", "AdGroup", "Keyword", "KeywordStatus", "KeywordMinCPC",
          "KeywordDestUrlDisplay", "Impressions", "Clicks", "CTR",
          "AveragePosition"});

      // Validate report.
      try {
        service.validateReportJob(job);

        // Schedule report.
        long jobId = service.scheduleReportJob(job);

        // Wait for report to finish.
        ReportJobStatus status = service.getReportJobStatus(jobId);
        while(status != ReportJobStatus.Completed &&
            status != ReportJobStatus.Failed) {
          System.out.println(
              "Report job status is \"" + status.getValue() + "\".");
          try {
            Thread.sleep(30000);
          } catch(InterruptedException e) {}
          status = service.getReportJobStatus(jobId);
        }

        if(status == ReportJobStatus.Failed) {
          System.out.println("Report job generation failed.");
          System.exit(0);
        }

        // Download report.
        String url = service.getGzipReportDownloadUrl(jobId);

Code sample not available.
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
        // Create report job structure.
        DefinedReportJob job = new DefinedReportJob();
        job.selectedReportType = "Keyword";
        job.name = "Sample Keyword Report";
        job.aggregationTypes = new String[] { "Summary" };
        job.adWordsType = AdWordsType.SearchOnly;
        job.keywordType = KeywordType.Broad;
        job.startDay = new DateTime(2009, 1, 1);
        job.endDay = new DateTime(2009, 1, 31);
        job.selectedColumns = new String[] { "Campaign", "AdGroup", "Keyword",
            "KeywordStatus", "KeywordMinCPC",
            "KeywordDestUrlDisplay", "Impressions", "Clicks", "CTR",
            "AveragePosition" };

        // Validate report.
        try {
          service.validateReportJob(job);

          // Schedule report.
          long jobId = service.scheduleReportJob(job);

          // Wait for report to finish.
          ReportJobStatus status = service.getReportJobStatus(jobId);
          while (status != ReportJobStatus.Completed &&
              status != ReportJobStatus.Failed) {
            Console.WriteLine(
                "Report job status is \"" + status + "\".");
            Thread.Sleep(30000);
            status = service.getReportJobStatus(jobId);
          }

          if (status == ReportJobStatus.Failed) {
            Console.WriteLine("Report job generation failed.");
            System.Environment.Exit(0);
          }

          // Download report.
          String url = service.getGzipReportDownloadUrl(jobId);

Code sample not available.
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
my $report_job = SOAP::Data->name('job' =>
  {'selectedReportType' => 'Keyword',
   'name' => 'Sample Keyword Report',
   'aggregationTypes' => ['Summary'],
   'adWordsType' => 'SearchOnly',
   'keywordType' => 'Broad',
   'startDay' => '2009-01-01',
   'endDay' => '2009-01-31',
   'selectedColumns' => [qw(Campaign AdGroup Keyword KeywordStatus KeywordMinCPC
                            KeywordDestUrlDisplay Impressions Clicks CTR
                            AveragePosition)]
  });
$report_job->attr({'xsi:type' => 'DefinedReportJob',
                   'xmlns' => 'https://adwords.google.com/api/adwords/v13'});
eval {
  # Validate report.
  $service->call('validateReportJob' => $report_job, @headers);

  # Schedule report.
  my $job_id = $service->call('scheduleReportJob' => $report_job, @headers)
    ->result();
  $job_id = SOAP::Data->name('reportJobId' => $job_id);

  # Wait for report to finish.
  my $status = $service->call('getReportJobStatus' => $job_id, @headers)
    ->result();
  while ($status ne 'Completed' and $status ne 'Failed') {
    printf("Report job status is '%s'.\n", $status);
    sleep(30);
    $status = $service->call('getReportJobStatus' => $job_id, @headers)
      ->result();
  }

  if ($status eq 'Failed') {
    die("Report job generation failed.\n");
  }

  # Download report.
  my $report_url = $service->call('getGzipReportDownloadUrl' => $job_id,
    @headers)->result();

Code sample not available.
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Create report job structure.
report_job = """
  <selectedReportType>%s</selectedReportType>
  <name>%s</name>
  <aggregationTypes>%s</aggregationTypes>
  <adWordsType>%s</adWordsType>
  <keywordType>%s</keywordType>
  <startDay>%s</startDay>
  <endDay>%s</endDay>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>""" % \
  ('Keyword', 'Sample Keyword Report', 'Summary', 'SearchOnly', 'Broad',
   '2009-01-01', '2009-01-31', 'Campaign', 'AdGroup', 'Keyword',
   'KeywordStatus', 'KeywordMinCPC', 'KeywordDestUrlDisplay', 'Impressions',
   'Clicks', 'CTR', 'AveragePosition')
report_job = SOAPpy.Types.untypedType(report_job)
report_job._setAttr('xmlns:impl', namespace.replace('sandbox', 'adwords'))
report_job._setAttr('xsi:type', 'impl:DefinedReportJob')

try:
  # Validate report.
  report_service.validateReportJob(report_job)

  # Schedule report.
  job_id = report_service.scheduleReportJob(report_job)
  job_id = SOAPpy.Types.untypedType(job_id)

  # Wait for report to finish.
  status = report_service.getReportJobStatus(job_id)
  while status != 'Completed' and status != 'Failed':
    print 'Report job status is "%s".' % status
    time.sleep(30)
    status = report_service.getReportJobStatus(job_id)

  if(status == 'Failed'):
    print 'Report job generation failed.'
    sys.exit();

  # Download report.
  report_url = report_service.getGzipReportDownloadUrl(job_id)

Code sample not available.
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Create report job structure.
report_job = %{
<job xsi:type='DefinedReportJob'>
  <selectedReportType>Keyword</selectedReportType>
  <name>Sample Keyword Report</name>
  <aggregationTypes>Summary</aggregationTypes>
  <adWordsType>SearchOnly</adWordsType>
  <keywordType>Broad</keywordType>
  <startDay>2009-01-01</startDay>
  <endDay>2009-01-31</endDay>
  <selectedColumns>Campaign</selectedColumns>
  <selectedColumns>AdGroup</selectedColumns>
  <selectedColumns>Keyword</selectedColumns>
  <selectedColumns>KeywordStatus</selectedColumns>
  <selectedColumns>KeywordMinCPC</selectedColumns>
  <selectedColumns>KeywordDestUrlDisplay</selectedColumns>
  <selectedColumns>Impressions</selectedColumns>
  <selectedColumns>Clicks</selectedColumns>
  <selectedColumns>CTR</selectedColumns>
  <selectedColumns>AveragePosition</selectedColumns>
</job>
}

begin
  # Validate report.
  report_service.validateReportJob(REXML::Document.new("<validateReportJob " +
    "xmlns='https://adwords.google.com/api/adwords/v13'>#{report_job}" +
    "</validateReportJob>"))

  # Schedule report.
  job_id = report_service.scheduleReportJob(REXML::Document.new(
    "<scheduleReportJob xmlns='https://adwords.google.com/api/adwords/v13'>" +
    "#{report_job}</scheduleReportJob>")).scheduleReportJobReturn

  # Wait for report to finish.
  status = report_service.getReportJobStatus(:reportJobId => job_id
    ).getReportJobStatusReturn
  while status != 'Completed' and status != 'Failed'
    puts "Report job status is '#{status}'."
    sleep(30)
    status = report_service.getReportJobStatus(:reportJobId => job_id
      ).getReportJobStatusReturn
  end

  if status == 'Failed'
    puts "Report job generation failed."
    exit
  end

  # Download report.
  report_url = report_service.getGzipReportDownloadUrl(
    :reportJobId => job_id).getGzipReportDownloadUrlReturn

Code sample not available.
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Create report job structure.
$report_job =
  '<selectedReportType>Keyword</selectedReportType>' .
  '<name>Sample Keyword Report</name>' .
  '<aggregationTypes>Summary</aggregationTypes>' .
  '<adWordsType>SearchOnly</adWordsType>' .
  '<keywordType>Broad</keywordType>' .
  '<startDay>2008-01-01</startDay>' .
  '<endDay>2008-01-31</endDay>' .
  '<selectedColumns>Campaign</selectedColumns>' .
  '<selectedColumns>AdGroup</selectedColumns>' .
  '<selectedColumns>Keyword</selectedColumns>' .
  '<selectedColumns>KeywordStatus</selectedColumns>' .
  '<selectedColumns>KeywordMinCPC</selectedColumns>' .
  '<selectedColumns>KeywordDestUrlDisplay</selectedColumns>' .
  '<selectedColumns>Impressions</selectedColumns>' .
  '<selectedColumns>Clicks</selectedColumns>' .
  '<selectedColumns>CTR</selectedColumns>' .
  '<selectedColumns>AveragePosition</selectedColumns>';
$request_xml =
  '<validateReportJob>' .
  '<job xmlns:impl="https://adwords.google.com/api/adwords/v13" ' .
  'xsi:type="impl:DefinedReportJob">' .
  $report_job .
  '</job>' .
  '</validateReportJob>';

# Validate report.
$report_service->call('validateReportJob', $request_xml);
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($report_service);

# Schedule report.
$request_xml =
  '<scheduleReportJob>' .
  '<job xmlns:impl="https://adwords.google.com/api/adwords/v13" ' .
  'xsi:type="impl:DefinedReportJob">' .
  $report_job .
  '</job>' .
  '</scheduleReportJob>';
$job_id = $report_service->call('scheduleReportJob', $request_xml);
$job_id = $job_id['scheduleReportJobReturn'];
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($service);

# Wait for report to finish.
$request_xml =
  '<getReportJobStatus>' .
  '<reportJobId>' .
  $job_id .
  '</reportJobId>' .
  '</getReportJobStatus>';
$status = $report_service->call('getReportJobStatus', $request_xml);
$status = $status['getReportJobStatusReturn'];
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($service);
while ($status != 'Completed' and $status != 'Failed') {
  echo 'Report job status is "' . $status . '".' . "\n";
  sleep(30);
  $status = $report_service->call('getReportJobStatus', $request_xml);
  $status = $status['getReportJobStatusReturn'];
  if ($debug) show_xml($report_service);
  if ($report_service->fault) show_fault($service);
}

if ($status == 'Failed') {
  echo 'Report job generation failed.' . "\n";
  return;
}

# Download report.
$request_xml =
  '<getGzipReportDownloadUrl>' .
  '<reportJobId>' .
  $job_id .
  '</reportJobId>' .
  '</getGzipReportDownloadUrl>';
$report_url = $report_service->call('getGzipReportDownloadUrl', $request_xml);
$report_url = $report_url['getGzipReportDownloadUrlReturn'];

Code sample not available.
12
13
14
15
    <!-- Retrieves the download URL for a report given the job id. -->
    <getGzipReportDownloadUrl>
      <reportJobId>INSERT_REPORT_JOB_ID_HERE</reportJobId>
    </getGzipReportDownloadUrl>

Select a programming language to view its sample

getReportDownloadUrl

Returns a URL from which the report with the given job ID can be downloaded. After invoking this method, the caller can do a regular HTTP GET on the returned URL to retrieve the report. The reports are in XML format.

Warning: Served XML reports are truncated to 263064146 bytes (about 250MB). Be careful not to create a report that includes lots of data.

Parameters

reportJobId long
The ID of the report job.

Response

string A URL from which the report can be downloaded.

getReportJobStatus

Returns the status of the report job with the given reportJobId.

Parameters

reportJobId long
The ID of the report job.

Response

ReportJobStatus The report job status.

Values are:

  • Pending
  • InProgress
  • Completed
  • Failed

Samples

Code sample not available.
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
      // Create report job structure.
      DefinedReportJob job = new DefinedReportJob();
      job.setSelectedReportType("Keyword");
      job.setName("Sample Keyword Report");
      job.setAggregationTypes(new String[] {"Summary"});
      job.setAdWordsType(AdWordsType.SearchOnly);
      job.setKeywordType(KeywordType.Broad);
      job.setStartDay(new java.util.GregorianCalendar(2009, 0, 1).getTime());
      job.setEndDay(new java.util.GregorianCalendar(2009, 0, 31).getTime());
      job.setSelectedColumns(new String[] {
          "Campaign", "AdGroup", "Keyword", "KeywordStatus", "KeywordMinCPC",
          "KeywordDestUrlDisplay", "Impressions", "Clicks", "CTR",
          "AveragePosition"});

      // Validate report.
      try {
        service.validateReportJob(job);

        // Schedule report.
        long jobId = service.scheduleReportJob(job);

        // Wait for report to finish.
        ReportJobStatus status = service.getReportJobStatus(jobId);
        while(status != ReportJobStatus.Completed &&
            status != ReportJobStatus.Failed) {
          System.out.println(
              "Report job status is \"" + status.getValue() + "\".");
          try {
            Thread.sleep(30000);
          } catch(InterruptedException e) {}
          status = service.getReportJobStatus(jobId);
        }

        if(status == ReportJobStatus.Failed) {
          System.out.println("Report job generation failed.");
          System.exit(0);
        }

        // Download report.
        String url = service.getGzipReportDownloadUrl(jobId);

Code sample not available.
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
        // Create report job structure.
        DefinedReportJob job = new DefinedReportJob();
        job.selectedReportType = "Keyword";
        job.name = "Sample Keyword Report";
        job.aggregationTypes = new String[] { "Summary" };
        job.adWordsType = AdWordsType.SearchOnly;
        job.keywordType = KeywordType.Broad;
        job.startDay = new DateTime(2009, 1, 1);
        job.endDay = new DateTime(2009, 1, 31);
        job.selectedColumns = new String[] { "Campaign", "AdGroup", "Keyword",
            "KeywordStatus", "KeywordMinCPC",
            "KeywordDestUrlDisplay", "Impressions", "Clicks", "CTR",
            "AveragePosition" };

        // Validate report.
        try {
          service.validateReportJob(job);

          // Schedule report.
          long jobId = service.scheduleReportJob(job);

          // Wait for report to finish.
          ReportJobStatus status = service.getReportJobStatus(jobId);
          while (status != ReportJobStatus.Completed &&
              status != ReportJobStatus.Failed) {
            Console.WriteLine(
                "Report job status is \"" + status + "\".");
            Thread.Sleep(30000);
            status = service.getReportJobStatus(jobId);
          }

          if (status == ReportJobStatus.Failed) {
            Console.WriteLine("Report job generation failed.");
            System.Environment.Exit(0);
          }

          // Download report.
          String url = service.getGzipReportDownloadUrl(jobId);

Code sample not available.
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
my $report_job = SOAP::Data->name('job' =>
  {'selectedReportType' => 'Keyword',
   'name' => 'Sample Keyword Report',
   'aggregationTypes' => ['Summary'],
   'adWordsType' => 'SearchOnly',
   'keywordType' => 'Broad',
   'startDay' => '2009-01-01',
   'endDay' => '2009-01-31',
   'selectedColumns' => [qw(Campaign AdGroup Keyword KeywordStatus KeywordMinCPC
                            KeywordDestUrlDisplay Impressions Clicks CTR
                            AveragePosition)]
  });
$report_job->attr({'xsi:type' => 'DefinedReportJob',
                   'xmlns' => 'https://adwords.google.com/api/adwords/v13'});
eval {
  # Validate report.
  $service->call('validateReportJob' => $report_job, @headers);

  # Schedule report.
  my $job_id = $service->call('scheduleReportJob' => $report_job, @headers)
    ->result();
  $job_id = SOAP::Data->name('reportJobId' => $job_id);

  # Wait for report to finish.
  my $status = $service->call('getReportJobStatus' => $job_id, @headers)
    ->result();
  while ($status ne 'Completed' and $status ne 'Failed') {
    printf("Report job status is '%s'.\n", $status);
    sleep(30);
    $status = $service->call('getReportJobStatus' => $job_id, @headers)
      ->result();
  }

  if ($status eq 'Failed') {
    die("Report job generation failed.\n");
  }

  # Download report.
  my $report_url = $service->call('getGzipReportDownloadUrl' => $job_id,
    @headers)->result();

Code sample not available.
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Create report job structure.
report_job = """
  <selectedReportType>%s</selectedReportType>
  <name>%s</name>
  <aggregationTypes>%s</aggregationTypes>
  <adWordsType>%s</adWordsType>
  <keywordType>%s</keywordType>
  <startDay>%s</startDay>
  <endDay>%s</endDay>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>""" % \
  ('Keyword', 'Sample Keyword Report', 'Summary', 'SearchOnly', 'Broad',
   '2009-01-01', '2009-01-31', 'Campaign', 'AdGroup', 'Keyword',
   'KeywordStatus', 'KeywordMinCPC', 'KeywordDestUrlDisplay', 'Impressions',
   'Clicks', 'CTR', 'AveragePosition')
report_job = SOAPpy.Types.untypedType(report_job)
report_job._setAttr('xmlns:impl', namespace.replace('sandbox', 'adwords'))
report_job._setAttr('xsi:type', 'impl:DefinedReportJob')

try:
  # Validate report.
  report_service.validateReportJob(report_job)

  # Schedule report.
  job_id = report_service.scheduleReportJob(report_job)
  job_id = SOAPpy.Types.untypedType(job_id)

  # Wait for report to finish.
  status = report_service.getReportJobStatus(job_id)
  while status != 'Completed' and status != 'Failed':
    print 'Report job status is "%s".' % status
    time.sleep(30)
    status = report_service.getReportJobStatus(job_id)

  if(status == 'Failed'):
    print 'Report job generation failed.'
    sys.exit();

  # Download report.
  report_url = report_service.getGzipReportDownloadUrl(job_id)

Code sample not available.
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Create report job structure.
report_job = %{
<job xsi:type='DefinedReportJob'>
  <selectedReportType>Keyword</selectedReportType>
  <name>Sample Keyword Report</name>
  <aggregationTypes>Summary</aggregationTypes>
  <adWordsType>SearchOnly</adWordsType>
  <keywordType>Broad</keywordType>
  <startDay>2009-01-01</startDay>
  <endDay>2009-01-31</endDay>
  <selectedColumns>Campaign</selectedColumns>
  <selectedColumns>AdGroup</selectedColumns>
  <selectedColumns>Keyword</selectedColumns>
  <selectedColumns>KeywordStatus</selectedColumns>
  <selectedColumns>KeywordMinCPC</selectedColumns>
  <selectedColumns>KeywordDestUrlDisplay</selectedColumns>
  <selectedColumns>Impressions</selectedColumns>
  <selectedColumns>Clicks</selectedColumns>
  <selectedColumns>CTR</selectedColumns>
  <selectedColumns>AveragePosition</selectedColumns>
</job>
}

begin
  # Validate report.
  report_service.validateReportJob(REXML::Document.new("<validateReportJob " +
    "xmlns='https://adwords.google.com/api/adwords/v13'>#{report_job}" +
    "</validateReportJob>"))

  # Schedule report.
  job_id = report_service.scheduleReportJob(REXML::Document.new(
    "<scheduleReportJob xmlns='https://adwords.google.com/api/adwords/v13'>" +
    "#{report_job}</scheduleReportJob>")).scheduleReportJobReturn

  # Wait for report to finish.
  status = report_service.getReportJobStatus(:reportJobId => job_id
    ).getReportJobStatusReturn
  while status != 'Completed' and status != 'Failed'
    puts "Report job status is '#{status}'."
    sleep(30)
    status = report_service.getReportJobStatus(:reportJobId => job_id
      ).getReportJobStatusReturn
  end

  if status == 'Failed'
    puts "Report job generation failed."
    exit
  end

  # Download report.
  report_url = report_service.getGzipReportDownloadUrl(
    :reportJobId => job_id).getGzipReportDownloadUrlReturn

Code sample not available.
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Create report job structure.
$report_job =
  '<selectedReportType>Keyword</selectedReportType>' .
  '<name>Sample Keyword Report</name>' .
  '<aggregationTypes>Summary</aggregationTypes>' .
  '<adWordsType>SearchOnly</adWordsType>' .
  '<keywordType>Broad</keywordType>' .
  '<startDay>2008-01-01</startDay>' .
  '<endDay>2008-01-31</endDay>' .
  '<selectedColumns>Campaign</selectedColumns>' .
  '<selectedColumns>AdGroup</selectedColumns>' .
  '<selectedColumns>Keyword</selectedColumns>' .
  '<selectedColumns>KeywordStatus</selectedColumns>' .
  '<selectedColumns>KeywordMinCPC</selectedColumns>' .
  '<selectedColumns>KeywordDestUrlDisplay</selectedColumns>' .
  '<selectedColumns>Impressions</selectedColumns>' .
  '<selectedColumns>Clicks</selectedColumns>' .
  '<selectedColumns>CTR</selectedColumns>' .
  '<selectedColumns>AveragePosition</selectedColumns>';
$request_xml =
  '<validateReportJob>' .
  '<job xmlns:impl="https://adwords.google.com/api/adwords/v13" ' .
  'xsi:type="impl:DefinedReportJob">' .
  $report_job .
  '</job>' .
  '</validateReportJob>';

# Validate report.
$report_service->call('validateReportJob', $request_xml);
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($report_service);

# Schedule report.
$request_xml =
  '<scheduleReportJob>' .
  '<job xmlns:impl="https://adwords.google.com/api/adwords/v13" ' .
  'xsi:type="impl:DefinedReportJob">' .
  $report_job .
  '</job>' .
  '</scheduleReportJob>';
$job_id = $report_service->call('scheduleReportJob', $request_xml);
$job_id = $job_id['scheduleReportJobReturn'];
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($service);

# Wait for report to finish.
$request_xml =
  '<getReportJobStatus>' .
  '<reportJobId>' .
  $job_id .
  '</reportJobId>' .
  '</getReportJobStatus>';
$status = $report_service->call('getReportJobStatus', $request_xml);
$status = $status['getReportJobStatusReturn'];
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($service);
while ($status != 'Completed' and $status != 'Failed') {
  echo 'Report job status is "' . $status . '".' . "\n";
  sleep(30);
  $status = $report_service->call('getReportJobStatus', $request_xml);
  $status = $status['getReportJobStatusReturn'];
  if ($debug) show_xml($report_service);
  if ($report_service->fault) show_fault($service);
}

if ($status == 'Failed') {
  echo 'Report job generation failed.' . "\n";
  return;
}

# Download report.
$request_xml =
  '<getGzipReportDownloadUrl>' .
  '<reportJobId>' .
  $job_id .
  '</reportJobId>' .
  '</getGzipReportDownloadUrl>';
$report_url = $report_service->call('getGzipReportDownloadUrl', $request_xml);
$report_url = $report_url['getGzipReportDownloadUrlReturn'];

Code sample not available.
12
13
14
15
    <!-- Retrieves the status of a report job given the job id. -->
    <getReportJobStatus>
      <reportJobId>INSERT_REPORT_JOB_ID_HERE</reportJobId>
    </getReportJobStatus>

Select a programming language to view its sample

scheduleReportJob

Schedules a report job for execution.

Parameters

job ReportJob
Defines the options (such as date range, aggregations, and columns) for the report.

ReportJob is one of:

Response

long ID of the scheduled report job.

Samples

Code sample not available.
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
      // Create report job structure.
      DefinedReportJob job = new DefinedReportJob();
      job.setSelectedReportType("Keyword");
      job.setName("Sample Keyword Report");
      job.setAggregationTypes(new String[] {"Summary"});
      job.setAdWordsType(AdWordsType.SearchOnly);
      job.setKeywordType(KeywordType.Broad);
      job.setStartDay(new java.util.GregorianCalendar(2009, 0, 1).getTime());
      job.setEndDay(new java.util.GregorianCalendar(2009, 0, 31).getTime());
      job.setSelectedColumns(new String[] {
          "Campaign", "AdGroup", "Keyword", "KeywordStatus", "KeywordMinCPC",
          "KeywordDestUrlDisplay", "Impressions", "Clicks", "CTR",
          "AveragePosition"});

      // Validate report.
      try {
        service.validateReportJob(job);

        // Schedule report.
        long jobId = service.scheduleReportJob(job);

        // Wait for report to finish.
        ReportJobStatus status = service.getReportJobStatus(jobId);
        while(status != ReportJobStatus.Completed &&
            status != ReportJobStatus.Failed) {
          System.out.println(
              "Report job status is \"" + status.getValue() + "\".");
          try {
            Thread.sleep(30000);
          } catch(InterruptedException e) {}
          status = service.getReportJobStatus(jobId);
        }

        if(status == ReportJobStatus.Failed) {
          System.out.println("Report job generation failed.");
          System.exit(0);
        }

        // Download report.
        String url = service.getGzipReportDownloadUrl(jobId);

Code sample not available.
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
        // Create report job structure.
        DefinedReportJob job = new DefinedReportJob();
        job.selectedReportType = "Keyword";
        job.name = "Sample Keyword Report";
        job.aggregationTypes = new String[] { "Summary" };
        job.adWordsType = AdWordsType.SearchOnly;
        job.keywordType = KeywordType.Broad;
        job.startDay = new DateTime(2009, 1, 1);
        job.endDay = new DateTime(2009, 1, 31);
        job.selectedColumns = new String[] { "Campaign", "AdGroup", "Keyword",
            "KeywordStatus", "KeywordMinCPC",
            "KeywordDestUrlDisplay", "Impressions", "Clicks", "CTR",
            "AveragePosition" };

        // Validate report.
        try {
          service.validateReportJob(job);

          // Schedule report.
          long jobId = service.scheduleReportJob(job);

          // Wait for report to finish.
          ReportJobStatus status = service.getReportJobStatus(jobId);
          while (status != ReportJobStatus.Completed &&
              status != ReportJobStatus.Failed) {
            Console.WriteLine(
                "Report job status is \"" + status + "\".");
            Thread.Sleep(30000);
            status = service.getReportJobStatus(jobId);
          }

          if (status == ReportJobStatus.Failed) {
            Console.WriteLine("Report job generation failed.");
            System.Environment.Exit(0);
          }

          // Download report.
          String url = service.getGzipReportDownloadUrl(jobId);

Code sample not available.
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
my $report_job = SOAP::Data->name('job' =>
  {'selectedReportType' => 'Keyword',
   'name' => 'Sample Keyword Report',
   'aggregationTypes' => ['Summary'],
   'adWordsType' => 'SearchOnly',
   'keywordType' => 'Broad',
   'startDay' => '2009-01-01',
   'endDay' => '2009-01-31',
   'selectedColumns' => [qw(Campaign AdGroup Keyword KeywordStatus KeywordMinCPC
                            KeywordDestUrlDisplay Impressions Clicks CTR
                            AveragePosition)]
  });
$report_job->attr({'xsi:type' => 'DefinedReportJob',
                   'xmlns' => 'https://adwords.google.com/api/adwords/v13'});
eval {
  # Validate report.
  $service->call('validateReportJob' => $report_job, @headers);

  # Schedule report.
  my $job_id = $service->call('scheduleReportJob' => $report_job, @headers)
    ->result();
  $job_id = SOAP::Data->name('reportJobId' => $job_id);

  # Wait for report to finish.
  my $status = $service->call('getReportJobStatus' => $job_id, @headers)
    ->result();
  while ($status ne 'Completed' and $status ne 'Failed') {
    printf("Report job status is '%s'.\n", $status);
    sleep(30);
    $status = $service->call('getReportJobStatus' => $job_id, @headers)
      ->result();
  }

  if ($status eq 'Failed') {
    die("Report job generation failed.\n");
  }

  # Download report.
  my $report_url = $service->call('getGzipReportDownloadUrl' => $job_id,
    @headers)->result();

Code sample not available.
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Create report job structure.
report_job = """
  <selectedReportType>%s</selectedReportType>
  <name>%s</name>
  <aggregationTypes>%s</aggregationTypes>
  <adWordsType>%s</adWordsType>
  <keywordType>%s</keywordType>
  <startDay>%s</startDay>
  <endDay>%s</endDay>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>""" % \
  ('Keyword', 'Sample Keyword Report', 'Summary', 'SearchOnly', 'Broad',
   '2009-01-01', '2009-01-31', 'Campaign', 'AdGroup', 'Keyword',
   'KeywordStatus', 'KeywordMinCPC', 'KeywordDestUrlDisplay', 'Impressions',
   'Clicks', 'CTR', 'AveragePosition')
report_job = SOAPpy.Types.untypedType(report_job)
report_job._setAttr('xmlns:impl', namespace.replace('sandbox', 'adwords'))
report_job._setAttr('xsi:type', 'impl:DefinedReportJob')

try:
  # Validate report.
  report_service.validateReportJob(report_job)

  # Schedule report.
  job_id = report_service.scheduleReportJob(report_job)
  job_id = SOAPpy.Types.untypedType(job_id)

  # Wait for report to finish.
  status = report_service.getReportJobStatus(job_id)
  while status != 'Completed' and status != 'Failed':
    print 'Report job status is "%s".' % status
    time.sleep(30)
    status = report_service.getReportJobStatus(job_id)

  if(status == 'Failed'):
    print 'Report job generation failed.'
    sys.exit();

  # Download report.
  report_url = report_service.getGzipReportDownloadUrl(job_id)

Code sample not available.
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Create report job structure.
report_job = %{
<job xsi:type='DefinedReportJob'>
  <selectedReportType>Keyword</selectedReportType>
  <name>Sample Keyword Report</name>
  <aggregationTypes>Summary</aggregationTypes>
  <adWordsType>SearchOnly</adWordsType>
  <keywordType>Broad</keywordType>
  <startDay>2009-01-01</startDay>
  <endDay>2009-01-31</endDay>
  <selectedColumns>Campaign</selectedColumns>
  <selectedColumns>AdGroup</selectedColumns>
  <selectedColumns>Keyword</selectedColumns>
  <selectedColumns>KeywordStatus</selectedColumns>
  <selectedColumns>KeywordMinCPC</selectedColumns>
  <selectedColumns>KeywordDestUrlDisplay</selectedColumns>
  <selectedColumns>Impressions</selectedColumns>
  <selectedColumns>Clicks</selectedColumns>
  <selectedColumns>CTR</selectedColumns>
  <selectedColumns>AveragePosition</selectedColumns>
</job>
}

begin
  # Validate report.
  report_service.validateReportJob(REXML::Document.new("<validateReportJob " +
    "xmlns='https://adwords.google.com/api/adwords/v13'>#{report_job}" +
    "</validateReportJob>"))

  # Schedule report.
  job_id = report_service.scheduleReportJob(REXML::Document.new(
    "<scheduleReportJob xmlns='https://adwords.google.com/api/adwords/v13'>" +
    "#{report_job}</scheduleReportJob>")).scheduleReportJobReturn

  # Wait for report to finish.
  status = report_service.getReportJobStatus(:reportJobId => job_id
    ).getReportJobStatusReturn
  while status != 'Completed' and status != 'Failed'
    puts "Report job status is '#{status}'."
    sleep(30)
    status = report_service.getReportJobStatus(:reportJobId => job_id
      ).getReportJobStatusReturn
  end

  if status == 'Failed'
    puts "Report job generation failed."
    exit
  end

  # Download report.
  report_url = report_service.getGzipReportDownloadUrl(
    :reportJobId => job_id).getGzipReportDownloadUrlReturn

Code sample not available.
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Create report job structure.
$report_job =
  '<selectedReportType>Keyword</selectedReportType>' .
  '<name>Sample Keyword Report</name>' .
  '<aggregationTypes>Summary</aggregationTypes>' .
  '<adWordsType>SearchOnly</adWordsType>' .
  '<keywordType>Broad</keywordType>' .
  '<startDay>2008-01-01</startDay>' .
  '<endDay>2008-01-31</endDay>' .
  '<selectedColumns>Campaign</selectedColumns>' .
  '<selectedColumns>AdGroup</selectedColumns>' .
  '<selectedColumns>Keyword</selectedColumns>' .
  '<selectedColumns>KeywordStatus</selectedColumns>' .
  '<selectedColumns>KeywordMinCPC</selectedColumns>' .
  '<selectedColumns>KeywordDestUrlDisplay</selectedColumns>' .
  '<selectedColumns>Impressions</selectedColumns>' .
  '<selectedColumns>Clicks</selectedColumns>' .
  '<selectedColumns>CTR</selectedColumns>' .
  '<selectedColumns>AveragePosition</selectedColumns>';
$request_xml =
  '<validateReportJob>' .
  '<job xmlns:impl="https://adwords.google.com/api/adwords/v13" ' .
  'xsi:type="impl:DefinedReportJob">' .
  $report_job .
  '</job>' .
  '</validateReportJob>';

# Validate report.
$report_service->call('validateReportJob', $request_xml);
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($report_service);

# Schedule report.
$request_xml =
  '<scheduleReportJob>' .
  '<job xmlns:impl="https://adwords.google.com/api/adwords/v13" ' .
  'xsi:type="impl:DefinedReportJob">' .
  $report_job .
  '</job>' .
  '</scheduleReportJob>';
$job_id = $report_service->call('scheduleReportJob', $request_xml);
$job_id = $job_id['scheduleReportJobReturn'];
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($service);

# Wait for report to finish.
$request_xml =
  '<getReportJobStatus>' .
  '<reportJobId>' .
  $job_id .
  '</reportJobId>' .
  '</getReportJobStatus>';
$status = $report_service->call('getReportJobStatus', $request_xml);
$status = $status['getReportJobStatusReturn'];
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($service);
while ($status != 'Completed' and $status != 'Failed') {
  echo 'Report job status is "' . $status . '".' . "\n";
  sleep(30);
  $status = $report_service->call('getReportJobStatus', $request_xml);
  $status = $status['getReportJobStatusReturn'];
  if ($debug) show_xml($report_service);
  if ($report_service->fault) show_fault($service);
}

if ($status == 'Failed') {
  echo 'Report job generation failed.' . "\n";
  return;
}

# Download report.
$request_xml =
  '<getGzipReportDownloadUrl>' .
  '<reportJobId>' .
  $job_id .
  '</reportJobId>' .
  '</getGzipReportDownloadUrl>';
$report_url = $report_service->call('getGzipReportDownloadUrl', $request_xml);
$report_url = $report_url['getGzipReportDownloadUrlReturn'];

Code sample not available.
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    <!-- Schedules a keyword report with sample columns. -->
    <scheduleReportJob xmlns="https://adwords.google.com/api/adwords/v13">
      <job xsi:type="DefinedReportJob">
        <selectedReportType>Keyword</selectedReportType>
        <name>Sample Keyword Report</name>
        <aggregationTypes>Summary</aggregationTypes>
        <adWordsType>SearchOnly</adWordsType>
        <keywordType>Broad</keywordType>
        <startDay>2008-01-01</startDay>
        <endDay>2008-01-31</endDay>
        <selectedColumns>Campaign</selectedColumns>
        <selectedColumns>AdGroup</selectedColumns>
        <selectedColumns>Keyword</selectedColumns>
        <selectedColumns>KeywordStatus</selectedColumns>
        <selectedColumns>KeywordMinCPC</selectedColumns>
        <selectedColumns>KeywordDestUrlDisplay</selectedColumns>
        <selectedColumns>Impressions</selectedColumns>
        <selectedColumns>Clicks</selectedColumns>
        <selectedColumns>CTR</selectedColumns>
        <selectedColumns>AveragePosition</selectedColumns>
      </job>
    </scheduleReportJob>

Select a programming language to view its sample

validateReportJob

Runs validation against a report job. If there are no problems, the method returns normally, otherwise the appropriate exception is thrown.

Parameters

job ReportJob
Report job to validate

ReportJob is one of:

Response

(none)

Samples

Code sample not available.
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
      // Create report job structure.
      DefinedReportJob job = new DefinedReportJob();
      job.setSelectedReportType("Keyword");
      job.setName("Sample Keyword Report");
      job.setAggregationTypes(new String[] {"Summary"});
      job.setAdWordsType(AdWordsType.SearchOnly);
      job.setKeywordType(KeywordType.Broad);
      job.setStartDay(new java.util.GregorianCalendar(2009, 0, 1).getTime());
      job.setEndDay(new java.util.GregorianCalendar(2009, 0, 31).getTime());
      job.setSelectedColumns(new String[] {
          "Campaign", "AdGroup", "Keyword", "KeywordStatus", "KeywordMinCPC",
          "KeywordDestUrlDisplay", "Impressions", "Clicks", "CTR",
          "AveragePosition"});

      // Validate report.
      try {
        service.validateReportJob(job);

        // Schedule report.
        long jobId = service.scheduleReportJob(job);

        // Wait for report to finish.
        ReportJobStatus status = service.getReportJobStatus(jobId);
        while(status != ReportJobStatus.Completed &&
            status != ReportJobStatus.Failed) {
          System.out.println(
              "Report job status is \"" + status.getValue() + "\".");
          try {
            Thread.sleep(30000);
          } catch(InterruptedException e) {}
          status = service.getReportJobStatus(jobId);
        }

        if(status == ReportJobStatus.Failed) {
          System.out.println("Report job generation failed.");
          System.exit(0);
        }

        // Download report.
        String url = service.getGzipReportDownloadUrl(jobId);

Code sample not available.
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
        // Create report job structure.
        DefinedReportJob job = new DefinedReportJob();
        job.selectedReportType = "Keyword";
        job.name = "Sample Keyword Report";
        job.aggregationTypes = new String[] { "Summary" };
        job.adWordsType = AdWordsType.SearchOnly;
        job.keywordType = KeywordType.Broad;
        job.startDay = new DateTime(2009, 1, 1);
        job.endDay = new DateTime(2009, 1, 31);
        job.selectedColumns = new String[] { "Campaign", "AdGroup", "Keyword",
            "KeywordStatus", "KeywordMinCPC",
            "KeywordDestUrlDisplay", "Impressions", "Clicks", "CTR",
            "AveragePosition" };

        // Validate report.
        try {
          service.validateReportJob(job);

          // Schedule report.
          long jobId = service.scheduleReportJob(job);

          // Wait for report to finish.
          ReportJobStatus status = service.getReportJobStatus(jobId);
          while (status != ReportJobStatus.Completed &&
              status != ReportJobStatus.Failed) {
            Console.WriteLine(
                "Report job status is \"" + status + "\".");
            Thread.Sleep(30000);
            status = service.getReportJobStatus(jobId);
          }

          if (status == ReportJobStatus.Failed) {
            Console.WriteLine("Report job generation failed.");
            System.Environment.Exit(0);
          }

          // Download report.
          String url = service.getGzipReportDownloadUrl(jobId);

Code sample not available.
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
my $report_job = SOAP::Data->name('job' =>
  {'selectedReportType' => 'Keyword',
   'name' => 'Sample Keyword Report',
   'aggregationTypes' => ['Summary'],
   'adWordsType' => 'SearchOnly',
   'keywordType' => 'Broad',
   'startDay' => '2009-01-01',
   'endDay' => '2009-01-31',
   'selectedColumns' => [qw(Campaign AdGroup Keyword KeywordStatus KeywordMinCPC
                            KeywordDestUrlDisplay Impressions Clicks CTR
                            AveragePosition)]
  });
$report_job->attr({'xsi:type' => 'DefinedReportJob',
                   'xmlns' => 'https://adwords.google.com/api/adwords/v13'});
eval {
  # Validate report.
  $service->call('validateReportJob' => $report_job, @headers);

  # Schedule report.
  my $job_id = $service->call('scheduleReportJob' => $report_job, @headers)
    ->result();
  $job_id = SOAP::Data->name('reportJobId' => $job_id);

  # Wait for report to finish.
  my $status = $service->call('getReportJobStatus' => $job_id, @headers)
    ->result();
  while ($status ne 'Completed' and $status ne 'Failed') {
    printf("Report job status is '%s'.\n", $status);
    sleep(30);
    $status = $service->call('getReportJobStatus' => $job_id, @headers)
      ->result();
  }

  if ($status eq 'Failed') {
    die("Report job generation failed.\n");
  }

  # Download report.
  my $report_url = $service->call('getGzipReportDownloadUrl' => $job_id,
    @headers)->result();

Code sample not available.
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Create report job structure.
report_job = """
  <selectedReportType>%s</selectedReportType>
  <name>%s</name>
  <aggregationTypes>%s</aggregationTypes>
  <adWordsType>%s</adWordsType>
  <keywordType>%s</keywordType>
  <startDay>%s</startDay>
  <endDay>%s</endDay>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>
  <selectedColumns>%s</selectedColumns>""" % \
  ('Keyword', 'Sample Keyword Report', 'Summary', 'SearchOnly', 'Broad',
   '2009-01-01', '2009-01-31', 'Campaign', 'AdGroup', 'Keyword',
   'KeywordStatus', 'KeywordMinCPC', 'KeywordDestUrlDisplay', 'Impressions',
   'Clicks', 'CTR', 'AveragePosition')
report_job = SOAPpy.Types.untypedType(report_job)
report_job._setAttr('xmlns:impl', namespace.replace('sandbox', 'adwords'))
report_job._setAttr('xsi:type', 'impl:DefinedReportJob')

try:
  # Validate report.
  report_service.validateReportJob(report_job)

  # Schedule report.
  job_id = report_service.scheduleReportJob(report_job)
  job_id = SOAPpy.Types.untypedType(job_id)

  # Wait for report to finish.
  status = report_service.getReportJobStatus(job_id)
  while status != 'Completed' and status != 'Failed':
    print 'Report job status is "%s".' % status
    time.sleep(30)
    status = report_service.getReportJobStatus(job_id)

  if(status == 'Failed'):
    print 'Report job generation failed.'
    sys.exit();

  # Download report.
  report_url = report_service.getGzipReportDownloadUrl(job_id)

Code sample not available.
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Create report job structure.
report_job = %{
<job xsi:type='DefinedReportJob'>
  <selectedReportType>Keyword</selectedReportType>
  <name>Sample Keyword Report</name>
  <aggregationTypes>Summary</aggregationTypes>
  <adWordsType>SearchOnly</adWordsType>
  <keywordType>Broad</keywordType>
  <startDay>2009-01-01</startDay>
  <endDay>2009-01-31</endDay>
  <selectedColumns>Campaign</selectedColumns>
  <selectedColumns>AdGroup</selectedColumns>
  <selectedColumns>Keyword</selectedColumns>
  <selectedColumns>KeywordStatus</selectedColumns>
  <selectedColumns>KeywordMinCPC</selectedColumns>
  <selectedColumns>KeywordDestUrlDisplay</selectedColumns>
  <selectedColumns>Impressions</selectedColumns>
  <selectedColumns>Clicks</selectedColumns>
  <selectedColumns>CTR</selectedColumns>
  <selectedColumns>AveragePosition</selectedColumns>
</job>
}

begin
  # Validate report.
  report_service.validateReportJob(REXML::Document.new("<validateReportJob " +
    "xmlns='https://adwords.google.com/api/adwords/v13'>#{report_job}" +
    "</validateReportJob>"))

  # Schedule report.
  job_id = report_service.scheduleReportJob(REXML::Document.new(
    "<scheduleReportJob xmlns='https://adwords.google.com/api/adwords/v13'>" +
    "#{report_job}</scheduleReportJob>")).scheduleReportJobReturn

  # Wait for report to finish.
  status = report_service.getReportJobStatus(:reportJobId => job_id
    ).getReportJobStatusReturn
  while status != 'Completed' and status != 'Failed'
    puts "Report job status is '#{status}'."
    sleep(30)
    status = report_service.getReportJobStatus(:reportJobId => job_id
      ).getReportJobStatusReturn
  end

  if status == 'Failed'
    puts "Report job generation failed."
    exit
  end

  # Download report.
  report_url = report_service.getGzipReportDownloadUrl(
    :reportJobId => job_id).getGzipReportDownloadUrlReturn

Code sample not available.
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Create report job structure.
$report_job =
  '<selectedReportType>Keyword</selectedReportType>' .
  '<name>Sample Keyword Report</name>' .
  '<aggregationTypes>Summary</aggregationTypes>' .
  '<adWordsType>SearchOnly</adWordsType>' .
  '<keywordType>Broad</keywordType>' .
  '<startDay>2008-01-01</startDay>' .
  '<endDay>2008-01-31</endDay>' .
  '<selectedColumns>Campaign</selectedColumns>' .
  '<selectedColumns>AdGroup</selectedColumns>' .
  '<selectedColumns>Keyword</selectedColumns>' .
  '<selectedColumns>KeywordStatus</selectedColumns>' .
  '<selectedColumns>KeywordMinCPC</selectedColumns>' .
  '<selectedColumns>KeywordDestUrlDisplay</selectedColumns>' .
  '<selectedColumns>Impressions</selectedColumns>' .
  '<selectedColumns>Clicks</selectedColumns>' .
  '<selectedColumns>CTR</selectedColumns>' .
  '<selectedColumns>AveragePosition</selectedColumns>';
$request_xml =
  '<validateReportJob>' .
  '<job xmlns:impl="https://adwords.google.com/api/adwords/v13" ' .
  'xsi:type="impl:DefinedReportJob">' .
  $report_job .
  '</job>' .
  '</validateReportJob>';

# Validate report.
$report_service->call('validateReportJob', $request_xml);
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($report_service);

# Schedule report.
$request_xml =
  '<scheduleReportJob>' .
  '<job xmlns:impl="https://adwords.google.com/api/adwords/v13" ' .
  'xsi:type="impl:DefinedReportJob">' .
  $report_job .
  '</job>' .
  '</scheduleReportJob>';
$job_id = $report_service->call('scheduleReportJob', $request_xml);
$job_id = $job_id['scheduleReportJobReturn'];
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($service);

# Wait for report to finish.
$request_xml =
  '<getReportJobStatus>' .
  '<reportJobId>' .
  $job_id .
  '</reportJobId>' .
  '</getReportJobStatus>';
$status = $report_service->call('getReportJobStatus', $request_xml);
$status = $status['getReportJobStatusReturn'];
if ($debug) show_xml($report_service);
if ($report_service->fault) show_fault($service);
while ($status != 'Completed' and $status != 'Failed') {
  echo 'Report job status is "' . $status . '".' . "\n";
  sleep(30);
  $status = $report_service->call('getReportJobStatus', $request_xml);
  $status = $status['getReportJobStatusReturn'];
  if ($debug) show_xml($report_service);
  if ($report_service->fault) show_fault($service);
}

if ($status == 'Failed') {
  echo 'Report job generation failed.' . "\n";
  return;
}

# Download report.
$request_xml =
  '<getGzipReportDownloadUrl>' .
  '<reportJobId>' .
  $job_id .
  '</reportJobId>' .
  '</getGzipReportDownloadUrl>';
$report_url = $report_service->call('getGzipReportDownloadUrl', $request_xml);
$report_url = $report_url['getGzipReportDownloadUrlReturn'];

Code sample not available.
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    <!-- Validates a keyword report with sample columns. -->
    <!-- Used before scheduling a report to make sure it is valid. -->
    <validateReportJob xmlns="https://adwords.google.com/api/adwords/v13">
      <job xsi:type="DefinedReportJob">
        <selectedReportType>Keyword</selectedReportType>
        <name>Sample Keyword Report</name>
        <aggregationTypes>Summary</aggregationTypes>
        <adWordsType>SearchOnly</adWordsType>
        <keywordType>Broad</keywordType>
        <startDay>2008-01-01</startDay>
        <endDay>2008-01-31</endDay>
        <selectedColumns>Campaign</selectedColumns>
        <selectedColumns>AdGroup</selectedColumns>
        <selectedColumns>Keyword</selectedColumns>
        <selectedColumns>KeywordStatus</selectedColumns>
        <selectedColumns>KeywordMinCPC</selectedColumns>
        <selectedColumns>KeywordDestUrlDisplay</selectedColumns>
        <selectedColumns>Impressions</selectedColumns>
        <selectedColumns>Clicks</selectedColumns>
        <selectedColumns>CTR</selectedColumns>
        <selectedColumns>AveragePosition</selectedColumns>
      </job>
    </validateReportJob>

Select a programming language to view its sample