QualityScore Field in KEYWORD_PERFORMANCE_REPORT is zero

181 views
Skip to first unread message

sebastia...@despegar.com

unread,
Jun 28, 2016, 10:45:47 AM6/28/16
to AdWords API Forum

Hello AdWords,


According to this page, the QualityScore field returns an integer in the range [1-10]. But this is not always true. I am getting the value 0 for some keywords.


I would like to know what this value means and whether it will change in the future -so it is compliant with the documented values- or not.


Thanks!

seb.






Vishal Vinayak (Adwords API Team)

unread,
Jun 28, 2016, 3:26:01 PM6/28/16
to AdWords API Forum
Hi Sebastian,

That is correct, indeed. Quality score of a keyword ranges from 1 to 10. If you are trying to extract data using the Keyword Performance Report and the quality score information is missing for a keyword, a "--" value might be returned. 

To debug further, could you please provide me with the report definition for the API call? Please click on Reply privately to author when responding.  

Regards,
Vishal, AdWords API Team

Zweitze

unread,
Jun 29, 2016, 7:33:20 AM6/29/16
to AdWords API Forum
The documentation is incorrect, the field returns the quality score (from 1 to 10), or 0 in case there is no quality score.
Indeed, some keywords have no quality score, think of display network, dynamic search ads, negative keywords and removed keywords.

Note that the behavior changed in v201605, from that version on you get "--" instead of 0. But you reference documentation of v201601, so I assume you are using that version.

Hope this helps.

sebastia...@despegar.com

unread,
Jun 29, 2016, 7:48:23 AM6/29/16
to AdWords API Forum

Quality score of a keyword ranges from 1 to 10. If you are trying to extract data using the Keyword Performance Report and the quality score information is missing for a keyword, a "--" value might be returned.
I agree with @Zweitze. This is what the documentation says starting from v201605, but I am using v201601. So the documentation is incorrect. Most importantly, if I were to migrate to version v201605, I would have a complete mess because this change is not annotated at all in any migration guide.

The report definition I am using is the following:

<reportDefinition xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201601">
    <ns2:selector>
        <ns2:fields>Id</ns2:fields>
        <ns2:fields>AdGroupId</ns2:fields>
        <ns2:fields>CampaignId</ns2:fields>
        <ns2:fields>AdGroupName</ns2:fields>
        <ns2:fields>Criteria</ns2:fields>
        <ns2:fields>KeywordMatchType</ns2:fields>
        <ns2:fields>Status</ns2:fields>
        <ns2:fields>AdGroupStatus</ns2:fields>
        <ns2:fields>CampaignStatus</ns2:fields>
        <ns2:fields>CpcBid</ns2:fields>
        <ns2:fields>FirstPageCpc</ns2:fields>
        <ns2:fields>QualityScore</ns2:fields>
        <ns2:fields>ExternalCustomerId</ns2:fields>
        <ns2:predicates>
            <ns2:field>Id</ns2:field>
            <ns2:operator>NOT_EQUALS</ns2:operator>
            <ns2:values>3000000</ns2:values>
        </ns2:predicates>
        <ns2:predicates>
            <ns2:field>IsNegative</ns2:field>
            <ns2:operator>EQUALS</ns2:operator>
            <ns2:values>false</ns2:values>
        </ns2:predicates>
        <ns2:predicates>
            <ns2:field>Impressions</ns2:field>
            <ns2:operator>GREATER_THAN</ns2:operator>
            <ns2:values>0</ns2:values>
        </ns2:predicates>
        <ns2:dateRange>
            <ns2:min>20160608</ns2:min>
            <ns2:max>20160608</ns2:max>
        </ns2:dateRange>
    </ns2:selector>
    <ns2:reportName>2016-06-29_08:37:45.698</ns2:reportName>
    <ns2:reportType>KEYWORDS_PERFORMANCE_REPORT</ns2:reportType>
    <ns2:dateRangeType>CUSTOM_DATE</ns2:dateRangeType>
    <ns2:downloadFormat>TSV</ns2:downloadFormat>
    <ns2:includeZeroImpressions>false</ns2:includeZeroImpressions>
