Posted by & filed under Expanded Text Ads, Karooya's AdWords Scripts.

All ads are not created equal. When you create multiple ads in an ad group, there are certain hypotheses you go with. You may wish to emphasize on call to action in one ad. You may highlight different USPs in different ads. You may want to talk about the offers on certain products and services.  You want to put those ads out there see which ones resonate with your audience the most. You may not know which ads will perform the best or how much better the best ad(s) can perform compared to other.


ad performance adwords script


In an AdWords account, running poor performing ads can drag your performance in variety of ways.

  • Your budget is being wasted on ads that are not bringing enough customers.
  • Winning ads are starved of impressions. Better ad is right there, but is not being enough chance.
  • If your competitors are running their best ad, they can raise their bids and in turn raise your CPCs as well.

Having multiple ad copies for A/B testing and rotating the ads delivery is a common practice to get better ads being shown frequently. But, making sure that a methodology is in place to pause the bad ads is another practice that you should follow. While there is no benchmark set for the number of ad copies that must run in an ad group, knowing which ones are eating away major chunk of your ad budget without delivering is worth knowing.


We have come up with an AdWords script to help you analyze your account for the winning and poor performing ads.


This script pulls ads performance data from your AdWords account and recommends one of the following – (a) You should pause the ads that are performing poorly. (b) You can pause all ads except the ones that are proven to be the winners. (c) You can reactivate some of your better performing ads. The ads will be highlighted as per following color code


adwords performance script params


When the script is complete, it will create a folder named “Ads Performance Reports” in your Google Drive.  The drive will contain the result sheet which has same name as your AdWords account’s name along with the Customer ID for that account.


Right at the top, you will get the summary of the recommendations. The summary shows an extrapolation of improvement you can achieve if you run only your best ads. (Click on the image to view bigger, easily readable image.)




After the summary, you will see recommendations for each ad group. The ad that delivers highest number of conversion for given impressions is chosen as the winner. Statistical significance is also shown for the winning ad.


AdWords script to find best ads




Taking Action on the Results

The script will not make any changes to your account. Once you run the script, you will get a result sheet as shown above. Now, you can use the AdWords web interface or the AdWords Editor to pause the ads that are not performing well.



How to use the Ad Performance AdWords Script?

Now that you know what the AdWords script can do, let’s talk about the script. You can get this script here. If you are in a hurry, run this script and see the results in your Google Drive in the folder named “Ads Performance Reports.” You can schedule this script to run every week or every month so that it becomes part of your routine. If you are scheduling the script, you should change the SEND_EMAIL_ALERT variable.


For those who want to understand more about this script, here we go.  Here are the variables that you can change to customize it to your requirement.

  • REPORTS_FOLDER_PATH: This is the name of the folder that gets created in your Google drive. By default the name is ‘Ad Performance Report’. If you wish to change the name you can do so here.
  • MAX_ADGROUPS :This variable specifies number of top ad groups to be included in the report.  By default, this report is generated for top 100 ad groups in the account, by spend.That is, the report is generated for top 100 ad groups, by spend. You can increase this limit, if you are running a large account. From our experiments, we have see that it takes approximately one second to process one ad group. Increasing this limit will make the script run longer. A script can run for a maximum of 30 minutes, which means, about 2000 ad groups will be processed at a maximum.
  • DATE_RANGE: You can use some pre-defined ranges like LAST_30_DAYS or LAST_14_DAYS. By default, the script will get the data for last 30 days.
  • USE_CUSTOM_DATE_RANGE: If you want a particular date range to be used then, set this flag to “true” and modify the START_DATE and END_DATE to indicate the date range. The date format is “yyyy-mm-dd” aka “Year-Month-Date.” For example, if you want a report for 3 months from 1st January, 2017, the START_DATE would be “2017-01-01” and END_DATE would be “2017-01-31.”  This is useful if you want to use historical data for better accuracy.
  • SEND_EMAIL_ALERT: If you wish to receive an e-mail alert for any new recommendation then set the flag to true which is by default set as false.  This is useful if you have running script at regular interval via a schedule.
  • EMAIL_RECIPIENT: If the above variable is set to true, then you need to add the e-mail id on which you wish to receive the alerts about new recommendations.
  • IGNORE_PAUSED_CAMPAIGNS, IGNORE_PAUSED_ADGROUPS, IGNORE_PAUSED_ADS: These flags indicate to ignore paused campaigns, ad groups and ads. By default, campaigns and ad groups are set to true i.e. all the paused campaigns and ad groups are ignored, however, ads are set as false i.e., all the paused ads with impressions are looked into too.
  • MIN_CONFIDENCE_LEVEL_TO_DECLARE_WINNER_AD: The default value is set as 0.9 or 90% to define a winning ad, if you wish to alter this value you can do so here. If you want a higher confidence of, say 95%, set the value to 0.95.
  • IS_MCC_ACCOUNT : This flag is to indicate whether you will be running this script at MCC-level. By default, it is set to false. Change it to “true” if you want to use for all the linked accounts in your MCC account. The results for each account will be stored in a separate sheet. Be careful, if you have many many accounts.
  • FILTER_ACCOUNTS_BY_LABEL : If your MCC account has tons of linked accounts, you may not want to run this script for all the accounts. In that case, turn this flag to “true” and then specify the label with ACCOUNT_LABEL_TO_SELECT variable. Only the accounts with the specified label will be analyzed to generate this report.


