Split Test Your Way To Wins

Any experienced marketer will tell you that constant split testing is the key to achieving ROI in your campaigns.

Sadly, many of those same marketers don’t practice what they preach.

I’ve used the below AdWords script long before the guys at Hanapin Marketing released a similar script over at the PPC Hero blog to help me stay on top of split testing my ads weekly and to also disable ads for poor performance.

The measuring of results within this script is based on the last 30 days of data, and on Conversions Rate ( since ads can have a huge impact on qualifying your leads ).

This script could easily be modified to pick the winning ad based on CTR or other metrics that are available within the AdWords script protocol.

Important things to know:

Only runs in adgroups with more than 1 active ad.

Makes changes only if ads have more then 100 clicks in last 30 days.

You can change the 100 clicks metric to impressions or conversions.

I wouldn’t suggest changing the date range from less than 30 days.

If you have low volume campaigns or very poor performing ads within your adgroup, this script may never declare a winner as you may never accumulate 100 clicks within any 30 day window. If this happens to be the case with your campaigns, you may need to lower the amount of clicks needed or extend the date range.

This script is currently being used in AdWords campaigns for several clients in the lead generation space with a $3MM annual PPC budget, so it should work flawlessly out of the box for you.

Inside the AdWords interface, navigate to ”Bulk Operations” -> “Create and manage scripts” and create a new script. Then copy and paste the below code into the form.

Be sure to set it to run “Weekly” so that you have more free time to focus on other aspects of your campaigns.

// Comma-separated list of recipients. var RECIPIENT_EMAIL = 'example@example.com'; //This scipt list all the Ad Groups with only one Ad Text. //A/B testing for Ads is essential to improve CTR function main() { var consoleText = ""; var numOfAdGroups = 0; var justOneAdText = 0; //Get All Enabled Campaigns //It's just because to help list the AdGroups grouped by Campaign //The list will be ordered by Impressions to see the most important Ad Groups first var campaignIterator = AdWordsApp.campaigns() //.withCondition("CampaignName CONTAINS_IGNORE_CASE 'XXXX'") .forDateRange("LAST_30_DAYS") .orderBy("Impressions DESC") .withCondition("Status = ENABLED") .get(); while (campaignIterator.hasNext()){ var campaign = campaignIterator.next(); //Get All Enabled AdGroups within the Campaign var adGroupIterator = AdWordsApp.adGroups() .withCondition("CampaignName CONTAINS_IGNORE_CASE '" + campaign.getName() + "'") .withCondition("Status = ENABLED") .get(); while (adGroupIterator.hasNext()){ var adgroup = adGroupIterator.next(); var adTextNum = 0; //Get All Enabled Ad Text within the Ad Group var adIterator = AdWordsApp.ads() .forDateRange("LAST_14_DAYS") .orderBy("ConversionRate DESC") .withCondition("AdGroupName CONTAINS_IGNORE_CASE '" + adgroup.getName() + "'") .withCondition("CampaignName CONTAINS_IGNORE_CASE '" + campaign.getName() + "'") .withCondition("Status = ENABLED") .withCondition("Clicks > 19") //.withCondition("Conversions >= 1") .withCondition("Status = ENABLED") .withCondition("Type = TEXT_AD") .get(); while (adIterator.hasNext()) { var ad = adIterator.next(); //Increase the adTextNum if a Text Ad found. adTextNum++; } if(adTextNum > 1){ Logger.log( adgroup.getCampaign().getName() + ", " + adgroup.getName() + ", has one or less active Ad Text. " + ad.getHeadline() ); ad.pause(); } justOneAdText++; } } // Logger.log('Ad Text report finished.'); }

× HEY YOU.

Share This Post On Facebook Or Twitter Below. Thanks!