EDIT 2013-03-18: I added DESC to the .orderBy() clause so that it orders the impressions from highest to least.
I was reading a post on SearchEngineLand.com the other day about storing and analyzing your account level quality score.
The Author of the article provided a script, but I figured I could come up with my own version pretty easily. In the following script, I am using the same logic to calculate the account level quality score but I am looking at all campaigns and all keywords with an impression in the last 30 days.
Depending on your account size, this might be too much data to analyze in the 30 minute limit imposed by AdWords, but ordering by impressions should get you the top 50000 (again, another AdWords limit) keywords with impressions.
You can find the spreadsheet I am storing data in here: https://docs.google.com/spreadsheet/ccc?key=0Aotb6eheEOpodGNKMW1UWkZKekc5NWxkR3Zra3lzWVE
Your best bet is to copy that sheet, erase my data (except the headers) and copy the new spreadsheet url into the script. If you have multiple accounts that this will run in, you can store the data in the same spreadsheet but add additional tabs for the account name. Then update the ACCOUNT_NAME variable and you should be all set.
Thanks,
Russ
/*************************************** * Store Account Level Quality Score in Google Spreadsheet. * Version 1.1 * ChangeLog v1.1 * - Changed ACCOUNT_NAME to SHEET_NAME and updated the default value. * - Removed getSpreadsheet function * * Created By: Russ Savage * Based on script originally found at: http://goo.gl/rTHbF * FreeAdWordsScripts.com *********************************/ function main() { var SPREADSHEET_URL = "Your Spreadsheet Url Goes Here"; var SHEET_NAME = 'Sheet1'; var today = new Date(); var date_str = [today.getFullYear(),(today.getMonth() + 1),today.getDate()].join("-"); var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL); var qs_sheet = spreadsheet.getSheetByName(SHEET_NAME); var kw_iter = AdWordsApp.keywords() .withCondition("Status = ENABLED") .forDateRange("LAST_30_DAYS") .withCondition("Impressions > 0") .orderBy("Impressions DESC") .withLimit(50000) .get(); var tot_imps_weighted_qs = 0; var tot_imps = 0; while(kw_iter.hasNext()) { var kw = kw_iter.next(); var kw_stats = kw.getStatsFor("LAST_30_DAYS"); var imps = kw_stats.getImpressions(); var qs = kw.getQualityScore(); tot_imps_weighted_qs += (qs * imps); tot_imps += imps; } var acct_qs = tot_imps_weighted_qs / tot_imps; qs_sheet.appendRow([date_str,acct_qs]); }