~3x discrepancy between TrafficEstimatorService and Keyword Planner (Not using a test account)

192 views
Skip to first unread message

Sebastian Razola

unread,
Jul 30, 2018, 4:45:52 PM7/30/18
to AdWords API and Google Ads API Forum
keyword: san diego hotels on the beach
max_cpc: 7 SEK (0.80 USD)
locations: all
language: english

According to the Keyword Planner's search volume and forecasts tool I would get ~1500 impressions on August 1. See attached screenshot. (Daily impressions between 1-10 August range between 1300-1700 impressions)

According to the TrafficEstimatorService I would get 445-544 daily impressions. See the debug output from the Adwords API Ruby gem below.

What could be the cause of this huge discrepancy?

Thanks!

/Sebastian

Outgoing request: SOAPAction: "get", User-Agent: pinata-14 (AwApi-Ruby/1.3.0, Common-Ruby/1.0.2, GoogleAdsSavon/1.0.3, ruby/2.5.0, HTTPI/2.4.3, httpclient), Authorization: REDACTED, Content-Type: text/xml;charset=UTF-8, Content-Length: 1282
<?xml version="1.0" encoding="UTF-8"?>
  <env:Header>
    <wsdl:RequestHeader xmlns="https://adwords.google.com/api/adwords/cm/v201806">
      <userAgent>pinata-14 (AwApi-Ruby/1.3.0, Common-Ruby/1.0.2, GoogleAdsSavon/1.0.3, ruby/2.5.0, HTTPI/2.4.3, httpclient)</userAgent>
      <developerToken>REDACTED</developerToken>
      <clientCustomerId>8849260927</clientCustomerId>
    </wsdl:RequestHeader>
  </env:Header>
  <env:Body>
      <selector>
        <campaignEstimateRequests>
          <adGroupEstimateRequests>
            <keywordEstimateRequests>
              <keyword xsi:type="ns0:Keyword">
                <ns0:text>san diego hotels on the beach</ns0:text>
                <ns0:matchType>BROAD</ns0:matchType>
              </keyword>
              <isNegative>false</isNegative>
            </keywordEstimateRequests>
            <maxCpc>
              <ns0:microAmount>7000000</ns0:microAmount>
            </maxCpc>
          </adGroupEstimateRequests>
          <criteria xsi:type="ns0:Language">
            <ns0:id>1000</ns0:id>
          </criteria>
        </campaignEstimateRequests>
      </selector>
    </get>
  </env:Body>
</env:Envelope>

Incoming response: Content-Type: text/xml; charset=UTF-8, Date: Mon, 30 Jul 2018 18:29:39 GMT, Expires: Mon, 30 Jul 2018 18:29:39 GMT, Cache-Control: private, max-age=0, X-Content-Type-Options: nosniff, X-Frame-Options: SAMEORIGIN, X-XSS-Protection: 1; mode=block, Server: GSE, Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35", Accept-Ranges: none, Vary: Accept-Encoding, Transfer-Encoding: chunked
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
      <ns2:requestId>0005723ba4e6f6700a563e439a063d2d</ns2:requestId>
      <ns2:serviceName>TrafficEstimatorService</ns2:serviceName>
      <ns2:methodName>get</ns2:methodName>
      <ns2:operations>1</ns2:operations>
      <ns2:responseTime>910</ns2:responseTime>
    </ResponseHeader>
  </soap:Header>
  <soap:Body>
      <rval>
        <campaignEstimates>
          <Estimate.Type>CampaignEstimate</Estimate.Type>
          <campaignId>1380464335</campaignId>
          <adGroupEstimates>
            <Estimate.Type>AdGroupEstimate</Estimate.Type>
            <keywordEstimates>
              <Estimate.Type>KeywordEstimate</Estimate.Type>
              <min>
                <averageCpc>
                  <ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>
                  <ns2:microAmount>2721980</ns2:microAmount>
                </averageCpc>
                <averagePosition>4.33040815804821</averagePosition>
                <clickThroughRate>0.0744010696967159</clickThroughRate>
                <clicksPerDay>36.818844</clicksPerDay>
                <impressionsPerDay>445.3828</impressionsPerDay>
                <totalCost>
                  <ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>
                  <ns2:microAmount>111355736</ns2:microAmount>
                </totalCost>
              </min>
              <max>
                <averageCpc>
                  <ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>
                  <ns2:microAmount>3326864</ns2:microAmount>
                </averageCpc>
                <averagePosition>3.5430610495684136</averagePosition>
                <clickThroughRate>0.09093464512033123</clickThroughRate>
                <clicksPerDay>45.000813</clicksPerDay>
                <impressionsPerDay>544.3568</impressionsPerDay>
                <totalCost>
                  <ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>
                  <ns2:microAmount>136101456</ns2:microAmount>
                </totalCost>
              </max>
            </keywordEstimates>
          </adGroupEstimates>
        </campaignEstimates>
      </rval>
    </getResponse>
  </soap:Body>
</soap:Envelope>
2018-07-30 at 17.55.png

Dannison Yao (AdWords API Team)

unread,
Jul 31, 2018, 3:18:58 AM7/31/18
to AdWords API and Google Ads API Forum
Hi Sebastian,

Upon investigation, I have noticed that some of the parameters applied in your AdWords UI request were not applied in your AdWords API call. Could you include the missing parameters (e.g. NetworkSetting) before making the call? You may refer to this guide for the sample code in setting up your parameters.

