<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Search Engine Land &#187; Frederick Vallaeys</title>
	<atom:link href="http://searchengineland.com/author/frederick-vallaeys/feed" rel="self" type="application/rss+xml" />
	<link>http://searchengineland.com</link>
	<description>Search Engine Land: News On Search Engines, Search Engine Optimization (SEO) &#38; Search Engine Marketing (SEM)</description>
	<lastBuildDate>Fri, 17 May 2013 21:49:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>How to Automate AdWords Ad Creation &amp; Landing Page Checks</title>
		<link>http://searchengineland.com/how-to-automate-adwords-ad-creation-landing-page-checks-158964</link>
		<comments>http://searchengineland.com/how-to-automate-adwords-ad-creation-landing-page-checks-158964#comments</comments>
		<pubDate>Thu, 16 May 2013 13:05:31 +0000</pubDate>
		<dc:creator>Frederick Vallaeys</dc:creator>
				<category><![CDATA[Channel: SEM]]></category>
		<category><![CDATA[Enterprise SEM]]></category>
		<category><![CDATA[Google: AdWords]]></category>
		<category><![CDATA[How To: SEM]]></category>
		<category><![CDATA[Search Ads: General]]></category>
		<category><![CDATA[adwords ad creation]]></category>
		<category><![CDATA[adwords automation]]></category>
		<category><![CDATA[AdWords Scripts]]></category>
		<category><![CDATA[landing page checks]]></category>

		<guid isPermaLink="false">http://searchengineland.com/?p=158964</guid>
		<description><![CDATA[Automating AdWords as much as possible is every advertiser’s dream, especially when dealing with the massive accounts we see in enterprise-level SEM. This article provides a few examples of how we at Top Tier Marketing have automated some of the more laborious tasks of running AdWords. Hopefully, these examples will give you some ideas for [...]]]></description>
				<content:encoded><![CDATA[<p>Automating AdWords as much as possible is every advertiser’s dream, especially when dealing with the massive accounts we see in enterprise-level SEM. This article provides a few examples of how we at Top Tier Marketing have automated some of the more laborious tasks of running AdWords.</p>
<p>Hopefully, these examples will give you some ideas for your own accounts. There’s even a full script that should work by simply copying it into your own account toward the end of this post.<b><b> </b></b></p>
<h2>Automate AdWords Ad Creation From Your Catalog</h2>
<p><div id="attachment_158965" class="wp-caption alignright" style="width: 222px"><img class="size-full wp-image-158965 " alt="Create AdWords Ads From Product Catalog" src="http://searchengineland.com/figz/wp-content/seloads/2013/05/Automated-AdWords-Ads-From-A-Database.png" width="212" height="309" /><p class="wp-caption-text">Flow for using your product database to create AdWords ads.</p></div></p>
<p>When the list of things you want to advertise is constantly changing, automating the creation of new ads and keywords can save you a lot of time, which you can then use to focus on higher value tasks.</p>
<p>Automatically created ads and keywords can run the spectrum from using one super simple template to hundreds of very sophisticated templates. The beauty of creating ads with AdWords Scripts is that you can start simple and get more advanced over time as you learn what works well and what doesn&#8217;t.</p>
<p>The problem with using a Script to create ads from a feed is that AdWords Scripts don’t yet support some of the JavaScript methods to connect to a database where you most likely have your catalog of everything you sell along with all the attributes you’d want to use in the ad template like price, size, reviews, etc. Without access to this data, you can’t build a script to take over the ad creation process.</p>
<p>There is a workaround, however: an AdWords Script can connect to a Google Spreadsheet; so, if you have the items for which you want to create ads in there, automation is within reach. And, it turns out that Google Spreadsheets have scripting functionality that supports functions to connect to databases like MySQL.</p>
<p>Grab the code from Google to <a href="https://developers.google.com/apps-script/jdbc" target="_blank">import your database into a Google Spreadsheet</a>.</p>
<p>To implement this workaround, create a Google Spreadsheet that will be the source of all the data that needs to go into your new ads; then, program this spreadsheet to connect to your database and import all the items you need.</p>
<p>Because a Google Spreadsheet has a limited amount of data it can contain, you’ll most likely have to filter the data you import. For example, you could fetch only those items that were updated in the past 24 hours or only items that have an ID number that’s greater than the last ID your script processed (you could store this either in the spreadsheet or in your DB where the script can request it before fetching new data).</p>
<p>Use Triggers in the script and program one to run automatically once per day so that all the data you need to make new ads will be up to date.</p>
<p>Once you&#8217;ve got your Google Spreadsheet script up and running, schedule your AdWords Script to run automatically on the hour and look for any items in the spreadsheet that haven’t been processed, turning these into new ads and keywords. (I recommend running the AdWords script more frequently because it may not be able to process all of the data if it runs only once per day.) Exactly how you templatize this is up to you, but you can do some really neat things.</p>
<p>For example, using a &#8220;discount&#8221;-themed template when an item is inexpensive and a &#8220;premium&#8221;-themed template for items that are pricier, allowing you to make sure your ad text really speaks to your potential buyer. We&#8217;ve done this for several of our clients, and they love the results and the time it saves them.</p>
<p>While Bing adCenter doesn&#8217;t have any scripting capabilities, they do have bulk uploads &#8212; so you can actually have the script you write for AdWords generate a <a href="https://resources.bingads.microsoft.com/AdvertiserUI/V1.0/Application/Templates/Import/ImportTemplateWithAdExtensions.xls">Bing bulk file</a> for manual upload later.</p>
<h2>Reduce Wasted Ad Spend On Bad Landing Pages</h2>
<p>It’s a no-brainer that your ads should include landing pages that actually load. Any time a user clicks your ad and gets a server error, it is like flushing money down the toilet. I&#8217;ve seen cases where users still convert after getting a 404 error, but they are the exception and had to work hard to find the right page on the site where they wanted to buy. Luckily, finding broken links in your AdWords ads is easy with an AdWords Script.</p>
<p>Here’s the code that checks for a server error and also for the presence of the words “out of stock” on the landing page. If it sees these words or the server is not responding with a code ‘200’ (which means that everything is okay), the ad is paused.</p>
<pre style="font-size: 11px">function main() {

 var options =
 {
   "muteHttpExceptions" : true
 };

 var campaignNameContains = "Campaign #1";
 var ifThisTextIsOnPageThenPauseAd = "out of stock";

 var adSelector = AdWordsApp.ads()
   .withCondition("Status = ENABLED")
   .withCondition("CampaignName CONTAINS_IGNORE_CASE '" + 
    campaignNameContains.replace(/[\[\]\"]/g, "") + "'");

 var adIterator = adSelector.get();

 while(adIterator.hasNext()) {
   var ad = adIterator.next();
   var adId = ad.getId();
   var urlToTest = ad.getDestinationUrl();
   var response = UrlFetchApp.fetch(encodeURI(urlToTest), options);
   if(response != undefined) {
     var responseCode = response.getResponseCode();
     if(responseCode == 200){
       var responseText = response.getContentText();
       if(responseText != "") {
         if(responseText.indexOf(ifThisTextIsOnPageThenPauseAd) != -1) {
           Logger.log("Pause the Ad:" + adId);
           ad.pause();
         } else {
           // Logger.log("Activate the Ad:" + adId);
           // ad.enable();
         }
       }
     } else if (responseCode == 404){
       Logger.log("Pause the Ad:" + adId + " (404 error)");
       ad.pause();
     }
   }
 }
}</pre>
<p>&nbsp;</p>
<h2>Detect Multiple Errors &amp; Save Time</h2>
<p>As you can see, this code doesn&#8217;t simply stop at checking for server errors. There are other reasons why a landing page could be bad and no longer worth advertising spend. Maybe the product has gone out of stock, is discontinued, or has received so many terrible reviews that virtually nobody wants to buy it anymore. Scripts can be told to look for specific text on landing pages that corresponds to each of these situations and then take the appropriate action, such as pausing the ad.</p>
<p>This automated process of going through thousands of destination URLs is really the only sensible way to prevent wasting money on ads that won’t convert. There are other tools that check for broken links, but they only provide you with a list of broken items and expect you to manually act on them.</p>
<p>Account managers’ time is much better spent on other tasks, and if you’re relying on a process that includes even a single manual step, you’re probably not doing as good a job as possible. When we recently ran this in the account of one of our clients, we instantly identified $4,000 worth of spend that would never lead to a sale. And, for a tool that’s free, saving $4,000 was quite the ROI!</p>
<p>Hopefully, this script for identifying and pausing bad landing pages and the ideas for how to tie your product database to an automated ad creation process has gotten your creative juices flowing, and you’ll create some great automation for your own accounts.</p>
]]></content:encoded>
			<wfw:commentRss>http://searchengineland.com/how-to-automate-adwords-ad-creation-landing-page-checks-158964/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>4 Ways To Take Your AdWords Scripts To The Next Level</title>
		<link>http://searchengineland.com/4-ways-to-take-your-adwords-scripts-to-the-next-level-155593</link>
		<comments>http://searchengineland.com/4-ways-to-take-your-adwords-scripts-to-the-next-level-155593#comments</comments>
		<pubDate>Fri, 19 Apr 2013 19:50:45 +0000</pubDate>
		<dc:creator>Frederick Vallaeys</dc:creator>
				<category><![CDATA[Channel: SEM]]></category>
		<category><![CDATA[Enterprise SEM]]></category>
		<category><![CDATA[Google: AdWords]]></category>
		<category><![CDATA[How To: PPC]]></category>
		<category><![CDATA[How To: SEM]]></category>
		<category><![CDATA[Ad Words]]></category>
		<category><![CDATA[adwords]]></category>
		<category><![CDATA[AdWords Scripts]]></category>
		<category><![CDATA[google adwords]]></category>
		<category><![CDATA[Paid Search]]></category>
		<category><![CDATA[paid search tactics]]></category>
		<category><![CDATA[paid search tools]]></category>

		<guid isPermaLink="false">http://searchengineland.com/?p=155593</guid>
		<description><![CDATA[Last week, I presented at HeroConf in Austin and shared some advanced tips for automating AdWords account management with an audience of PPC account managers. They seemed to like what I had to say; so, I’ll share a few of the more advanced scripting tips with you here. When you manage PPC accounts, you likely [...]]]></description>
				<content:encoded><![CDATA[<p>Last week, I presented at HeroConf in Austin and shared some advanced tips for automating AdWords account management with an audience of PPC account managers. They seemed to like what I had to say; so, I’ll share a few of the more advanced scripting tips with you here.</p>
<p>When you manage PPC accounts, you likely experience at least one of these two frustrations:</p>
<ul>
<li>You know exactly what you should be doing, but there aren’t enough hours in the day to get it done</li>
<li>You’ve bought a tool that automates AdWords account management, but you find yourself locked into a cookie-cutter solution that doesn’t let you tweak things based on the unique aspects of your business</li>
</ul>
<p>AdWords Scripts are a great solution to address these two problems, though they’re not perfect. They don’t lend themselves well towards working with very large accounts; they require marketers to write code (which could have disastrous outcomes), and they put their outputs in logs that can be hard to read. Luckily, thanks to some recent changes made by Google and a few smart integration moves, all of these issues can now be solved.</p>
<h2>Automating Very Large AdWords Accounts</h2>
<p>One of the biggest limitations of AdWords Scripts is that they can only interact with 100,000 items every time a script runs. So, if you’re trying to <a title="How Account Quality Score Can Guide AdWords Optimization" href="http://searchengineland.com/how-account-quality-score-can-guide-adwords-optimization-148595">calculate the account quality score</a> for an account with 150,000 keywords, or you need to change bids for more than 100,000 ad groups and keywords, then you’re out of luck. This limitation is still in place, but Google has now added <a href="https://developers.google.com/adwords/scripts/docs/features/reports">reporting as a beta feature to Scripts</a>, and this can help you get around the 100k item limitation.</p>
<p>For example, when you need to get stats for every keyword because you’re trying to calculate your quality score, instead of requesting stats for every keyword in an account individually (which can quickly bump you into the 100k limit), now you can request a keyword report and use that to do all your calculations, even when there are more than 100,000 keywords in the report.</p>
<p>Reports can also help if you’re making changes to an account. Say you want to change bids, for example: rather than using your quota of 100k items to calculate what the new bids should be, do all those calculations from a report and save your quota to make the required bid changes. Most of the time, bid changes will only be necessary for a portion of the account.</p>
<p>Now, if you still get stuck, consider creating scripts that act on one campaign at a time rather than on the entire account. And, if working on a single campaign is not practical, use an iterator that goes through your account alphabetically. The code snippet below shows how to go through all your ad groups alphabetically:</p>
<pre style="padding-left: 10px;">var alphabet = "0123456789abcdefghijklmnopqrstuvwxyz";
var alphabetStartLetter = "0";
var alphabetStartPosition = alphabet.indexOf(alphabetStartLetter);
Logger.log ("start at ad groups starting with '" + 
<span style="padding-left: 15px;">alphabetStartLetter + "' (" + alphabetStartPosition + ")");</span>

for(var i = alphabetStartPosition; i &lt; alphabet.length; i++) {
var adGroupNameStartsWith = alphabet[i];
var adGroupIterator = AdWordsApp.adGroups()
.withCondition("Status = ENABLED")
.withCondition("AdGroupName STARTS_WITH_IGNORE_CASE '" + 
<span style="padding-left: 15px;">adGroupNameStartsWith + "'")</span>
.get();</pre>
<p>&nbsp;</p>
<p>After a script with this code has run, look at the logs to see the last letter of the alphabet that was used before the script timed out or hit the limit, and then change the variable alphabetStartLetter to that value. When you run the script again, it’ll pick up from roughly the same place where it left off last time.</p>
<h2>Make Scripts Accessible For People Who Can’t Code</h2>
<p>I wish everybody had at least a basic understanding of programming, but we all know that’s not the case; so, when you want to create automation that relies on some inputs from a user and you want to make it accessible to non-coders, you can move the inputs and outputs into a friendlier UI, like the AdWords frontend or a Google Spreadsheet.</p>
<p>This idea came from http://www.freeadwordsscripts.com/: use labels in your AdWords account to tell a script what to do. For example, if you create a script that manages bids to hit a target CPA goal, rather than coding the CPA in the script, apply it as a label to your campaign.</p>
<p>Now, when your script runs, look at the labels for each campaign, and if the label matches a certain pattern of text like “Target: 50,” it knows that the target CPA is $50. In the code snippet that follows, you can see how I can set different labels to tell the script the type of bid management I want to do, the target, and the min and max bids it’s allowed to set.</p>
<pre style="padding-left: 10px;">var labelSelector = campaign.labels();
var labelIterator = labelSelector.get();
while (labelIterator.hasNext()) {
var label = labelIterator.next();
var labelName = label.getName();
var labelDesc = label.getDescription();
if(labelName.toLowerCase().indexOf("target") !=-1) {
var target = labelDesc;
Logger.log(" Bid Target: " + target);
}
if(labelName.toLowerCase().indexOf("bid style") !=-1) {
var bidStyle = labelDesc;
Logger.log(" Bid style: " + bidStyle);
}
if(labelName.toLowerCase().indexOf("min cpc") !=-1) {
var minCPC = labelDesc;
Logger.log(" Min CPC: " + minCPC);
}
if(labelName.toLowerCase().indexOf("max cpc") !=-1) {
var maxCPC = labelDesc;
Logger.log(" Max CPC: " + maxCPC);
}
}</pre>
<p>&nbsp;</p>
<p>In the AdWords interface, you can now create labels and assign them to campaigns, ad groups or keywords to tell the script what to do.</p>
<p><div id="attachment_155594" class="wp-caption aligncenter" style="width: 493px"><img class="size-full wp-image-155594 " alt="AdWords labels as script inputs" src="http://searchengineland.com/figz/wp-content/seloads/2013/04/labels-as-script-inputs.png" width="483" height="249" /><p class="wp-caption-text">Use AdWords labels to tell a script what to do</p></div></p>
<p>Another way to make scripts less dangerous for everyone is to add a step to review and approve any changes before they are made. When you’re coding complex scripts that make a lot of decisions inside an account, it’s a good idea to take a look at the proposed changes before they are made. You can do this in a limited way by previewing the script, but if you want to see all changes, it makes sense to let a script run to completion rather than cutting it off at 30 seconds, which is what the preview functionality does.</p>
<p>One way I&#8217;ve gotten around this is to have 2 separate scripts: one that processes the data and spits out recommendations in a spreadsheet and another that looks for the spreadsheet and applies any changes that are marked as &#8220;approved.&#8221; Since AdWords Scripts have a direct integration with Google Spreadsheets, outputting the results to a spreadsheet is as easy as a few lines of code like this:</p>
<pre style="padding-left: 10px;">var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
var previewChanges = spreadsheet.insertSheet("Changes");
previewChanges.appendRow([“Approved”, "Date", "Campaign", 
<span style="padding-left: 15px;">"Ad Group", "Keyword", "Imp", "Clicks", "Conversions", "Cost",</span>
<span style="padding-left: 15px;">"QS", "Avg Pos"]);</span></pre>
<p>&nbsp;</p>
<p>Then, my other script opens the same spreadsheet and only changes my account if I have put a ‘1’ in the column that indicates my approval.</p>
<p>Reading a spreadsheet can be done with code like this:</p>
<pre style="padding-left: 10px;">var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
var previewChanges = spreadsheet.insertSheet("Changes");

var rows = dataSheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();

// Read Header Rows so we know which column has the approval field
var row = values[1];
for(var i = 0; i &lt; 2; i++) {
var value = row[i];
if(value.toLowerCase().indexOf("approved") != -1) {
var approvedIndex = i;
} else if(value.toLowerCase().indexOf("campaign") != -1) {
var campaignIndex = i;
}
}

// Read spreadsheet rows
for(var i = 2; i&lt;numRows; i++) {
var spreadsheetRow = i+1;
var row = values[i];
var approved = row[approvedIndex];
// do something with the data
}</pre>
<p>&nbsp;</p>
<h2>Make The Output From Scripts Prettier</h2>
<p>I&#8217;ve explained before that it is possible to push data from a script into a spreadsheet and use that to create a chart that can be embedded elsewhere. But, if you’re like me and use dashboards from Cyfe.com, it’s much better to just give them the data so they can chart it on their end. That way the date ranges on all my different charts line up nicely, and I can more easily start to look for correlations in my data. Pushing data to Cyfe or one of the many other dashboard tools typically requires calling an API endpoint with the data encoded in JSON.</p>
<p><div id="attachment_155595" class="wp-caption aligncenter" style="width: 517px"><img class="size-full wp-image-155595 " alt="adwords quality score chart" src="http://searchengineland.com/figz/wp-content/seloads/2013/04/account-qs.png" width="507" height="267" /><p class="wp-caption-text">Historical AdWords account quality score charted in a dashboard widget.</p></div></p>
<p>Here’s a simple example of the code you need to push your quality score to a Cyfe endpoint.</p>
<pre style="padding-left: 10px;">Date.prototype.yyyymmdd = function() {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth()+1).toString(); // getMonth() is 
<span style="padding-left: 15px;">zero-based</span>
var dd  = this.getDate().toString();
return yyyy + (mm[1]?mm:"0"+mm[0]) + (dd[1]?dd:"0"+dd[0]); // 
<span style="padding-left: 15px;">padding</span>
};

d = new Date();
var eventDate = d.yyyymmdd();

var payload = { "data":  [
{
"Date":  eventDate,
"Quality Score":  acctQS
}
],
"onduplicate":  {
"Quality Score":  "replace"
},
"average": {
"Quality Score": 1
}
}

var jsonData = JSON.stringify(payload);
Logger.log(jsonData);
var options =
{
"method" : "post",
"payload" : jsonData
};

var response = UrlFetchApp.fetch(dashboardEndPointURL, options);
var responseCode = response.getResponseCode();
var responseText = response.getContentText();
Logger.log(responseCode + ": " + responseText);</pre>
<p>&nbsp;</p>
<h2>Dealing With Special Characters In Names, Ad Text Or Keywords</h2>
<p>One final tip is about how to deal with special characters in an AdWords script. When I shared my Quality Score script, a lot of people had an issue getting it to work because their campaign names were longer than a single word or it contained special characters. To deal with that, do a little bit of regex to clean up the name as shown for the campaignName below:</p>
<pre style="padding-left: 10px;">var keywordIterator = AdWordsApp.keywords()
.withCondition("CampaignName != \"" + 
<span style="padding-left: 15px;">campaignName.replace(/[\[\]\"]/g, "") + "\"")</span>
.get();</pre>
<p>&nbsp;</p>
<p>If you like the idea of using Scripts to automate some of the more tedious account management tasks, and you want to learn more, come see me speak at SMX Advanced on June 12th at 3 pm in the session, “<a href="http://searchmarketingexpo.com/advanced/2013/full_agenda2#1281">Amazing Paid Search Tactics &amp; Tools</a>.”</p>
]]></content:encoded>
			<wfw:commentRss>http://searchengineland.com/4-ways-to-take-your-adwords-scripts-to-the-next-level-155593/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Workarounds To Make Enhanced Campaigns More Flexible</title>
		<link>http://searchengineland.com/workarounds-to-make-enhanced-campaigns-more-flexible-151755</link>
		<comments>http://searchengineland.com/workarounds-to-make-enhanced-campaigns-more-flexible-151755#comments</comments>
		<pubDate>Thu, 21 Mar 2013 16:46:39 +0000</pubDate>
		<dc:creator>Frederick Vallaeys</dc:creator>
				<category><![CDATA[Channel: SEM]]></category>
		<category><![CDATA[Enterprise SEM]]></category>
		<category><![CDATA[Google: AdWords]]></category>
		<category><![CDATA[Google: AdWords: Enhanced Campaigns]]></category>
		<category><![CDATA[AdWords Editor]]></category>
		<category><![CDATA[AdWords Scripts]]></category>
		<category><![CDATA[automate merging campaigns]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[carrier targeting]]></category>
		<category><![CDATA[Device Targeting]]></category>
		<category><![CDATA[duplicate campaigns]]></category>
		<category><![CDATA[enhanced campaigns]]></category>
		<category><![CDATA[enhanced campaigns workarounds]]></category>
		<category><![CDATA[location bid multipliers]]></category>
		<category><![CDATA[mobile device targeting]]></category>
		<category><![CDATA[multiple mobile bid multipliers]]></category>
		<category><![CDATA[single bid multiplier]]></category>
		<category><![CDATA[successful adwords campaigns]]></category>
		<category><![CDATA[tablets & desktops targeting]]></category>
		<category><![CDATA[targeting tablet devices]]></category>
		<category><![CDATA[tiered campaigns]]></category>

		<guid isPermaLink="false">http://searchengineland.com/?p=151755</guid>
		<description><![CDATA[Last week at SMX West, I was on the &#8220;SEM Best Practices Debate&#8221; panel. Several of the topics we debated were related to Enhanced Campaigns, clearly something on the minds of search marketers these days. This month, I’ll recap a few take-aways from the event and share some ideas for workarounds and automation that may [...]]]></description>
				<content:encoded><![CDATA[<p>Last week at SMX West, I was on the &#8220;SEM Best Practices Debate&#8221; panel. Several of the topics we debated were related to Enhanced Campaigns, clearly something on the minds of search marketers these days. This month, I’ll recap a few take-aways from the event and share some ideas for workarounds and automation that may make your transition to Enhanced Campaigns a bit easier.</p>
<h2>Does It Make Sense To Target Tablets &amp; Desktops In The Same Campaign?</h2>
<p>This debate topic was a tongue-in-cheek jab at Enhanced Campaigns which make the answer largely irrelevant since splitting out desktops and tablets into separate campaigns is no longer possible. Google has said that tablets and desktops should be treated the same. But what did the panelists have to say?</p>
<p>The majority of the panel agreed that combining tablets and desktops is not completely crazy because while there still is a clear distinction between the devices, it is shrinking by the day.</p>
<p>Case in point: all the people in the session were using new PCs running Windows 8 that can be physically reconfigured into either a laptop or a tablet. In this case, it’s the same device, and the main difference is in how the screen is used. If the user was using it as a tablet to do research and then wanted to convert it to a laptop to make a purchase, all they would need to do is flip the screen.</p>
<p>This raised the point that rather than targeting tablets and desktops where the experience may be converging, it might make more sense to be able to target based on the screen size of the device. We can all dream that this form of segmentation will come to AdWords, right?</p>
<p>In my own experience, I have seen the results on tablets vary wildly; sometimes they outperform the desktop and sometimes they underperform. So, while I&#8217;d rather still be able to set separate bids for tablets, I do agree that having the same ads will not necessarily make my results worse.</p>
<h2>Workarounds For Targeting Tablet Devices In Enhanced Campaigns</h2>
<p>It may still be desirable to show a different landing page to tablet users, which luckily doesn’t require making a separate ad for tablets. Instead, detect tablet devices on your landing page and then customize the experience by suggesting the user download your app or use a tablet-optimized version of your site.</p>
<p>One of the easiest ways to determine whether someone who clicked an ad was using a desktop, tablet or mobile is to use the <a href="http://support.google.com/adwords/answer/2375447?hl=en">{device} ValueTrack parameter</a>. You can append this to your destination URL, and then Google will replace it with either ‘m’ for mobile, ‘t’ for tablet, or ‘c’ for computer. Based on that, you can vary up the content of your landing page.</p>
<p><div id="attachment_151756" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-151756  " alt="ValueTrack To Identify Mobile Visitors" src="http://searchengineland.com/figz/wp-content/seloads/2013/03/valuetrack-mobile-300x405.png" width="300" height="405" /><p class="wp-caption-text">Some ValueTrack parameters as described in the AdWords Help Center</p></div></p>
<p>And, if you’re concerned like me that bids should take the device type into consideration, you can still use Google’s Conversion Optimizer or Enhanced CPC, which will raise and lower bids automatically based on the expected likelihood of a conversion considering the particular details of the click, including: time, location, other words in the query, and device. Even if you use your own bid management technology, Enhanced CPC can be used as a layer on top of that.</p>
<h2>How Significant Is The Loss Of Mobile Device &amp; Carrier Targeting?</h2>
<p>While Enhanced Campaigns still allow advertisers to use a different ad text and landing page when their ads appear on mobile phones, the ability to target to specific devices (e.g., iPhone vs. Nexus 4) and to target different carriers (e.g., AT&amp;T vs. T-Mobile) is now completely gone.</p>
<p>Considering that Google&#8217;s own Analytics Evangelist, Avinash Kaushik&#8217;s, says, “<a href="http://www.kaushik.net/avinash/web-analytics-segments-three-category-recommendations/">All data in aggregate is ‘crap’</a>,&#8221; to make the point that online marketing success is highly dependent on smart segmentation that leads to actionable insights, it&#8217;s a shame that these layers of segmentation have been taken away from advertisers.</p>
<p>Device and carrier targeting were reasonable substitutes for demographic targeting, something not offered for AdWords search ads. For example, you could venture that iPhone users are more likely early adopters than BlackBerry users, and AT&amp;T subscribers probably have higher incomes than Boost subscribers. I once met a locksmith who told me he had tremendous success targeting ads for the keyword ‘lost keys’ to iPhones because those users were more likely to pay his higher fee for rush service.</p>
<h2>Workaround For Device Targeting</h2>
<p>It’s not a complete solution, but just like in the tablet example, it’s possible to use ValueTrack to at least change up your landing pages based on the device. In this case, use the {devicemodel} parameter in your destination URL so that Google will pass the type of device on to your website. For example, they would replace {devicemodel} with “Apple+iPhone.”</p>
<h2>Can We Run Successful Campaigns With A Single Bid Multiplier For All Ads In A Campaign?</h2>
<p>Unfortunately, our panel ran out of time and this wasn’t discussed, but I have no doubt everyone would have argued that one bid multiplier is simply not enough for sophisticated advertisers. I would have argued that this is inadequate control because a campaign can contain keywords associated with different stages of the conversion funnel, and each stage may have different results.</p>
<p>Here’s an example: I find myself more inclined to do early research for a purchase on my mobile phone, but use my laptop when I’m ready to buy. For an advertiser targeting me, upper funnel keywords would be more valuable on mobile devices than lower funnel keywords. Of course, if your business is local in nature, it may be the exact opposite. You may value a search more from someone showrooming on their mobile phone than someone just starting their research on their home computer.</p>
<p>But, regardless of what applies to your business, my argument is that there is a wide spectrum of intents behind different keywords, and it would be better to allow advertisers to set multiple mobile bid multipliers within campaigns.</p>
<h2>Workaround For Setting Multiple Mobile Bid Multipliers</h2>
<p>I’ve heard two solutions for setting more granular mobile bids using Enhanced Campaigns.</p>
<p><div id="attachment_151759" class="wp-caption aligncenter" style="width: 610px"><img class="size-large wp-image-151759 " alt="Enhanced Campaigns Bid Strategies" src="http://searchengineland.com/figz/wp-content/seloads/2013/03/enhanced-campaign-bid-strategies-600x489.jpg" width="600" height="489" /><p class="wp-caption-text">Two possible ways to structure Enhanced Campaigns to preserve more granular mobile bids.</p></div></p>
<p><strong>Solution 1: Duplicate Campaigns</strong></p>
<p>The first workaround is to create 2 campaigns that contain all keywords, one called ‘Mobile,’ the other, ‘Desktop.’ By setting all bids in the ‘Mobile’ campaign lower, the ‘Desktop’ campaign’s higher bids should cause it to serve all the ads for desktops and tablets.</p>
<p>Then, by setting the mobile multiplier of the ‘Desktop’ campaign to -100%, all mobile ads will be served by the ‘Mobile’ campaign. Now, you can vary bids for every keyword in the mobile campaign to determine mobile bids. You can use a mobile bid multiplier in this campaign if you need mobile bids to sometimes exceed desktop bids.</p>
<p>The challenge with this setup is that you need to make sure that your base bids in the ‘Mobile’ campaign always stay lower than the bids in the ‘Desktop’ campaign.</p>
<p><strong>Solution 2: Tiered Campaigns</strong></p>
<p>In the second workaround, you create several campaigns with different mobile bid multipliers, and then assign keywords to the campaign whose bid multiplier most closely matches your needs. I prefer this method because it’s a little simpler to maintain in the long run, if you’re okay assuming that conversion rate differences between desktop and mobile will remain relatively consistent for the same keywords.</p>
<p>To put this into practice, download your entire keyword list and compare the current desktop bid to the mobile bid. You’ll probably find that you can now group the keywords into a handful of ‘buckets,’ e.g., 0 to 20% lower mobile bid, 20 to 30% lower mobile bid, and 30 to 60% lower mobile bid. Based on these buckets, create campaigns with the desired mobile multiplier, e.g., -20%, -30% and -60%. Then, move the keywords to the correct new campaigns.</p>
<p>Now, when you change the bid for a keyword, you don’t need to worry about accidentally shifting impressions to a parallel campaign where the same keyword has a higher bid and ad rank.</p>
<p>This process can be tedious, but as I’ve explained in my previous two posts, AdWords Scripts can come to the rescue to automate this task.</p>
<h2>Use Big Data To Improve Your Account By Setting Location Bid Multipliers</h2>
<p>While we&#8217;ve lost segmentation for tablets, mobile devices and carriers, there is good news, too, in that we&#8217;ve gained a simplification in how we can segment for locations.</p>
<p>In the SMX session on Big Data, Kevin Lee gave the example that location is a big data signal that can be used to set better bids. In the past, that would have required creating separate campaigns for every region, but now, it can be done with a location bid multiplier in the settings of Enhanced Campaigns.</p>
<p>Setting these location multipliers through the AdWords interface is fine if you only have a few campaigns, but when you have hundreds, consider using the AdWords Editor, where the just released version 10 now supports copy-and-paste of location bid multipliers between campaigns.</p>
<h2>Automate Merging Campaigns</h2>
<p>Google makes it sound very easy to merge campaigns in their <a href="http://www.google.com/adwords/enhancedcampaigns/resources/pdf/upgrade-guide-en.pdf">documentation for switching to Enhanced Campaigns.</a> But, if you’ve followed their previous recommended best practice for mobile ads, which was to maintain a separate campaign for mobile ads so that you could set separate bids, run different ad texts and use landing pages designed specifically for mobile devices, your campaigns may no longer look like duplicates, and you may find yourself facing a long slough to get the upgrade done.</p>
<p>If your mobile campaign is no longer a simple copy of the structure of your desktop campaign merging is not a simple matter of combining ad groups with the same name, but it’s now a matter of figuring out which ad groups are similar and could be merged together.</p>
<p>This is another instance where AdWords Scripts can really help with automating a tedious task. Let’s assume for a moment that you will merge everything from a campaign called ‘Mobile’ into a campaign called ‘Desktop.’</p>
<p>You could write a script that goes through every keyword in ‘Mobile’ and finds the equivalent ad group in ‘Desktop’ by looking for the ad group name that contains the keyword. It could then write the ad text from ‘Mobile’ and the ad group name from ‘Desktop’ to a spreadsheet, giving you the basis for a spreadsheet you could upload through AdWords Editor to move all your ad texts to the right location.</p>
]]></content:encoded>
			<wfw:commentRss>http://searchengineland.com/workarounds-to-make-enhanced-campaigns-more-flexible-151755/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>How Account Quality Score Can Guide AdWords Optimization</title>
		<link>http://searchengineland.com/how-account-quality-score-can-guide-adwords-optimization-148595</link>
		<comments>http://searchengineland.com/how-account-quality-score-can-guide-adwords-optimization-148595#comments</comments>
		<pubDate>Thu, 21 Feb 2013 17:41:40 +0000</pubDate>
		<dc:creator>Frederick Vallaeys</dc:creator>
				<category><![CDATA[Channel: SEM]]></category>
		<category><![CDATA[Enterprise SEM]]></category>
		<category><![CDATA[Google: AdWords]]></category>

		<guid isPermaLink="false">http://searchengineland.com/?p=148595</guid>
		<description><![CDATA[Last month, I covered four ways to use AdWords Scripts to improve AdWords account management. I didn&#8217;t share any actual code for fear of geeking out too much, but people seemed interested enough in how to use Scripts to track historical Quality Score (QS), so this month, I&#8217;ll share step-by-step instructions and give you the [...]]]></description>
				<content:encoded><![CDATA[<p>Last month, I covered <a title="Four Ways You Can Benefit By Using AdWords Scripts" href="http://searchengineland.com/four-ways-you-can-benefit-by-using-adwords-scripts-145530">four ways to use AdWords Scripts to improve AdWords account management</a>. I didn&#8217;t share any actual code for fear of geeking out too much, but people seemed interested enough in how to use Scripts to track historical Quality Score (QS), so this month, I&#8217;ll share step-by-step instructions and give you the code needed to track your own account-level Quality Score.</p>
<p>But first, let me explain what account-level Quality Score is all about…</p>
<h2>Why You Should Track Account-Level Quality Score</h2>
<p>The Quality Score of your AdWords account is a useful gauge to monitor how good Google thinks your optimizations are. Rather than tracking the QS of every keyword in an account, which is not only tedious but also not very useful when an optimization includes new keywords and removes others, you can roll up the keyword-level data into an account-level number.</p>
<p>Then, when you want to know if your account is headed in the right direction, the account-level QS number can provide the answer.</p>
<h2>Why Can&#8217;t I See Account Quality Score In AdWords?</h2>
<p>Technically, Google does not have a metric called account-level QS; it&#8217;s not a number that&#8217;s published anywhere. It&#8217;s not just that Google hides this number from advertisers, it&#8217;s not even available to your CSR, or for that matter, Larry Page. When I worked at Google, I got asked all the time if there was a QS reset button in Sergey and Larry’s office, and no, unfortunately, there isn’t.</p>
<p>Because QS is based on so many historical factors, the only way to get rid of poor QS is to start running lots of ads that have better QS, thereby reducing the negative QS impact from older ads.</p>
<p>Account-level QS is merely a construct that helps us understand and predict how a complex prediction algorithm (the QS system) might behave under certain circumstances. AdWords&#8217; QS is a complex learning system that tries to guess for every single query which ads users will find most useful. Those predictions use historical data to guess possible outcomes of future searches.</p>
<p>So, when a keyword in your account has lots of impressions, Google uses that keyword&#8217;s historical CTR from your account to make an educated guess about the future performance of that keyword, and that&#8217;s how it gets its keyword-level QS. This keyword-level QS is the only insight into QS that you get from AdWords, and keep in mind that it&#8217;s an attribute and not a stat.</p>
<p>In other words, even if you change the date range in AdWords, you will always get the same number, which is an indication of the current QS.</p>
<h2>How Quality Score Is Determined For New Keywords</h2>
<p>But, how does the QS system make a prediction when you add a new keyword to AdWords for the first time and there is no historical CTR data for that keyword in your account? How does Google then set the starting Quality Score for that keyword? It’s complicated, but part of the answer is that they look at similar signals to make their guess.</p>
<p>Similar data includes system-wide data about how your new keyword has performed when other advertisers used it. And, when your account has been around for some time, Google can also use its notion of how your historical performance has been compared to the expected average.</p>
<p>Here’s an example: Google might expect a particular new keyword to have a starting QS of 6 based on the historical CTR of all other advertisers who have used this keyword, but because they know that your account typically has a better than average CTR performance, they may boost your starting QS to a 7.</p>
<p>They do so under the assumption that you are likely to perform better than average for a new keyword because you’ve historically had very relevant ads for other keywords.</p>
<h2>How Can I Calculate Account QS?</h2>
<p>Quality Score in AdWords is reported only at the keyword level, and that&#8217;s where it’s used in combination with the bid to determine the ad rank. One way to think about account-level QS is as an impression-weighted average.</p>
<p>In last month&#8217;s post, I explained the <a title="Four Ways You Can Benefit By Using AdWords Scripts" href="http://searchengineland.com/four-ways-you-can-benefit-by-using-adwords-scripts-145530">math behind calculating the account QS</a>. Now to automate this, we can write a simple script that iterates through all keywords in an account and does this calculation for us.</p>
<h2>Account Quality Score Calculation Script</h2>
<p><div id="attachment_148636" class="wp-caption aligncenter" style="width: 460px"><img class="wp-image-148636 " alt="AdWords Scripts" src="http://searchengineland.com/figz/wp-content/seloads/2013/02/create-new-adwords-script-300x149.png" width="450" height="225" /><p class="wp-caption-text">Add a new script from Campaigns &gt; Bulk Operations &gt; Scripts in your AdWords account.</p></div></p>
<p>&nbsp;</p>
<p>In the new script, replace all the sample code with the code below:</p>
<div>
<p><code></p>
<p>function main() {</p>
<p>var totalImpressionsAnalyzed = 0;</p>
<p>var totalQualityScoreAnalyzed = 0;</p>
<p>var keywordIterator = AdWordsApp.keywords()</p>
<p>.withCondition("Status = ENABLED")</p>
<p>.withCondition("CampaignName CONTAINS_IGNORE_CASE " +
"Insert Your Campaign Name Here")</p>
<p>.withCondition("CampaignStatus = ENABLED")</p>
<p>.withCondition("AdGroupStatus = ENABLED")</p>
<p>.orderBy("Impressions")</p>
<p>.forDateRange("LAST_30_DAYS")</p>
<p>.withLimit(100000)</p>
<p>.get();</p>
<p>while (keywordIterator.hasNext()) {</p>
<p>var keyword = keywordIterator.next();</p>
<p>var qualityScore = keyword.getQualityScore();</p>
<p>var keywordStats = keyword.getStatsFor("LAST_30_DAYS");</p>
<p>var impressions = keywordStats.getImpressions();</p>
<p>var qualityScoreContribution = qualityScore * impressions;</p>
<p>totalQualityScoreAnalyzed = totalQualityScoreAnalyzed + qualityScoreContribution;</p>
<p>totalImpressionsAnalyzed = totalImpressionsAnalyzed + impressions;</p>
<p>}</p>
<p>var accountQualityScore = totalQualityScoreAnalyzed / totalImpressionsAnalyzed;</p>
<p>Logger.log("QS: " + accountQualityScore);</p>
<p>}</p>
<p></code>
</div>
<p>You can simply copy and paste this code into a new script, authorize it and then preview it. The only thing you should modify is to replace “Insert Your Campaign Name Here” with the part of your campaign names that indicates it’s a search network campaign.</p>
<p>Because ads that run on the Google Display Network and on mobile devices have their own separate QS, you want to process only data from keywords that are in campaigns targeting Google.com search to get an accurate result.</p>
<h2>Get The Latest Data Automatically Every Day</h2>
<p>While this script automates the calculations you could otherwise do in a spreadsheet, you don&#8217;t want to have to run this script manually every day, so let’s set it up to run automatically every day.</p>
<p style="text-align: center;"><img class="wp-image-148638 aligncenter" alt="Schedule AdWords Script" src="http://searchengineland.com/figz/wp-content/seloads/2013/02/schedule-adwords-scripts-300x126.png" width="450" height="189" /></p>
<p>&nbsp;</p>
<h2>3 Ways To Maintain Your Tracking History</h2>
<p>While it&#8217;s helpful to know what your account QS is, it’s most useful when you put it into the context of changes you’re making to your account. Knowing that your account QS is a 4 tells you that you need to start optimizing. Knowing that your QS went from a 4 to a 5 tells you you&#8217;re doing something right.</p>
<p>So let&#8217;s get the QS out of the script and into a place where you can track it.</p>
<p>Here are three ways to extend the script by sending the QS to somewhere useful for you. You can simply add the lines of code for the technique you want to implement just before the final ‘}’.</p>
<p><b>1.  Send It By Email</b></p>
<p>The simplest way to get the QS out of your account is to deliver it to your inbox every day.</p>
<p>&nbsp;</p>
<p><code>var recipient = "you@example.com, me@example.com";
var subject = "Account Quality Score";
var body = "Account Quality Score:\n\n" + accountQualityScore;
MailApp.sendEmail(recipient, subject, body);</code></p>
<p>&nbsp;</p>
<p><b>2.  Add It To A Spreadsheet</b></p>
<p>An easy way to get the historical perspective is to add the Quality Score and the date to a spreadsheet every day.</p>
<p><code>var date = new Date();
var spreadsheetUrl = "Insert Your Google Spreadsheet URL Here And Make Sure Your AdWords Login Has Edit Privileges For This Spreadsheet";
var qualityScoreSheet = SpreadsheetApp.openByUrl(spreadsheetUrl).getActiveSheet();
qualityScoreSheet.appendRow([date, accountQualityScore]);</code></p>
<p>&nbsp;</p>
<p>Now, when you make significant changes to your account, you could add an annotation to the spreadsheet on the date when the change was made. For example, when you add a big batch of keywords, put a note along the lines of “added new keywords &lt;url to list&gt;.”</p>
<p>This annotation will be useful, as described further below, when we turn this spreadsheet into a chart for a dashboard.</p>
<p><div id="attachment_148640" class="wp-caption aligncenter" style="width: 518px"><img class="size-full wp-image-148640 " alt="Account Quality Score in a Google Spreadsheet" src="http://searchengineland.com/figz/wp-content/seloads/2013/02/account-quality-score-in-spreadsheet.png" width="508" height="197" /><p class="wp-caption-text">Add annotations next to each date so you can track how it impacts Quality Score</p></div></p>
<p>&nbsp;</p>
<p><b>3. Send It To An API</b></p>
<p>If you want to send the QS into your own database, that can be done in a single line of code, but you do need to have your own API for accepting this type of data. A simple API is just a URL that you can call with some variables that contain the data.</p>
<p>My own API call looks like this. <span style="font-size: 13px; line-height: 19px;">You&#8217;d replace the part with my URL with your own URL:</span></p>
<p>&nbsp;</p>
<p><code>var response = UrlFetchApp.fetch("http://www.toptiermarketing.com/api.php?action=add_qs&amp;qs=" + accountQualityScore);</code></p>
<p>&nbsp;</p>
<h2>Charting Quality Score Progress</h2>
<p>When you put the QS into a Google spreadsheet every day, you can easily turn that into a chart and even embed that chart into your own custom dashboard. If you want to see QS along with a few other metrics from your AdWords account, my friend Nick Mihailovski from Google Analytics shared a great <a href="https://developers.google.com/analytics/solutions/articles/reporting-apps-script">script to pull data from Analytics into a Google spreadsheet</a>.</p>
<p><div id="attachment_148644" class="wp-caption aligncenter" style="width: 559px"><img class="wp-image-148644 " alt="Annotated Quality Score Tracker" src="http://searchengineland.com/figz/wp-content/seloads/2013/02/annotated-quality-score-tracker.png" width="549" height="343" /><p class="wp-caption-text">Monitor how changes to your AdWords account impact your account-level Quality Score.</p></div></p>
<p>If your AdWords and Analytics accounts are linked (as they should be for more advanced remarketing capabilities), you can use this script to make custom AdWords charts that combine data from your account with data you calculate yourself like Quality Score.</p>
]]></content:encoded>
			<wfw:commentRss>http://searchengineland.com/how-account-quality-score-can-guide-adwords-optimization-148595/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Search Funnel Data Now More Actionable In AdWords</title>
		<link>http://searchengineland.com/search-funnel-data-now-more-actionable-in-adwords-148403</link>
		<comments>http://searchengineland.com/search-funnel-data-now-more-actionable-in-adwords-148403#comments</comments>
		<pubDate>Wed, 13 Feb 2013 18:48:30 +0000</pubDate>
		<dc:creator>Frederick Vallaeys</dc:creator>
				<category><![CDATA[Channel: SEM]]></category>
		<category><![CDATA[Google: AdWords]]></category>
		<category><![CDATA[Top News]]></category>
		<category><![CDATA[adwords]]></category>
		<category><![CDATA[assist clicks/last clicks]]></category>
		<category><![CDATA[assist impressions]]></category>
		<category><![CDATA[campaign management]]></category>
		<category><![CDATA[click assisted conversions]]></category>
		<category><![CDATA[clicks]]></category>
		<category><![CDATA[last-click conversions]]></category>
		<category><![CDATA[search funnel metrics]]></category>
		<category><![CDATA[search funnels]]></category>
		<category><![CDATA[view-through conversions]]></category>

		<guid isPermaLink="false">http://searchengineland.com/?p=148403</guid>
		<description><![CDATA[Google just announced that data from search funnels will now be incorporated in the campaigns, ad groups, keywords, and ads tabs where it will be easier to act on. This is a welcome change for all advertisers; advanced advertisers will find it easier to incorporate the additional conversion metrics into their strategies and newer advertisers may [...]]]></description>
				<content:encoded><![CDATA[<p>Google <a href="http://adwords.blogspot.com/2013/02/optimizing-for-conversions-made-easy.html">just announced</a> that data from search funnels will now be incorporated in the campaigns, ad groups, keywords, and ads tabs where it will be easier to act on. This is a welcome change for all advertisers; advanced advertisers will find it easier to incorporate the additional conversion metrics into their strategies and newer advertisers may become more aware of the usefulness of these metrics.</p>
<p>After last week’s announcement about <a href="http://searchengineland.com/the-big-adwords-update-enhanced-campaigns-puts-the-focus-on-mobile-147626">Enhanced Campaigns</a>, which seem to favor advertisers who use less sophisticated techniques for managing their accounts, this newest announcement from Google is a welcome indication they’re still building AdWords into a power tool for all advertisers.</p>
<h2>Uncovering Search Funnels</h2>
<p>Previously, Search Funnels were hidden away in a remote corner of the Conversions tab as a separate set of reports. Advertisers found it either hard to incorporate in their workflows or may not even have realized this data existed.</p>
<p>Search Funnels include key insights about the entire conversion path related to AdWords. With metrics like assist clicks, click assisted conversions, assist impressions, and assist clicks/last clicks, advertisers can see beyond the last-click conversion.</p>
<h2>Getting Beyond Last Click Credit</h2>
<p>Until now, the only conversion metrics in the campaign management pages were last-click conversions and view-through conversions. So, if a user interacted with multiple ads of yours before converting, you would only see a conversion for the last keyword they clicked on. If you were using that data to make all your decisions about the value of a keyword, you could have missed some opportunities.</p>
<p style="text-align: center;"><img class="size-full wp-image-148404 aligncenter" alt="Search Funnel Metrics" src="http://searchengineland.com/figz/wp-content/seloads/2013/02/search-funnel-metrics.png" width="464" height="336" /></p>
<p>In a sports analogy, a last-click conversion bid strategy is like paying a big salary to the players who score all the points and nothing to the rest of the team even though they have all the assists that set up the scoring plays.</p>
<p>Here’s how that same scenario could play out in AdWords. A user shopping for a Valentine&#8217;s Day gift might do several searches, slowly refining their search as they learn what they are interested in buying. They might first search for [Valentine's Gift Ideas], and when they see ads for jewelry, do a new search for [heart pendant] to see all their options.</p>
<p>When the user then clicks your ad and converts, you should assign some value to the fact that [Valentine's Gift Ideas] was the keyword that got them interested in your products in the first place, even though it wasn’t the last keyword they clicked before converting.</p>
<h2>Credit For Assist Clicks &amp; Assist Impressions</h2>
<p>Previously, this type of insight was hard to get because it required a visit to the Search Funnels report. Now, you can simply add the column &#8216;assist clicks&#8217; or &#8216;assist impressions&#8217; to the keywords tab and get that insight on the page you use to manage your keywords.</p>
<p>Another way to use search funnels, according to Google, is to discover poor ad text. On the Ads tab, add the Search Funnel column that shows &#8216;assist impressions.&#8217; Any ads that have a lot of assist impressions but few clicks may not be doing the best job conveying your unique value proposition.</p>
<p>After all, users who saw this ad converted on your site, but when they saw this particular ad, they didn&#8217;t think it was worth clicking… your site convinced them to convert, but your ad couldn&#8217;t even get them to think you offered what they were looking for. These ads may be ripe for an optimization.</p>
<p>I’m looking forward to being able to use search funnel metrics in my campaign management strategies more easily than before. FYI, Google is my former employer and a company for which I occasionally consult.</p>
]]></content:encoded>
			<wfw:commentRss>http://searchengineland.com/search-funnel-data-now-more-actionable-in-adwords-148403/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Four Ways You Can Benefit By Using AdWords Scripts</title>
		<link>http://searchengineland.com/four-ways-you-can-benefit-by-using-adwords-scripts-145530</link>
		<comments>http://searchengineland.com/four-ways-you-can-benefit-by-using-adwords-scripts-145530#comments</comments>
		<pubDate>Thu, 24 Jan 2013 14:23:49 +0000</pubDate>
		<dc:creator>Frederick Vallaeys</dc:creator>
				<category><![CDATA[Channel: SEM]]></category>
		<category><![CDATA[Enterprise SEM]]></category>
		<category><![CDATA[Google: AdWords]]></category>
		<category><![CDATA[account health checkups]]></category>
		<category><![CDATA[AdWords Editor]]></category>
		<category><![CDATA[AdWords Scripts]]></category>
		<category><![CDATA[AdWords UI]]></category>
		<category><![CDATA[analyze account structure]]></category>
		<category><![CDATA[Google Apps Scripts]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[keyword bid performance]]></category>
		<category><![CDATA[quality score report]]></category>

		<guid isPermaLink="false">http://searchengineland.com/?p=145530</guid>
		<description><![CDATA[The best kept secret for saving time and improving results in AdWords may very well be AdWords Scripts, a lightweight automation tool that is easier to use than the API but more powerful than the standard interface and the AdWords Editor. As highly as I think of the AdWords UI (I helped build it for [...]]]></description>
				<content:encoded><![CDATA[<p>The best kept secret for saving time and improving results in AdWords may very well be AdWords Scripts, a lightweight automation tool that is easier to use than the API but more powerful than the standard interface and the AdWords Editor.</p>
<p>As highly as I think of the AdWords UI (I helped build it for 10 years, after all), when I recently started working with accounts of big advertisers, I found myself frustrated at how manual, repetitive, and slow it was to generate custom reports and act on my findings.</p>
<p>The API could let me automate to my heart’s content, but getting started meant waiting for Google to review my application for access and then working with engineers to build the desired functionality. I wanted something that would make me more efficient right away, so I turned to AdWords Scripts.</p>
<h2>AdWords Scripts Have A Few Key Benefits</h2>
<ul>
<li>Just like Google Apps Scripts, they use JavaScript, a language that’s easy to learn and has tons of free support and documentation online</li>
<li>They come with a slew of built-in functions to interact with common structural elements like accounts, campaigns, ad groups, keywords, and ads so you don’t need to spend time figuring out how to write this code, and you can just focus on adding your business logic</li>
<li>Scripts can be scheduled to run automatically, as often as hourly or as little as once per month, making it possible to automate frequent tasks</li>
<li>They can be integrated easily with other Google services like Gmail or spreadsheets making it easy to create a workflow that is customized to your needs</li>
</ul>
<p>If you’re worried that creating an AdWords Script will be too hard, fear not! Google has included several fully functional scripts in their documentation and some of these may even be the complete solution to one of your problems.</p>
<p>I was able to get started by making small tweaks to example scripts and slowly learning the full range of capabilities. Look at how few lines of code are needed in this example from Google to increase bids for keywords that are performing well:</p>
<p><div id="attachment_145531" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-145531  " alt="AdWords Scripts Example" src="http://searchengineland.com/figz/wp-content/seloads/2013/01/adwords-scripts-example-code-300x203.png" width="300" height="203" /><p class="wp-caption-text">Sample code for increasing keyword bids</p></div></p>
<p>This example doesn’t do anything you can’t achieve with an Automated Rule so here are a few ways that Scripts let you go above and beyond the standard capabilities of the AdWords UI:</p>
<ul>
<li>Email a list of recommended action items whenever a script’s analysis uncovers a new opportunity. For example, when it finds ad groups with only one ad variation, email the person in charge of ad texts that they should test another variation in those ad groups.</li>
<li>Add data to a Google Spreadsheet where it incorporates some of your own business logic. For example, based on ROI goals, create a spreadsheet that highlights underperforming ad groups in red and sorts them from biggest to smallest opportunity.</li>
</ul>
<p>Below are a few more detailed examples of problems I’ve solved with AdWords Scripts.</p>
<h2>1.  Create A Historical Quality Score Report</h2>
<p><em><strong>Problem:</strong> </em></p>
<p>If you’re going to try to improve Quality Score (QS) in an account, there are two things you’ll need that AdWords reports don’t give you: a way to monitor progress and a way to prioritize which keywords, ads, and ad groups to prioritize. Normally, when tackling this type of problem, it involves a lot of manually created pivot tables.</p>
<p><em><strong>Solution:</strong> </em></p>
<p>Build an AdWords Script that steps through every keyword in the account and collects the data about QS and impressions. (Side note: if an account has too many keywords and causes the script to time out, limit it to look at only the highest volume campaigns.)</p>
<p>Once you have all the keyword data, use it to calculate impression-weighted QS values for each ad group as well as the account-level QS.</p>
<p>Here’s a simple example of the math to get the weighted QS of an ad group: determine what percentage of an ad group’s impressions go to each keyword and then multiply this by that keyword’s QS. Add up all the weighted QS numbers to get the ad group level QS.</p>
<p><div id="attachment_145533" class="wp-caption aligncenter" style="width: 583px"><img class=" wp-image-145533  " alt="How To Calculate Impression Weighted Quality Score" src="http://searchengineland.com/figz/wp-content/seloads/2013/01/how-to-calculate-weighted-quality-score1.png" width="573" height="124" /><p class="wp-caption-text">How To Calculate Impression Weighted Quality Score</p></div></p>
<p>Then, the script pushes all the data into a Google Spreadsheet. When you schedule it to run daily, you will have a historical record of QS. And, with just a few additional tweaks to the script, you can even get the names of ad groups that are prime candidates for an optimization.</p>
<p><div id="attachment_145534" class="wp-caption aligncenter" style="width: 473px"><img class="size-full wp-image-145534 " alt="Historical Quality Score Chart" src="http://searchengineland.com/figz/wp-content/seloads/2013/01/historical-quality-score-chart.png" width="463" height="267" /><p class="wp-caption-text">Build A Historical Quality Score Chart With AdWords Scripts</p></div></p>
<p>&nbsp;</p>
<h2>2.  Find Keywords That Are Underperforming After An Optimization</h2>
<p><em><strong>Problem</strong>: </em></p>
<p>After doing an account restructure, you’ll want to know if there are keywords that are performing worse than before the change. Because the keywords have been moved to new ad groups, it’s hard to use the AdWords interface to compare the performance without jumping back and forth between different ad groups or without doing a whole bunch of vlookups in a spreadsheet.</p>
<p><em><strong>Solution</strong>: </em></p>
<p>Rather than manually matching up rows in two reports, our script does it for us. Tell the script the name of the new campaign and the old campaign and the date ranges for which to compare metrics.</p>
<p>It then gets the data for each keyword across the selected campaigns for the two specified date ranges and outputs the combined totals to a spreadsheet where you can quickly compare the performance before and after the optimization.</p>
<p>Rather than it being a chore, now it’s easy to check in on an optimization more frequently to find out if further tweaks are needed.</p>
<h2>3.  Automate Account Health Checkups</h2>
<p><em><strong>Problem</strong>:</em></p>
<p>This being the start of a new year, you’ve probably seen a few articles that suggest now is a great time to check up on the health of your account. But why do this only once per year? If you manage your account actively, there are probably portions that get out of shape all the time, and it’d be useful to know about these opportunities more frequently.</p>
<p><em><strong>Solution</strong>: </em></p>
<p>Build a script that analyzes account structure. It steps through an entire account and counts the number of keywords, the individual keyword match types, ads and ad groups. Based on triggers that you choose, like the minimum and maximum allowed ad texts per ad group, the script sends an automatic email about account elements that fall outside these boundaries. For example, when it finds an ad group that has more than 20 keywords, it sends an email reminding the team to split this into multiple ad groups.</p>
<h2>4.  Automate Actions For Which No Bulk Action Exists</h2>
<p><em><strong>Problem</strong>:</em></p>
<p>When Google determines an ad is not performing as well as the other variations and starts to serve it less, we like to get rid of that ad and replace it with a new variation to challenge the top performing ad. You can do this by looking for the ad with the lowest percentage served in every ad group.</p>
<p>Unfortunately, there is no report that returns just the lowest performers across an entire account, and even if this existed, you wouldn’t want to delete a low performing ad if it was the last one in an ad group.</p>
<p>We need a solution that analyzes individual ad groups and incorporates some business logic for how many ads we want to keep in each ad group.</p>
<p><em><strong>Solution</strong>: </em></p>
<p>Build a script that evaluates every ad group individually by analyzing all ad variations’ metrics for percentage served, CTR and conversion rate. Delete or pause the ad with the lowest percentage served but not if that ad’s performance is within 10% of other variations and not if the ad is contributing a larger than expected number of clicks or conversions.</p>
<p>Of course, the script should also not remove the ad if that would leave the ad group with no active ads. If you want to take a look at what the script will do before applying the changes for real, add a switch to run the script in test mode where it reports what it will change before making the change.</p>
<p>These are just a few of the ways I’ve put AdWords Scripts to work on my accounts, allowing me to focus on the things that can’t be automated.</p>
]]></content:encoded>
			<wfw:commentRss>http://searchengineland.com/four-ways-you-can-benefit-by-using-adwords-scripts-145530/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