</reportDefinition>


I'll reply to you privately, Vishal, to send you the customer id.

Zweitze

unread,
Jun 29, 2016, 9:52:04 AM6/29/16
to AdWords API Forum
Could you just post the rows with a zero-quality score here? If necessary blank out ExternalCustomerId, which is your customer id (but I don't think anyone outside Google can figure out the account name having just this customer id.)

Looking at your predicates I bet one of the following is the case:
- The keyword status is removed, or possibly the group it belongs to is removed, or the campaign it belongs to is removed.
- The keyword id is 3000006, and the keyword itself is "AutomaticContent".
- The keyword id is 3000004, and the keyword itself is "AutomaticKeyword"

About those magical keyword ids: 3000006 is Dynamic Search Ad. 30000004 is something that appeared in 2008 through 2010. I collected these number through years of reading on this forum (eg. like this, note the Google representative doesn't deny the findings)
It's a shame those reserved ids were never properly documented.

If you do figure out what was happening, will you share that with us? I don't like the current policy where solutions and explanations are taken to private email, and out of this forum.

sebastia...@despegar.com

unread,
Jun 29, 2016, 12:56:07 PM6/29/16
to AdWords API Forum
@Zweitze:

For safety reasons, the company I work for -which owns the accounts I manage- does not share this information. However, I can confirm that the keywords we found are real keywords. They are not "magical keywords."

By the way, your feedback is highly appreciated! I've always wondered whether it was futile to keep filtering the magical keywords.

And don't worry, I'll post the explanation the AdWords staff give me once the issue is solved. (Otherwise, I would not have posted the previous report definition.)

Zweitze

unread,
Jun 30, 2016, 5:01:43 AM6/30/16
to AdWords API Forum
I looked into our database and indeed found more keywords with a zero qualityscore.
Looking further I found that they all belonged to an campaign with advertising channel "Display" or "Video". So, consider filtering on that.

Unfortunately field "advertisingchanneltype" is not available in KEYWORDS_PERFORMANCE_REPORT (at least in v201601, which I am using). However, that field is available in CAMPAIGN_PERFORMANCE_REPORT, so you should do the filtering on your end.

Is this also the case for you?

sebastia...@despegar.com

unread,
Jun 30, 2016, 7:14:21 AM6/30/16
to AdWords API Forum

Thanks for the follow-up, Zweitze. In the case that raised our alarms, one of the things you said previously is true: all the keywords with QS zero are either removed, or its adgroup/campaign is removed. But this is just one account. Unfortunately, the tables derived from our database are not including other keywords with QS zero because we were filtering them out based on what the documentations says (that lie that QS was always in range [1-10].)

Still no answer from Google representatives.

Nadine Sundquist (AdWords API Team)

unread,
Jun 30, 2016, 7:05:02 PM6/30/16
to AdWords API Forum
Greetings Everyone,

I agree that our documentation is not up-to-date, and we'll work on getting that updated soon. Thank you for pointing that out. There have been some changes recently, which is why I think there's a bit of confusion. For Display and Video campaigns, a QualityScore of 0 is a possibility, but 0 shouldn't be coming up for Search campaigns. As you noticed in the release notes, we're moving to changing null values to '--' instead of other values, and we've been doing that across all the reports. Thanks again for being so helpful!

Cheers,
Nadine, AdWords API Team

sebastia...@despegar.com

unread,
Jul 1, 2016, 1:26:43 PM7/1/16
to AdWords API Forum
Hello Nadine, I still have some questions:

  • I now see that in this migration guide this change is explained. Thank you very much! I'm glad I could help.
  • "For Display and Video campaigns, a QualityScore of 0 is a possibility, but 0 shouldn't be coming up for Search campaigns." OK. But they are. I am getting SEARCH keywords with QS = 0. Can you determine what is the reason for this? I would need an explanation so I can correct some rows from our database tables.

sebastia...@despegar.com

unread,
Jul 5, 2016, 7:03:05 AM7/5/16
to AdWords API Forum
Nadine, Vishal... Can you help me or not?

sebastia...@despegar.com

unread,
Jul 5, 2016, 11:05:42 AM7/5/16
to AdWords API Forum

I have found search keywords with impressions in the last year with QS zero across many accounts. However, for all of them one of the following is true:
  • The keyword is removed
  • The adgroup is removed
  • The campaign is removed
Can you please confirm this on your side? The fact that if a search keyword has QS zero it is because it was removed (at least with v201601.)

Anash P. Oommen (AdWords API Team)

unread,
Jul 6, 2016, 1:36:42 PM7/6/16
to AdWords API Forum
Hi Sebastian,

Could you please share one or more (campaign ID, ad group ID, keyword) where this is happening? Also, have you noticed any instance where the value is zero and the keyword is not deleted?

Cheers,
Anash P. Oommen,
AdWords API Advisor.

sebastia...@despegar.com

unread,
Jul 6, 2016, 1:53:55 PM7/6/16
to AdWords API Forum
Could you please share one or more (campaign ID, ad group ID, keyword) where this is happening?
I replied to you privately sending a csv report.


Also, have you noticed any instance where the value is zero and the keyword is not deleted?
Not that I know of, but I can't completely discard it could happen.

Anash P. Oommen (AdWords API Team)

unread,
Jul 6, 2016, 4:13:17 PM7/6/16
to AdWords API Forum
Hi Sebastian,

Thanks for sharing the report; I've shared it with the team working on this change. I'll update you as I hear from them.

Cheers,
Anash P. Oommen,
AdWords API Advisor.

sebastia...@despegar.com

unread,
Jul 13, 2016, 2:50:02 PM7/13/16
to AdWords API Forum
Vishal, Nadine, Anash, any news?

Anash P. Oommen (AdWords API Team)

unread,
Jul 15, 2016, 10:08:08 AM7/15/16
to AdWords API Forum
Hi Sebastian,

Looks like we don't track quality score for deleted entities, that's why those are getting reported as zero. I'll take a look at our guide and update it with missing information.

Cheers,
Anash P. Oommen,
AdWords API Advisor.

sebastia...@despegar.com

unread,
Jul 15, 2016, 1:52:06 PM7/15/16
to AdWords API Forum
Thanks for answering Anahs,

"Looks like" doesn't do it for me. I'll mark your answer as the correct one once I see it in the docs (here or here), if that is possible.

sebastia...@despegar.com

unread,
Jul 19, 2016, 8:55:21 AM7/19/16
to AdWords API Forum
Looking at your predicates I bet one of the following is the case:
- The keyword status is removed, or possibly the group it belongs to is removed, or the campaign it belongs to is removed.
- The keyword id is 3000006, and the keyword itself is "AutomaticContent".
- The keyword id is 3000004, and the keyword itself is "AutomaticKeyword"

The documentation is still incorrect.
Looking deeper into this issue I found all the cases that Zweitze mentioned. The QS is zero in at least all those cases.
I find it very misleading that the documentations says the value is always either "--" or a number in range [1 ; 10]

Anash P. Oommen (AdWords API Team)

unread,
Jul 19, 2016, 2:30:49 PM7/19/16
to AdWords API Forum
Hi Sebastian,

I'll work on updating the docs, meanwhile here's the behaviour for your reference.

1) QS is (still) a number in the range 1-10.
2) Starting v201605, you get -- if there's no quality score information for a keyword. HasQualityScore will be set to false in this case.
3) You may get 0 for quality information in some cases, but it is equivalent to (2). The keyword has no quality score information, and HasQualityScore will be set to false.

You can use the HasQualityScore to interpret this correctly. If HasQualityScore = TRUE, then you can interpret the quality score information. If the column is false, then no quality score information is available. This is covered in our advanced reporting guide.

Cheers,
Anash
Reply all
Reply to author
Forward
0 new messages