Hi Greg, AdWords API doesn't support reports at MCC level, and it indicates so by throwing CUSTOMER_SERVING_TYPE_REPORT_MISMATCH error. If you need to generate a report for multiple customers, you need to download them one AdWords account at a time and then combine it locally. We have a java code example that shows how this may be done. You can find it at http://code.google.com/p/google-api-adwords-java/source/browse/apps/multipleclientreportdownloader/src/com/google/api/adwords/reportdownload/MultipleClientReportDownloaderMain.java
Cheers, Anash P. Oommen, AdWords API Advisor. On Monday, 12 November 2012 15:24:01 UTC-8, Greg Gunner wrote: > > Hi, > > I am upgrading an application to support 201209. It seems the Report > Definition Services is failing. I get the error: "Report download failed. > Underlying errors are Type = > 'ReportDefinitionError.CUSTOMER_SERVING_TYPE_REPORT_MISMATCH', Trigger = > '', FieldPath = 'selector'." > > As I understand it, this is the issue: > https://developers.google.com/adwords/api/docs/troubleshooting?hl=en#ReportDefinitionError.CUSTOMER_SERVING_TYPE_REPORT_MISMATCH > > Can anyone help as to what is the correct strategy to support the > reporting we are after? > > The application generates custom reports for clients, some of whom also > manage multiple accounts. > > For example, we have the below code: > > ***** > function getReportData($report_type, $report_name, $customer_id = null, > $fields = array(), $predicates = array(), $date_range = null) > { > require_once 'Google/Api/Ads/AdWords/Lib/AdWordsUser.php'; > require_once 'Google/Api/Ads/AdWords/Util/ReportUtils.php'; > try { > //set the user > $user = $this->setUser(); > //set the customer id > if ($customer_id !== null) { > $user->SetClientId($customer_id); > } > $results = array(); > // Load the service, so that the required classes are available. > $user->LoadService('ReportDefinitionService', 'v201209'); > // Create selector. > $selector = new Selector(); > $selector->fields = $fields; > // Create predicates. > if (!empty($predicates)) { > //$predicates = array(array('field' => 'Status', 'operator' => 'IN', > 'values' => array('ENABLED', 'PAUSED'))); > foreach ($predicates as $predicate) { > $predicate = array_merge(array('field' => null, 'operator' => null, > 'values' => null), $predicate); > if (!empty($predicate['field']) && !empty($predicate['operator']) && > !empty($predicate['values'])) { > $selector->predicates[] = new Predicate($predicate['field'], > $predicate['operator'], $predicate['values']); > } > } > } > > // Create report definition. > $definition = new ReportDefinition(); > //add the date range > if (!empty($date_range)) { > //set the date > if (is_string($date_range)) { > $definition->dateRangeType = $date_range; > } else { > $definition->dateRangeType = 'CUSTOM_DATE'; > $selector->dateRange->min = $date_range['min']; > $selector->dateRange->max = $date_range['max']; > } > } > //set the report defaults > $definition->reportName = $report_name; > $definition->reportType = $report_type; > $definition->downloadFormat = $this->download_format; > // Exclude criteria that haven't recieved any impressions over the date > range. > $definition->includeZeroImpressions = FALSE; > //add the selector > $definition->selector = $selector; > // Set additional options. > $options = array('version' => 'v201209', 'returnMoneyInMicros' => FALSE); > //get the report > return $this->returnResult(ReportUtils::DownloadReport($definition, null, > $user, $options)); > } catch(Exception $e) { > $this->last_error = $e->getMessage(); > } > return false; > } > > > function setUser() > { > if (!isset($this->AdWordsUser)) { > App::import('Model', 'Setting'); > $Setting =& new Setting(); > $this->AdWordsUser = new AdWordsUser( > null, > $Setting->get('adwords_email'), > $Setting->get('adwords_password'), > $Setting->get('adwords_developer_token'), > null, > $Setting->get('adwords_user_agent') > ); > } > if ($this->log) { > $this->AdWordsUser->LogAll(); > } > return $this->AdWordsUser; > } > ***** > > This is called by... > ***** > return $this->getReportData( > 'KEYWORDS_PERFORMANCE_REPORT', > 'Keyword performance report', > $customer_id, > array( > 'ExternalCustomerId', > 'DayOfWeek', > 'CampaignId', > 'CampaignName', > 'CampaignStatus', > 'AdNetworkType1', > 'AdGroupId', > 'AdGroupName', > "AdGroupStatus", > 'Id', > 'KeywordText', > 'KeywordMatchType', > 'Status', > 'Clicks', > 'Cost', > 'Conversions', > 'ConversionsManyPerClick', > 'ConversionRate', > 'ConversionRateManyPerClick', > 'TotalConvValue', > 'CostPerConversion', > 'CostPerConversionManyPerClick', > > 'Impressions', > 'Ctr', > 'AverageCpc', > 'AverageCpm', > 'AveragePosition', > 'MaxCpc', > 'MaxCpm', > 'IsNegative', > //'PreferredPosition',//no nonger available > //'BottomPosition',//no nonger available > > //"KeywordTypeDisplay", > //"KeywordMinCPC", > //"MaxContentCPC", > //"PreferredCPC", > //"PreferredCPM", > //"KeywordDestUrlDisplay", > ), > array( > array('field' => 'Status', 'operator' => 'IN', 'values' => > array('ACTIVE')), > array('field' => 'AdNetworkType1', 'operator' => 'IN', 'values' => > array('SEARCH')) > ), > $date_range); > ***** > > > -- =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ Also find us on our blog and discussion group: http://adwordsapi.blogspot.com http://groups.google.com/group/adwords-api =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ You received this message because you are subscribed to the Google Groups "AdWords API Forum" group. To post to this group, send email to adwords-api@googlegroups.com To unsubscribe from this group, send email to adwords-api+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/adwords-api?hl=en