Once again, here is the link to Ads Performance AdWords script.


Feel free to send us an email (support AT if you have any queries for this AdWords script.


If you are looking for more, here are the AdWords scripts published by Karooya.


Related Links:

15 Responses to “AdWords Script to Find Poor Performing Ads”

  1. Jerry

    Hi Shashikant,

    Thanks for this great script.

    Wanted to check on this error – The coordinates or dimensions of the range are invalid. (line 652).

    Do you have a workaround?


    • Sachin Doshi

      Although we haven’t seen that error yet, one scenario that I can think of when such an error can occur is ‘when there are very large number of ads’. Is that the case with your account? Did you try excluding the disabled ads? You can do so by setting the variable IGNORE_PAUSED_ADS=false;

      Could you please share a little more information about your account such as number of campaigns, Adgroups and ads? Do you see any other warning/error in the Logs while executing the script?

  2. Ed Goss

    This is great! I’ve always been hesitant to install an automated ad testing scripting into my MCC because it takes away too much control. This is perfect since it just provides actionable insights without changing anything. Will help tremendously… now I just have to get this “carefully” installed when I have time to focus on it.

    • Shashikant


      This script does not take away any control. It enables you to run automated ad tests in a faster and easier way. This script will not do any changes whatsoever to your accounts.

      The only thing this script takes away is hours of manual labor spent on fidgeting with spreadsheets.

      Go ahead, install it without any fear.

  3. Ed Goss

    The script generally works great, except that quite a few accounts in my MCC aren’t showing up in reports. I have tried increasing the ad groups, specifying a label to reduce to just the accounts I need reports on, and no change. Your script runs in a few minutes, so it is not timing out. I have also checked user access, there is no difference between the way I am connected to working and non-working accounts (client manager). These accounts are included in other MCC scripts I run. Any idea why some accounts simply aren’t included in your reports?

    • Sachin Doshi

      Hello Ed,

      Thank you for bringing it to our notice. The log messages that you shared over email helped us to identify and fix couple of bugs. You can now download the updated script from the same location as above.

      Please, do let us know how it works for all the accounts this time.

  4. Ed

    Thanks for the great/fast support on a FREE script. The script is working perfectly now. This will be a big help for my AdWords team and clients!

  5. Bene

    Wow- what a cool script. I really like it. I have one question: as the winner is chosen by “conv per 100 Impr” it is very lead oriented.
    How can I adjust it to a reach approach so that CTR is the critical metric an all calculations a made on CTR?
    Thanks for help.

    • Shashikant

      Hi Bene,

      You may try changing the following

      function computeConvPerImpr(ad) {
      return (cleanAndParseFloat(ad[‘Conversions’]) * 100.0 / cleanAndParseInt(ad[‘Impressions’]));

      to this.

      function computeConvPerImpr(ad) {
      return (cleanAndParseFloat(ad[‘Ctr’]);

      See if it works for you then.

      • Mary

        for this change, do you not need to adjust the “function computeConvPerImp” part since it seems to be looking at conversions per impression still?

        • Shashikant

          Hi Mary,

          Changing the function “computerConvPerImp” should make the script compute the winners based on different parameter.

          Please send us an email if you need any help.

  6. Yang Jieyu

    Hi Shashikant,

    Would like to check – is it possible to take conversion rate as the main point of comparison. Following which, if there are no conversions, the script uses click through rate as the main comparison?



  7. TCO23

    Worked fine until this week. I’m getting an error about UNSUPPORTED_VERSION: RequestError.UNSUPPORTED_VERSION. (line 564)

    return, API_VERSION);

    • Sachin Doshi

      Hello TCO23,

      Please use the latest script (re-download the script from same link mentioned as above). We have recently updated the script to use the newest AdWords APIs. So, it should resolve the UNSUPPORTED_VERSION error for you.

      For All,
      Please also note that, now, the new script can be configured to generate recommendations to either improve Conversions or to improve Ctr (Check the variable named OPTIMIZE_FOR). The default option selected is OPTIMIZE_FOR=’CONVERSIONS’.

  8. Stephen Kimani Njuguna

    Accessing AdWord account: XXX MCC
    Fetching data from AdWords..
    Invalid reporting query: UNSUPPORTED_VERSION: RequestError.UNSUPPORTED_VERSION. (line 621)

    I get the following error in my logs and the data is not showing in the subsequent Google sheet which is created


Leave a Reply

Your email address will not be published. Required fields are marked *

Website Protected by Spam Master