If there is still a discrepancy after applying the missing parameters, feel free to write back with the complete SOAP request and response logs during the service call via Reply privately to author so I could further investigate.

Regards,
Dannison
AdWords API Team

Sebastian Razola

unread,
Aug 1, 2018, 3:47:38 AM8/1/18
to AdWords API and Google Ads API Forum
Hi Dannison,

I've tried to reply privately twice now but I haven't heard anything from you and I can't seen my reply in my sent folder, so I'll reply publicly here instead.

I excluded the NetworkSetting parameter as the docs state that "If all request network settings and Campaign's network settings are empty, the default is NetworkSetting.targetGoogleSearch". However just to be sure I added it but it didn't change anything.

Here are the complete logs

D, [2018-07-31T07:45:43.619386 #24] DEBUG -- : HTTPI /peer POST request to adwords.google.com (httpclient)
I, [2018-07-31T07:45:45.294689 #24]  INFO -- : ID: 8849260927, URL: https://adwords.google.com/api/adwords/o/v201806/TrafficEstimatorService, Service: TrafficEstimatorService, Action: get, Response time: 310ms, Request ID: 00057246c40aaf280ac13fd3010c4b2a, Operations: 1, Is fault: false
D, [2018-07-31T07:45:45.295031 #24] DEBUG -- : Outgoing request: SOAPAction: "get", User-Agent: pinata-14 (AwApi-Ruby/1.3.0, Common-Ruby/1.0.2, GoogleAdsSavon/1.0.3, ruby/2.5.0, HTTPI/2.4.3, httpclient), Authorization: REDACTED, Content-Type: text/xml;charset=UTF-8, Content-Length: 1517 <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="https://adwords.google.com/api/adwords/o/v201806" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="https://adwords.google.com/api/adwords/cm/v201806"><env:Header><wsdl:RequestHeader xmlns="https://adwords.google.com/api/adwords/cm/v201806"><userAgent>pinata-14 (AwApi-Ruby/1.3.0, Common-Ruby/1.0.2, GoogleAdsSavon/1.0.3, ruby/2.5.0, HTTPI/2.4.3, httpclient)</userAgent><developerToken>REDACTED</developerToken><clientCustomerId>8849260927</clientCustomerId></wsdl:RequestHeader></env:Header><env:Body><get xmlns="https://adwords.google.com/api/adwords/o/v201806"><selector><campaignEstimateRequests><adGroupEstimateRequests><keywordEstimateRequests><keyword xsi:type="ns0:Keyword"><ns0:text>san diego hotels on the beach</ns0:text><ns0:matchType>BROAD</ns0:matchType></keyword><isNegative>false</isNegative></keywordEstimateRequests><maxCpc><ns0:microAmount>7000000</ns0:microAmount></maxCpc></adGroupEstimateRequests><criteria xsi:type="ns0:Language"><ns0:id>1000</ns0:id></criteria><networkSetting><ns0:targetGoogleSearch>true</ns0:targetGoogleSearch><ns0:targetSearchNetwork>false</ns0:targetSearchNetwork><ns0:targetContentNetwork>false</ns0:targetContentNetwork><ns0:targetPartnerSearchNetwork>false</ns0:targetPartnerSearchNetwork></networkSetting></campaignEstimateRequests></selector></get></env:Body></env:Envelope>
D, [2018-07-31T07:45:45.295461 #24] DEBUG -- : Incoming response: Content-Type: text/xml; charset=UTF-8, Date: Tue, 31 Jul 2018 07:45:46 GMT, Expires: Tue, 31 Jul 2018 07:45:46 GMT, Cache-Control: private, max-age=0, X-Content-Type-Options: nosniff, X-Frame-Options: SAMEORIGIN, X-XSS-Protection: 1; mode=block, Server: GSE, Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35", Accept-Ranges: none, Vary: Accept-Encoding, Transfer-Encoding: chunked <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806" xmlns="https://adwords.google.com/api/adwords/o/v201806"><ns2:requestId>00057246c40aaf280ac13fd3010c4b2a</ns2:requestId><ns2:serviceName>TrafficEstimatorService</ns2:serviceName><ns2:methodName>get</ns2:methodName><ns2:operations>1</ns2:operations><ns2:responseTime>310</ns2:responseTime></ResponseHeader></soap:Header><soap:Body><getResponse xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806" xmlns="https://adwords.google.com/api/adwords/o/v201806"><rval><campaignEstimates><Estimate.Type>CampaignEstimate</Estimate.Type><adGroupEstimates><Estimate.Type>AdGroupEstimate</Estimate.Type><keywordEstimates><Estimate.Type>KeywordEstimate</Estimate.Type><min><averageCpc><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>2718801</ns2:microAmount></averageCpc><averagePosition>4.333755554987472</averagePosition><clickThroughRate>0.07311513155724914</clickThroughRate><clicksPerDay>38.11687</clicksPerDay><impressionsPerDay>469.19403</impressionsPerDay><totalCost><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>115146864</ns2:microAmount></totalCost></min><max><averageCpc><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>3322979</ns2:microAmount></averageCpc><averagePosition>3.545799828750441</averagePosition><clickThroughRate>0.08936294287417024</clickThroughRate><clicksPerDay>46.58729</clicksPerDay><impressionsPerDay>573.4594</impressionsPerDay><totalCost><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>140735056</ns2:microAmount></totalCost></max></keywordEstimates></adGroupEstimates></campaignEstimates></rval></getResponse></soap:Body></soap:Envelope>

Nadine Sundquist (AdWords API Team)

unread,
Aug 1, 2018, 11:15:47 AM8/1/18
to AdWords API and Google Ads API Forum
Hello Sebastian,

I'm jumping in here because I've worked quite a bit with these services before. They are a bit funky sometimes. I'm going to have to give you a bit of background to explain what's going on. As you've noticed, our UI has changed recently for our product. Also, we're bringing a new API online as we're going from AdWords API to Google Ads API (currently in beta). The old UI behaved very similar to our old AdWords API, and our new Google Ads API will behave very similar to the new UI. Now, I'll explain what's going on.

The new UI allows you to pick date ranges as to when to forecast. You probably noticed that in our API today there isn't an option to do that. It just max and min data over a 7 day time period. Of course in a new APi we would want to give more flexibility, but the new API has not been built, yet. So, in the meantime, the exact data that you're seeing in the new UI can't be reproduced in the old API. The flexibility isn't there. It's not a one to one mapping. Since we can't specify a date range, we can't ask for the total over a specific date range. That's why your numbers are off. We're moving towards a better interface, and we're building out the new API as fast as we can. Keep an eye out on our blog for more updates as the new API comes online and we introduce functionality to allow you to reproduce what you're seeing in the new UI more easily. Until then, unfortunately, you can't perfectly get those two interfaces to perfectly match.

Cheers,
Nadine, AdWords API Team

Sebastian Razola

unread,
Aug 1, 2018, 11:46:04 AM8/1/18
to AdWords API and Google Ads API Forum
Hi Nadine,

Thanks for the quick reply and thorough explanation. If I understand you correctly the existing API gives me the min and max number of impressions over the next(?) 7 days, compared to the new UI that gives forecasts for a specific day or a date range.

However the data still doesn’t make sense. According to the API daily impressions will range from ~450 to ~550. BUT I’ve manually checked the next 7 days and the daily forecast range from ~1300 to ~1700.

Or did I misunderstand you?

Thanks!

Nadine Sundquist (AdWords API Team)

unread,
Aug 1, 2018, 2:26:19 PM8/1/18
to AdWords API and Google Ads API Forum
Hi Sebastian,

You totally did understand. You got it. I actually have the impression range coming back closer to the actual numbers when I ran it today for your account. Note that I set the max CPC to same as the default in the UI for your currency. I made sure the UI had the same when I was doing a comparison.

Request:

<selector><campaignEstimateRequests><adGroupEstimateRequests><keywordEstimateRequests><keyword><text xmlns="https://adwords.google.com/api/adwords/cm/v201806">san diego hotels on the beach</text><matchType xmlns="https://adwords.google.com/api/adwords/cm/v201806">BROAD</matchType></keyword><maxCpc><microAmount xmlns="https://adwords.google.com/api/adwords/cm/v201806">10000000</microAmount></maxCpc></keywordEstimateRequests></adGroupEstimateRequests><criteria xsi:type="xns:Language" xmlns:xns="https://adwords.google.com/api/adwords/cm/v201806" ><id xmlns="https://adwords.google.com/api/adwords/cm/v201806">1000</id></criteria></campaignEstimateRequests></selector>


Response:

<rval><campaignEstimates><Estimate.Type>CampaignEstimate</Estimate.Type><adGroupEstimates><Estimate.Type>AdGroupEstimate</Estimate.Type><keywordEstimates><Estimate.Type>KeywordEstimate</Estimate.Type><min><averageCpc><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>3101458</ns2:microAmount></averageCpc><averagePosition>1.1803305461759181</averagePosition><clickThroughRate>0.052787028717344864</clickThroughRate><clicksPerDay>83.92769</clicksPerDay><impressionsPerDay>1430.9371</impressionsPerDay><totalCost><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>289220160</ns2:microAmount></totalCost></min><max><averageCpc><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>3790671</ns2:microAmount></averageCpc><averagePosition>1.0</averagePosition><clickThroughRate>0.06451748265092982</clickThroughRate><clicksPerDay>102.57829</clicksPerDay><impressionsPerDay>1748.9232</impressionsPerDay><totalCost><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>353491328</ns2:microAmount></totalCost></max></keywordEstimates></adGroupEstimates></campaignEstimates></rval>

You can see that the range is somewhere between 1400 to 1700, which is much closer to what you're seeing in the UI. I even checked the UI today for what I believe is the same date range as this, and it's fairly close. It won't be exact because as I said, it's not the same code running this, but it will be much closer than what you were seeing before when you understand the window that is being watched.

Regards,
Nadine, AdWords API Team

Sebastian Razola

unread,
Aug 2, 2018, 5:10:16 AM8/2/18
to AdWords API and Google Ads API Forum
Hmm, are you sure that your max CPC value is correct? Where did you get the 10000000 micro amount from? From what I understand the currency used is the customer's selected currency. If I do a getCustomers request via the CustomerService the currencyCode element means that I should use a micro amount value in SEK. Correct? 

The max CPC in the UI screenshot is 7 SEK. That would mean a micro amount of 7000000? Which is what I used the API request that results in impressions ranging between ~450 and ~550.

D, [2018-08-02T08:51:09.842636 #23] DEBUG -- : Incoming response: Content-Type: text/xml; charset=UTF-8, Date: Thu, 02 Aug 2018 08:51:09 GMT, Expires: Thu, 02 Aug 2018 08:51:09 GMT, Cache-Control: private, max-age=0, X-Content-Type-Options: nosniff, X-Frame-Options: SAMEORIGIN, X-XSS-Protection: 1; mode=block, Server: GSE, Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35", Accept-Ranges: none, Vary: Accept-Encoding, Transfer-Encoding: chunked <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806" xmlns="https://adwords.google.com/api/adwords/mcm/v201806"><ns2:requestId>0005726fe9994e600a1bd952b800535c</ns2:requestId><ns2:serviceName>CustomerService</ns2:serviceName><ns2:methodName>getCustomers</ns2:methodName><ns2:operations>1</ns2:operations><ns2:responseTime>343</ns2:responseTime></ResponseHeader></soap:Header><soap:Body><getCustomersResponse xmlns="https://adwords.google.com/api/adwords/mcm/v201806" xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806"><rval><customerId>8849260927</customerId><currencyCode>SEK</currencyCode><dateTimeZone>Europe/Stockholm</dateTimeZone>...

Nadine Sundquist (AdWords API Team)

unread,
Aug 2, 2018, 10:51:58 AM8/2/18
to AdWords API and Google Ads API Forum
Hi Sebastian,

I had that set as my amount in the UI. For some reason, my UI defaulted it to that, so my guess is perhaps it defaulted to 10 SEK for you, too. Yes, you did the conversion correctly. I compared the UI with passing 10 SEK to passing in the same to the API. 

So, I changed it to 7000000 in the API, and then I compared it to the UI with 7 SEK. Now, the important part is that you NEED to make sure that you are in the SAME account in the UI as you are in the API.  I then went day by day in the UI. The range falls within what the API is returning of about 1400 to 1700 for the next week right now. The key is that it has to be the same account.

Best,
Nadine, AdWords API Team

Sebastian Razola

unread,
Aug 2, 2018, 11:39:00 AM8/2/18
to AdWords API and Google Ads API Forum
Ok but if my calculations are correct then I've must have encountered an issue?

See attached screenshot where the UI for August 3 forecasts ~1500 impressions with a 7 SEK max CPC, and the attached API log where impressions for the next 7 days range between 467-571 with a 7000000 micro amount max CPC.

Note that the Customer Id is the same in the API request and UI.

D, [2018-08-02T15:18:30.161278 #7] DEBUG -- : HTTPI /peer POST request to adwords.google.com (httpclient)
I
, [2018-08-02T15:18:32.202363 #7]  INFO -- : ID: 8849260927, URL: https://adwords.google.com/api/adwords/o/v201806/TrafficEstimatorService, Service: TrafficEstimatorService, Action: get, Response time: 541ms, Request ID: 00057275531af5280a5615ce0f08ba8d, Operations: 1, Is fault: false
D
, [2018-08-02T15:18:32.202568 #7] DEBUG -- : Outgoing request: SOAPAction: "get", User-Agent: pinata-14 (AwApi-Ruby/1.3.0, Common-Ruby/1.0.2, GoogleAdsSavon/1.0.3, ruby/2.5.0, HTTPI/2.4.3, httpclient), Authorization: REDACTED, Content-Type: text/xml;charset=UTF-8, Content-Length: 1517
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="https://adwords.google.com/api/adwords/cm/v201806" xmlns:wsdl="https://adwords.google.com/api/adwords/o/v201806" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
<env:Header>
   
<wsdl:RequestHeader xmlns="https://adwords.google.com/api/adwords/cm/v201806">
     
<userAgent>pinata-14 (AwApi-Ruby/1.3.0, Common-Ruby/1.0.2, GoogleAdsSavon/1.0.3, ruby/2.5.0, HTTPI/2.4.3, httpclient)</userAgent>
     
<developerToken>REDACTED</developerToken>
      <clientCustomerId>8849260927</
clientCustomerId>
   
</wsdl:RequestHeader>
  </
env:Header>
 
<env:Body>
   
<get xmlns="https://adwords.google.com/api/adwords/o/v201806">

     
<selector>
       
<campaignEstimateRequests>
         
<adGroupEstimateRequests>
           
<keywordEstimateRequests>

             
<keyword xsi:type="ns0:Keyword">
               
<ns0:text>san diego hotels on the beach</ns0:text>
                <ns0:matchType>BROAD</
ns0:matchType>
             
</keyword>
              <isNegative>false</
isNegative>
           
</keywordEstimateRequests>
            <maxCpc>
              <ns0:microAmount>7000000</
ns0:microAmount>
           
</maxCpc>
          </
adGroupEstimateRequests>
         
<criteria xsi:type="ns0:Language">
           
<ns0:id>1000</ns0:id>
          </
criteria>
         
<networkSetting>
           
<ns0:targetGoogleSearch>true</ns0:targetGoogleSearch>
            <ns0:targetSearchNetwork>false</
ns0:targetSearchNetwork>
           
<ns0:targetContentNetwork>false</ns0:targetContentNetwork>
            <ns0:targetPartnerSearchNetwork>false</
ns0:targetPartnerSearchNetwork>
         
</networkSetting>
        </
campaignEstimateRequests>
     
</selector>
    </
get>
 
</env:Body>
</
env:Envelope>

D
, [2018-08-02T15:18:32.203009 #7] DEBUG -- : Incoming response: Content-Type: text/xml; charset=UTF-8, Date: Thu, 02 Aug 2018 15:18:35 GMT, Expires: Thu, 02 Aug 2018 15:18:35 GMT, Cache-Control: private, max-age=0, X-Content-Type-Options: nosniff, X-Frame-Options: SAMEORIGIN, X-XSS-Protection: 1; mode=block, Server: GSE, Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35", Accept-Ranges: none, Vary: Accept-Encoding, Transfer-Encoding: chunked
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 
<soap:Header>

     
<ns2:requestId>00057275531af5280a5615ce0f08ba8d</ns2:requestId>
      <ns2:serviceName>TrafficEstimatorService</
ns2:serviceName>
     
<ns2:methodName>get</ns2:methodName>
      <ns2:operations>1</
ns2:operations>
     
<ns2:responseTime>541</ns2:responseTime>
    </
ResponseHeader>
 
</soap:Header>
  <soap:Body>
    <getResponse xmlns="https:/
/adwords.google.com/api/adwords/o/v201806" xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806">
     
<rval>

       
<campaignEstimates>
         
<Estimate.Type>CampaignEstimate</Estimate.Type>
          <adGroupEstimates>
            <Estimate.Type>AdGroupEstimate</
Estimate.Type>
           
<keywordEstimates>
             
<Estimate.Type>KeywordEstimate</Estimate.Type>
              <min>
                <averageCpc>
                  <ns2:ComparableValue.Type>Money</
ns2:ComparableValue.Type>

                 
<ns2:microAmount>2682687</ns2:microAmount>
                </
averageCpc>
               
<averagePosition>4.313670378623284</averagePosition>
                <clickThroughRate>0.07493564064474523</
clickThroughRate>
               
<clicksPerDay>38.918427</clicksPerDay>
                <impressionsPerDay>467.4222</
impressionsPerDay>
               
<totalCost>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>
                  <ns2:microAmount>116006600</
ns2:microAmount>

               
</totalCost>
              </
min>
             
<max>
               
<averageCpc>
                 
<ns2:ComparableValue.Type>Money<
/ns2:ComparableValue.Type>
                  <ns2:microAmount>3278839</
ns2:microAmount>
               
</averageCpc>
                <averagePosition>3.529366503425804</
averagePosition>
               
<clickThroughRate>0.09158800964383662</clickThroughRate>
                <clicksPerDay>47.56697</
clicksPerDay>
               
<impressionsPerDay>571.2938</impressionsPerDay>

                <totalCost>
                  <ns2:ComparableValue.Type>Money</
ns2:ComparableValue.Type>
                 
<ns2:microAmount>141785856</ns2:microAmount>
                </
totalCost>
             
</max>
            </
keywordEstimates>
         
</adGroupEstimates>
        </
campaignEstimates>
     
</rval>
    </
getResponse>
 
</soap:Body>
</
soap:Envelope>

2018-08-02 at 17.23.png

Nadine Sundquist (AdWords API Team)

unread,
Aug 2, 2018, 6:41:05 PM8/2/18
to AdWords API and Google Ads API Forum
Hi Sebastian,

I made my API request EXACTLY match yours against your account, and I get different results. I have seen this phenomenon before, and it does happen on occasion, but it tends to balance itself out after a bit. So, when these numbers are calculated, they are calculated not at a central location. They are calculated at separate servers. So, a server in Europe would serve slightly different numbers than a server in the Americas. Technically, the numbers shouldn't be too far off, but on occasion, I've seen these numbers get unbalanced. I've personally observed it to be rare. I once proved it to myself by forcing my requests to go through to one set of servers versus another to see if that's the case. Considering that your request and my request are exactly the same against exactly the same account, that's what is happening here. I don't know of a way of righting that other than waiting for a bit of time for the calculations to level out or forcing all my traffic to another country to get an answer from another server.   

Regards,
Nadine, AdWords API Team

Sebastian Razola

unread,
Aug 3, 2018, 10:05:08 AM8/3/18
to AdWords API and Google Ads API Forum
I'm sorry for being so stubborn but I just really want to get to the bottom of this. 

1. Where are you located? I just tried using a VPN to route the request via California and New York and I still get the low forecast numbers.

2. Would you be so kind and post the full debug output of your request with a 7000000 micro amount max CPC and my customer id? If that's what you mean with "EXACTLY match yours against your account.

Thanks again Nadine. I so much appreciate you helping me out with this!

Nadine Sundquist (AdWords API Team)

unread,
Aug 3, 2018, 11:16:23 AM8/3/18
to AdWords API and Google Ads API Forum
Hi Sebastian,

I get it. It's so bizarre, you have to see it to believe it.

I'm located in New York.

Here's what I have. I'm running off a Perl client library, so my user agent will be different, but that doesn't make a different to the request itself. It's just header information. I'm just putting everything here, so you can see it.

[03 Aug 2018 10:58:42,441 - DEBUG] Outgoing request:
<?xml version="1.0" ?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ><SOAP-ENV:Header><RequestHeader xmlns="https://adwords.google.com/api/adwords/o/v201806"><clientCustomerId xmlns="https://adwords.google.com/api/adwords/cm/v201806">884-926-0927</clientCustomerId><developerToken xmlns="https://adwords.google.com/api/adwords/cm/v201806">REDACTED</developerToken><userAgent xmlns="https://adwords.google.com/api/adwords/cm/v201806">client_library (AwApi-Perl/5.5.0, Common-Perl/3.6.0, SOAP-WSDL/3.003, libwww-perl/6.29, perl/5.024001, Logging/Enabled)</userAgent><validateOnly xmlns="https://adwords.google.com/api/adwords/cm/v201806">false</validateOnly><partialFailure xmlns="https://adwords.google.com/api/adwords/cm/v201806">false</partialFailure></RequestHeader></SOAP-ENV:Header><SOAP-ENV:Body><get xmlns="https://adwords.google.com/api/adwords/o/v201806"><selector><campaignEstimateRequests><adGroupEstimateRequests><keywordEstimateRequests><keyword><text xmlns="https://adwords.google.com/api/adwords/cm/v201806">san diego hotels on the beach</text><matchType xmlns="https://adwords.google.com/api/adwords/cm/v201806">BROAD</matchType></keyword><isNegative>false</isNegative></keywordEstimateRequests><maxCpc><microAmount xmlns="https://adwords.google.com/api/adwords/cm/v201806">7000000</microAmount></maxCpc></adGroupEstimateRequests><criteria xsi:type="xns:Language"  xmlns:xns="https://adwords.google.com/api/adwords/cm/v201806" ><id xmlns="https://adwords.google.com/api/adwords/cm/v201806">1000</id></criteria><networkSetting xmlns:xns="https://adwords.google.com/api/adwords/cm/v201806" ><targetGoogleSearch xmlns="https://adwords.google.com/api/adwords/cm/v201806">true</targetGoogleSearch><targetSearchNetwork xmlns="https://adwords.google.com/api/adwords/cm/v201806">false</targetSearchNetwork><targetContentNetwork xmlns="https://adwords.google.com/api/adwords/cm/v201806">false</targetContentNetwork><targetPartnerSearchNetwork xmlns="https://adwords.google.com/api/adwords/cm/v201806">false</targetPartnerSearchNetwork></networkSetting></campaignEstimateRequests></selector></get></SOAP-ENV:Body></SOAP-ENV:Envelope>
[03 Aug 2018 10:58:42,441 - DEBUG] Incoming response:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806" xmlns="https://adwords.google.com/api/adwords/o/v201806"><ns2:requestId>0005728929d92d100ac13335e201ac09</ns2:requestId><ns2:serviceName>TrafficEstimatorService</ns2:serviceName><ns2:methodName>get</ns2:methodName><ns2:operations>1</ns2:operations><ns2:responseTime>617</ns2:responseTime></ResponseHeader></soap:Header><soap:Body><getResponse xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806" xmlns="https://adwords.google.com/api/adwords/o/v201806"><rval><campaignEstimates><Estimate.Type>CampaignEstimate</Estimate.Type><adGroupEstimates><Estimate.Type>AdGroupEstimate</Estimate.Type><keywordEstimates><Estimate.Type>KeywordEstimate</Estimate.Type><min><averageCpc><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>2806899</ns2:microAmount></averageCpc><averagePosition>1.2885431789965942</averagePosition><clickThroughRate>0.051303059738793344</clickThroughRate><clicksPerDay>81.59381</clicksPerDay><impressionsPerDay>1431.3849</impressionsPerDay><totalCost><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>254472912</ns2:microAmount></totalCost></min><max><averageCpc><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>3430655</ns2:microAmount></averageCpc><averagePosition>1.0542625502182668</averagePosition><clickThroughRate>0.06270374270089629</clickThroughRate><clicksPerDay>99.72577</clicksPerDay><impressionsPerDay>1749.4706</impressionsPerDay><totalCost><ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type><ns2:microAmount>311022464</ns2:microAmount></totalCost></max></keywordEstimates></adGroupEstimates></campaignEstimates></rval></getResponse></soap:Body></soap:Envelope>

This is the exact request and response dumped. I've already filed an issue to see if there is a bad server somewhere that could be causing this. I'm still waiting to hear back. I have no tricks up my sleeve here; you can sanity check me, but it looks like it to me that I have the same request that you do.

Best,
Nadine, AdWords API Team

Sebastian Razola

unread,
Aug 6, 2018, 6:11:00 AM8/6/18
to AdWords API and Google Ads API Forum
Gah yes, that request looks identical to me.

I just tried two new keywords with the same max CPC and I see between 2x and 3x discprepency for them too.

hotels new york
impressions tomorrow UI: ~6000
impressions daily API: ~1800-2200

riads marrakech
impressions tomorrow UI: ~571
impressions daily API: ~220-270

See requests and screenshots below.

I even tried the Perl client library to make sure this wasn't cause by a bug in the Ruby client library, but to no awail. 

1. What results do you get for these two new forecasts?
2. Even if I use a VPN based in New York I get the incorrect data. If the issue is a bad server here in Europe that shouldn't happen, right?

Outgoing request:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="https://adwords.google.com/api/adwords/cm/v201806" xmlns:wsdl="https://adwords.google.com/api/adwords/o/v201806" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
<env:Header>
   
<wsdl:RequestHeader xmlns="https://adwords.google.com/api/adwords/cm/v201806">
     
<userAgent>pinata-14 (AwApi-Ruby/1.3.0, Common-Ruby/1.0.2, GoogleAdsSavon/1.0.3, ruby/2.5.0, HTTPI/2.4.3, httpclient)</userAgent>
     
<developerToken>REDACTED</developerToken>
     
<clientCustomerId>8849260927</clientCustomerId>
   
</wsdl:RequestHeader>
 
</env:Header>
 
<env:Body>
   
<get xmlns="https://adwords.google.com/api/adwords/o/v201806">
     
<selector>
       
<campaignEstimateRequests>
         
<adGroupEstimateRequests>
           
<keywordEstimateRequests>
             
<keyword xsi:type="ns0:Keyword">

               
<ns0:text>hotels new york</ns0:text>

               
<ns0:matchType>BROAD</ns0:matchType>
             
</keyword>
             
<isNegative>false</isNegative>
           
</keywordEstimateRequests>
           
<maxCpc>
             
<ns0:microAmount>7000000</ns0:microAmount>
           
</maxCpc>
         
</adGroupEstimateRequests>
         
<criteria xsi:type="ns0:Language">
           
<ns0:id>1000</ns0:id>
         
</criteria>
         
<networkSetting>
           
<ns0:targetGoogleSearch>true</ns0:targetGoogleSearch>
           
<ns0:targetSearchNetwork>false</ns0:targetSearchNetwork>
           
<ns0:targetContentNetwork>false</ns0:targetContentNetwork>
           
<ns0:targetPartnerSearchNetwork>false</ns0:targetPartnerSearchNetwork>
         
</networkSetting>
       
</campaignEstimateRequests>
     
</selector>
   
</get>
 
</env:Body>
</env:Envelope>

Incoming request:

     
<ns2:requestId>000572c132e60fd00a563c82ac041477</ns2:requestId>

     
<ns2:serviceName>TrafficEstimatorService</ns2:serviceName>
     
<ns2:methodName>get</ns2:methodName>
     
<ns2:operations>1</ns2:operations>

     
<ns2:responseTime>899</ns2:responseTime>

   
</ResponseHeader>
 
</soap:Header>
 
<soap:Body>
   
<getResponse xmlns="https://adwords.google.com/api/adwords/o/v201806" xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806">
     
<rval>
       
<campaignEstimates>
         
<Estimate.Type>CampaignEstimate</Estimate.Type>
         
<adGroupEstimates>
           
<Estimate.Type>AdGroupEstimate</Estimate.Type>
           
<keywordEstimates>
             
<Estimate.Type>KeywordEstimate</Estimate.Type>
             
<min>
               
<averageCpc>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>

                 
<ns2:microAmount>3040634</ns2:microAmount>
               
</averageCpc>
               
<averagePosition>4.2910828667503695</averagePosition>
               
<clickThroughRate>0.06716729299115354</clickThroughRate>
               
<clicksPerDay>135.25752</clicksPerDay>
               
<impressionsPerDay>1812.3666</impressionsPerDay>

               
<totalCost>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>

                 
<ns2:microAmount>456965056</ns2:microAmount>

               
</totalCost>
             
</min>
             
<max>
               
<averageCpc>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>

                 
<ns2:microAmount>3716330</ns2:microAmount>
               
</averageCpc>
               
<averagePosition>3.510885812783549</averagePosition>
               
<clickThroughRate>0.0820933620543558</clickThroughRate>
               
<clicksPerDay>165.31474</clicksPerDay>
               
<impressionsPerDay>2215.1147</impressionsPerDay>

               
<totalCost>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>

                 
<ns2:microAmount>558512896</ns2:microAmount>

               
</totalCost>
             
</max>
           
</keywordEstimates>
         
</adGroupEstimates>
       
</campaignEstimates>
     
</rval>
   
</getResponse>
 
</soap:Body>
</soap:Envelope>

Outgoing request:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="https://adwords.google.com/api/adwords/cm/v201806" xmlns:wsdl="https://adwords.google.com/api/adwords/o/v201806" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
<env:Header>
   
<wsdl:RequestHeader xmlns="https://adwords.google.com/api/adwords/cm/v201806">
     
<userAgent>pinata-14 (AwApi-Ruby/1.3.0, Common-Ruby/1.0.2, GoogleAdsSavon/1.0.3, ruby/2.5.0, HTTPI/2.4.3, httpclient)</userAgent>
     
<developerToken>REDACTED</developerToken>
     
<clientCustomerId>8849260927</clientCustomerId>
   
</wsdl:RequestHeader>
 
</env:Header>
 
<env:Body>
   
<get xmlns="https://adwords.google.com/api/adwords/o/v201806">
     
<selector>
       
<campaignEstimateRequests>
         
<adGroupEstimateRequests>
           
<keywordEstimateRequests>
             
<keyword xsi:type="ns0:Keyword">

               
<ns0:text>hotels new york</ns0:text>

               
<ns0:matchType>BROAD</ns0:matchType>
             
</keyword>
             
<isNegative>false</isNegative>
           
</keywordEstimateRequests>
           
<maxCpc>
             
<ns0:microAmount>7000000</ns0:microAmount>
           
</maxCpc>
         
</adGroupEstimateRequests>
         
<criteria xsi:type="ns0:Language">
           
<ns0:id>1000</ns0:id>
         
</criteria>
         
<networkSetting>
           
<ns0:targetGoogleSearch>true</ns0:targetGoogleSearch>
           
<ns0:targetSearchNetwork>false</ns0:targetSearchNetwork>
           
<ns0:targetContentNetwork>false</ns0:targetContentNetwork>
           
<ns0:targetPartnerSearchNetwork>false</ns0:targetPartnerSearchNetwork>
         
</networkSetting>
       
</campaignEstimateRequests>
     
</selector>
   
</get>
 
</env:Body>
</env:Envelope>



Incoming request:

     
<ns2:requestId>000572c132e60fd00a563c82ac041477</ns2:requestId>

     
<ns2:serviceName>TrafficEstimatorService</ns2:serviceName>
     
<ns2:methodName>get</ns2:methodName>
     
<ns2:operations>1</ns2:operations>

     
<ns2:responseTime>899</ns2:responseTime>

   
</ResponseHeader>
 
</soap:Header>
 
<soap:Body>
   
<getResponse xmlns="https://adwords.google.com/api/adwords/o/v201806" xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201806">
     
<rval>
       
<campaignEstimates>
         
<Estimate.Type>CampaignEstimate</Estimate.Type>
         
<adGroupEstimates>
           
<Estimate.Type>AdGroupEstimate</Estimate.Type>
           
<keywordEstimates>
             
<Estimate.Type>KeywordEstimate</Estimate.Type>
             
<min>
               
<averageCpc>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>

                 
<ns2:microAmount>3040634</ns2:microAmount>
               
</averageCpc>
               
<averagePosition>4.2910828667503695</averagePosition>
               
<clickThroughRate>0.06716729299115354</clickThroughRate>
               
<clicksPerDay>135.25752</clicksPerDay>
               
<impressionsPerDay>1812.3666</impressionsPerDay>

               
<totalCost>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>

                 
<ns2:microAmount>456965056</ns2:microAmount>

               
</totalCost>
             
</min>
             
<max>
               
<averageCpc>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>

                 
<ns2:microAmount>3716330</ns2:microAmount>
               
</averageCpc>
               
<averagePosition>3.510885812783549</averagePosition>
               
<clickThroughRate>0.0820933620543558</clickThroughRate>
               
<clicksPerDay>165.31474</clicksPerDay>
               
<impressionsPerDay>2215.1147</impressionsPerDay>

               
<totalCost>
                 
<ns2:ComparableValue.Type>Money</ns2:ComparableValue.Type>

                 
<ns2:microAmount>558512896</ns2:microAmount>

               
</totalCost>
             
</max>
           
</keywordEstimates>
         
</adGroupEstimates>
       
</campaignEstimates>
     
</rval>
   
</getResponse>
 
</soap:Body>
</soap:Envelope>
marrakech.png
new-york.png

Nadine Sundquist (AdWords API Team)

unread,
Aug 6, 2018, 3:18:31 PM8/6/18
to AdWords API and Google Ads API Forum
Hello Sebastian,

Your hunch was correct. I've found out after some digging that there seems to be a known issue about this. It sounds like there isn't a short-term fix. Your requests are returning incorrect results even though we both send in the same request. There is some path through the code that triggers an issue, and you seem to be hitting it. I asked for a workaround, but there doesn't seem to be one. If I hear of one, I'll get back to you. I believe that a solution would take quite awhile to happen.

Regards,
Nadine, AdWords API Team

Sebastian Razola

unread,
Aug 7, 2018, 3:31:33 AM8/7/18
to AdWords API and Google Ads API Forum
Wait what?! So basically the TrafficEstimatorService is broken and people at Google are aware of it? If so, why is it not closed down until it's fixed? People take business decisions based on this faulty data.

I would really appreciate if you found a workaround. If not, is there anyway to follow this issue so that I would know if it has been fixed.

Nadine Sundquist (AdWords API Team)

unread,
Aug 7, 2018, 8:57:18 AM8/7/18
to AdWords API and Google Ads API Forum
Hi Sebastian,

That was my reaction, which is why I've increased the priority, and I'm hunting down people with answers. We've narrowed down the issue that it has nothing to do with parameters you and I can control, but rather some other metadata that automatically gets populated. I'm hopeful, though, because if I can get the correct numbers on your account, then there must be a path through to fix this. I'll keep you updated as I hear more.

Cheers,
Nadine, AdWords API Team

Sebastian Razola

unread,
Aug 7, 2018, 5:12:05 PM8/7/18
to AdWords API and Google Ads API Forum

Ok. Glad to hear you're on it. Thanks for the assistance and godspeed!

sh...@keywordio.com

unread,
Jan 7, 2019, 7:57:45 PM1/7/19
to AdWords API and Google Ads API Forum
Hey, I was facing similar issue while accessing data from TrafficEstimatorService. I wanted to know if there are any updates.
Should we be using the API which maps the older keyword planner and can those results be used to take business decisions?
What are the updates on the new API?

Nadine Sundquist (AdWords API Team)

unread,
Jan 8, 2019, 4:46:23 PM1/8/19
to AdWords API and Google Ads API Forum
Greetings!

The new Google Ads API matches more with the new UI that was released.  The Keyword Planning services were added to the release in November. The API is still in Beta so I wouldn't recommend it for production use, yet, but we're encouraging people to start coding towards the new API. I don't have an exact date yet as to when we'll release for production use, but we are working as quickly as we can towards that goal. 

Cheers,
Nadine, Google Ads API Team
Reply all
Reply to author
Forward
0 new messages