Tag Archives: Text Ads


Enhanced Script: Ad Template Report


This AdWords Script produces a report of the various elements of your ad texts. It aggregates data for commonly used headlines, URLs and description lines, and also for entire ads that you use in multiple places in the account.


Example Use Cases

  • Find the best performing ad text elements in your AdWords account
  • Find the best headline, description or display URL for new ad texts
  • Get enough data to make statistically valid decisions about ad text performance by aggregating data from similar ads across an entire account.

Settings and Customizations

Please refer to the script download page for the settings.

Get This Script

You can run this script from the Enhanced Scripts™ section in your Optmyzr account.


Turn a spreadsheet into AdWords ads

Enhanced Script: Create Ads From a Spreadsheet

This script has been replaced by the Campaign Automator, a stand-alone solution from Optmyzr that is ideal for creating and maintaining a Google Ads account from your business data. Contact our team for a free trial.


This AdWords Script automatically creates ad groups, ad texts, keywords and labels based on your template and a spreadsheet of your data. It can be used to turn a product database into an AdWords account or it can be used as an alternative to the AdWords interface or the AdWords Editor for creating new ads. Because the code can be easily modified, it is also more flexible than most solutions that involve the AdWords API.

Turn a spreadsheet into AdWords ads
Turn any Google Spreadsheet into AdWords ads using the template you define in our AdWords Script.

Example Use Cases

This AdWords automation is useful for a wide range of use cases:

  • Advertisers who already have a spreadsheet of all their services and products can use this to build out an account with great structure that will benefit your quality score.
  • Agencies who work with a lot of clients in the same vertical and who have a well defined best practice for building out new accounts can use this to speed up new account creation.
  • Advertisers whose inventory changes frequently can use this to tie their ad creation directly to their backend.
  • Agencies who create Google Merchant Feeds can use this to add a value-add service where they use the feed to create AdWords ads for their clients.

Settings and Customizations

  • SOURCEDATA tells the script the location of the Google Spreadsheet that contains your data.
  • NAMEOFDATASHEET tells the script the name of the sheet in the spreadsheet that contains the data. A spreadsheet can contain multiple sheets and this lets the script know which one to use.
  • EMAILADDRESS tells the script the email addresses that should get a notification when it finishes creating ads. To send to multiple recipients, separate the email addresses with a comma. Do NOT include the name of the person... only include their email address.
  • ACCOUNTNAME is used by the script to create the subject line of the email it sends. When you're using this script on multiple accounts, it makes it easier to know which account each email notification is about.

Under The Hood

The script will automatically add a new column called "Added to Accounts" to your Google Spreadsheet. When it creates an ad using this row of the spreadsheet, it adds the account ID in this column. The next time the script runs, it will skip this row. This is useful to prevent adding duplicate ad texts and to make the script faster, for example by only making ads for rows you added to the sheet since you last ran it.

 How To Use The Script To Generate Ads Automatically


Get This Script

This script is deprecated and has been replaced by the Campaign Automator, a stand-alone solution from Optmyzr that is ideal for creating and maintaining a Google Ads account from your business data. Contact our team for a free trial.

Remove Underperforming Ads


This script helps you keep only the best performing ad variations in your account by removing underperforming ads. Google can automatically show your best performing ads more frequently but it's always a good idea to prune your account and remove ads that are not performing well. Ideally you should always have at least 2 ads running so that you can test which variation is better.

Example Use Cases

  • Reduce all ad groups in an account down to the 2 best active ad texts before doing new ad variation testing
  • Clean up underperforming ads in an account you just started to manage
  • Run a monthly cleanup of all ad variation experiments you started at the beginning of the month

Settings and Customizations

Replace the following variables with your own values: campaignSelectorStatement, deleteAds, pauseAds, email, minAdsToKeepPerAdGroup, suggestMode, time

campaignSelectorStatement (required)

The campaignSelectorStatement tells the script on which campaigns to operate. It uses the syntax from AdWords Scripts for .withCondition(condition)

  • For example, to operate on all campaigns in an account use: CampaignName CONTAINS_IGNORE_CASE ''
  • To work only on the campaign named "Campaign #1" use: CampaignName = 'Campaign #1'

deleteAds and pauseAds (required)

These variables tell the script if you want to delete or pause the lowest performing ads. Set one to a value of 1 and the other to a value of 0

minAdsToKeepPerAdGroup  (required)

This variable tells the script the minimum number of ads to keep in each ad group. If you set this value to 2, then the script will only pause or delete ads if there are at least 3 ads in the ad group. We recommend starting with a value of 2

suggestMode  (required)

This variable tells the script if it should make changes in the account or not. If set to 1, ads will be paused or deleted based on your specifications. If set to 0, then the script's output log will include an overview of its recommendations but no changes will be made. We recommend first running the script in suggestMode and only turning this off after you've read through the recommendations and are satisfied that it is making sensible suggestions.

time  (required)

This variable tells the script the time range of data to use to make its decisions. This should be long enough to have at least 100 impressions per ad group and 25 impressions per ad text but not so long that the time range spans a period of time when a lot of ad text changes were made in the account. We recommend using a value of last 14 days or last 30 days.

Allowed values are one of the following as specified in the AdWords Scripts documentation for selecting time ranges:

  • LAST_14_DAYS
  • LAST_30_DAYS


Under The Hood

This script looks through all the active text ads in an account or a set of campaigns and suggests the ones that should be removed based on what share of impressions Google's algorithm is giving each ad. Ads that get a disproportionally low percentage of impressions are Google's way of saying the ads are not optimal so we remove these by pausing or deleting them. Because we don't want to remove an ad that Google doesn't like if it's a big contributor to your clicks or conversions, the script won't suggest any of these for removal.


The script cannot see when ads were paused or activated so it can't do a perfect apples-to-apples comparison. It assumes that all ads in an ad group were active for the same amount of time. This means that if you run the script using a 14-day lookback window and there is an ad in the ad group that you created yesterday, that ad will have a very low 'percent served' value purely because it was only able to compete with the other ads for 1 out of 14 days. In this case, the script would incorrectly believe this was a bad ad and remove it. To avoid this situation, only run the script on ad groups that have not had any ad changes during the period of time used for the analysis.

Download Script