Friday, 27 March 2020

COVID-19, Google Ads & Your Business

At the time of writing (late-March 2020), it would be easy to conclude that the COVID-19 virus (aka Coronavirus) is going to be a disaster for all businesses.  Self-isolation, lockdowns and other less obvious changes to consumer behaviour are already causing large falls in revenue in certain verticals, and it's likely to get worse before it gets better.

However, not all businesses should be adversely affected, and even those that are can almost certainly mitigate the effect and look for opportunities to bolster their revenue in the coming months.  So, what steps should you be taking as a Google Ads advertiser, or as someone who may consider Google Ads as an option during the outbreak?

Don't Panic

In the immortal words of the late Douglas Adams, "Don't Panic!".  I've already seen a number of posts online from advertisers who appear to be pausing their Ads campaign(s) as a knee-jerk reaction to the situation.  Sure, there are going to be a lot of advertisers who will find their accounts are no longer (as) profitable as they were and for many pausing their campaign(s) is probably a wise move.  However, there will also be a lot of advertisers who will be unaffected and probably a lot who will find their business actually grows during this period.  

People have not completely stopped buying or using services, their buying and use patterns have just changed and that change will affect different businesses in different ways.  So don't leap before you look!

Change Priorities and Re-examine Opportunities

If you sell a range of products or services it's likely you'll have optimised your Ads campaign(s) for those that sell well.  However, you should now be looking at your range and considering how performance may change and make appropriate alterations to your Ads.  For example, if you sell games you may in the past have found games for large groups or parties to be the most profitable while games for individuals/families were less so.  Given the current restrictions that situation is almost certainly going to be reversed.  Equally, if you've tried Ads in the past and they didn't work well for you, consider whether that may have changed.  Think about what people can do at home rather than what they can't.  Just a few examples are DIY, gardening, hobbies (painting, crafting, modelling, etc.), cooking, car maintenance, and a whole host of things that people usually complain they don't have time to do.

If you've tried to promote your scale-model kits online in the past and failed, now could be your time...

Be Transparent

Make sure your customers know you're aware of and responding to the COVID-19 outbreak.  Your customers are likely to be asking questions about hygiene and handling procedures - even for products that really aren't affected by such things - so make sure you have details of what your company is doing FRONT PAGE on your site and, most importantly, do what you're saying.  If you tell your customers you've got hand-sanitiser at every packing station, make sure you have hand-sanitiser at every station.

If you are getting questions from customers about the virus and your response, make sure you're adding these to your FAQ page and/or site information.

The absolute worst thing you can do is pretend nothing is happening.  It doesn't matter what your personal beliefs are, what matters is your customers' viewpoints and concerns so make sure you address them.

Be Responsive

Right now nothing is certain so it's vital that you stay up-to-date with the news that affects your business (and your customers).  Make sure you keep your Ads and your website up-to-date as well, reassuring your consumers that you're responding appropriately and in a timely fashion.

Consumers always respond well to Ads that appear to be specific for a time/event and this will apply now.

Don't Reach Too Far

If you've not currently got an online e-commerce solution and your business seems like it might benefit during the pandemic, think long and hard before devoting resources to make too great a change to your business practices.  An e-commerce site could easily take two months or more to build and fully test and, hopefully, in a few months time all this will be over and your investment may not be appropriate/economical in the long term.

If you believe you have opportunities for direct-selling online, consider other options such as taking orders by email or phone before jumping towards a full e-commerce build.

Equally, think very hard before extending or altering your product range.  If you currently sell hiking boots and have established a good customer base, consider whether suddenly starting to sell face-masks is going to help your business or damage your brand long-term.  (If you do sell hiking boots, now might be a good time to focus on those anyway, rather than face-masks).

As with all "sudden" demands for certain products the general rule is that if you weren't in that market at the start, you're too late, so think elsewhere...

Don't Mis-sell or Mislead

There is a LOT of misinformation, rumour and downright lying happening on social media and elsewhere online during the outbreak.  DO NOT be tempted to try and sell miracle cures or preventative medicine/equipment.  Google has already suspended countless Ads attempting to take advantage of the unwary and it is very likely your account will be permanently suspended if you attempt to circumvent the polices.  Don't do it.

When it's Over...

While it seems a long way off at the moment, eventually life will return to normal and you should ensure you then re-examine your accounts to put things either back to how they were or at least to a position where you can re-evaluate what has changed again.  No one will want to see Ads talking about the Coronavirus three months after it's a nasty memory, so set a reminder and be prepared to make changes again to keep your account current.


If you need help you can always contact us.  Google's support services are as affected as any other business but the support community is still active and able to answer any questions you may have.



Wednesday, 16 October 2019

Why Researching Your Purchase is SO Important

There are some easy ways to make money these days on the Internet, as long as your morals are loose at best.  One of the primary options is to sell something online using convincing advertising and source that product at a ridiculously low price from overseas.  This particular scam comes in two flavours, you can either market a product that is usually expensive at a low price (though still far higher than its cost to the supplier) or you can market a product that is usually cheap at an inflated price based on its "revolutionary" nature.  Here's a couple of examples I've seen recently.

The miracle showerhead
A few months ago I saw an Ad for a showerhead that included some impressive CAD design drawings exposing the inner workings which, apparently, ensured your shower water was soft, clean and ionised (or some similar rubbish).  The image of the actual product looked pretty good and the Ad was backed by a single page site including testimonies, 5* reviews and all that.  But it was £89.  That's a LOT of money for a showerhead so my cynical hackles were raised even further.  A quick search on Amazon found another supplier for what was clearly the same product, but at £49, OK, that's an improvement, but still ridiculous.  More searching and the price from different suppliers continued to drop, £44.99, £39, £35, you get the picture.  By now it was clear that this was one of the above scams, selling a cheap product at a high price, so I wondered just how cheap they were to buy.  The screenshots below tell the story:

Claiming an original price of £39.90
Here's one site I found for this post (I couldn't find the original one where it was £89, hopefully the owners of that site are no longer able to trade). This site offers the head at a much more reasonable £19.90, "reduced" from £39.90. 

Note the interesting claims.  And here's an eBay listing.  Anything look familiar?
Yep, £3.98 with free shipping.





In case you can't read it, yes, that's £3.98 with free shipping.  So the eBay seller here is able to sell this product at £4, pay for the shipping themselves, and still make a profit!

How does £19.90 sound now?

The other example I've seen recently is for a drone.  According the video, the drone was developed by a disgruntled ex-employee who was fired for standing up to his bosses when they switched to using low-quality components for their own well-known drone.  The video promises the highest quality components, revolutionary performance and, well, everything including the kitchen sink.

The reality?  IF you buy one of these drones you'll probably receive one, but the reviews online tell a different story to the video.  Poor quality build, low-spec features, ultra-low reliability.

The drone is an example of the second kind of such scams, selling something that is usually expensive at a vastly reduced price while giving a good reason to do so (the unfair practices of major sellers).  Interestingly enough, just a few weeks after I saw the drone video I saw it again, at least I thought I did until I realised it was pretty much the exact same sequence of shots, the same script, swapping out "drone" for "phone" in words and images.  That's just lazy.

So, by all means follow enticing Ads, it's how legitimate traders promote their businesses but, as has always been the case, if something seems too good to be true, it probably is and you have the search tools at your fingertips to check it out.

Amazon and eBay are good places to look for the same products being sold by multiple vendors.  On Amazon if you see the same product sold by 10 different people at 10 different prices, that's almost certainly an indication that it's a dirt cheap import and should be avoided.  Oh, and don't be fooled by minor branding/colour changes, they're easy to change on supply.

On eBay you're more likely to find the product at close to its real value (see above), though as I said, if they're able to make a profit at that price, think what the actual value of that product might be.  With a showerhead the worst that's likely to happen is a disappointing shower, with a drone you could be looking at physical injury or worse.

Caveat emptor.












Tuesday, 9 June 2015

Understanding Every Searcher's Intent

Advanced Keyword Management Technique Using The Search Terms Report


The search terms report in AdWords should probably be the first thing you check when you are trying to better understand your account health or looking to make it more efficient. Keyword management is an art of balancing reach and cost efficiency - if you have too many broad keywords, you could be paying for clicks that are driving little or no value to the campaign goal. On the other hand, if you have too few exact keywords, you could be falling short of the target number of conversions. To find the sweet spot, the search terms report should be periodically used to add keywords and block irrelevant searches. 

Sometimes, it can get too much. It's too time-consuming to check search terms every day, but checking it too infrequently, you face hundreds and thousands of search terms with no way of going through them all.

Since I don't check search terms frequently, I came up with a technique to work with a large search terms report. This post is for those whom, like myself, have scratched their head wondering if there's any way to comb through rows and rows of search terms and understand every searcher's intent.

Before I get to the step-by-step guide, take a step back and imagine looking at a keyword and the search query that triggered it. As you look at the association, how do you determine if the keyword did its job right being triggered for that particular search term? The answer is in intent.


Pamella Neely at SEMrush did an excellent job explaining how you can spot intent in each search term. “Each search query is not just empty words,” she says. “It holds an elusive but critical intent behind it.”


The key is finding the word within a search term that signal intent, because the intent is what determines if someone will convert or not. Looking for the intent keyword in each line is a lot easier than evaluating every word. Let’s see what I mean with an example below.


blue hats for free (4)
free yellow hats (3)
green hats free giveaway (4)
buy one get one free red hat (7)
free coupons for yellow hats (5)


There are 23 words in the five search terms and free appears in every line. What if the search terms were dissected and the words were counted? Free would be at the top of the list.


While all the search terms may point in the same direction - I want free stuff - because the search terms have different modifiers and order, they appear in separate lines. This is the biggest difficulty working with a large volume of search terms; there are countless ways to how people search. Although this example lists similar search terms together, in an actual search terms report, they could be anywhere in a list of thousands of rows. Also, if we don’t know what we are looking for, how are we going know where it is?


Here’s a guide on how you can quickly find these intent keywords in a large search terms report.


Step 1: Download a search terms report in the Keywords Tab.


Make sure the date range is wide enough for a report to have a large volume. Otherwise, it’s more efficient to work in the platform and make changes directly.




Step 2: Copy the search terms and paste them on to a single column in a new tab


TIP: Click the column heading to select the entire column.




Step 3: Select all rows below the heading


Select A2 and follow the instruction on the image to select all occupied cells in Column A.




Step 4: Separate every word in all of the search terms


Go to the Data tab and click on Text to Columns. Select Delimited and then “Space”. This indicates that white spaces are where splits will occur.




Step 5: Use a macro to put all the words into a single column


We are going to use a macro that moves all delimited words to right below the last occupied cell in Column A. If you don’t see the Developer Tab, follow this guide to enable it.




Copy and paste the following macro (Source: MrExcel):


Sub test()
Dim LR As Long, i As Long
For i = 2 To 4
   LR = Cells(Rows.Count, i).End(xlUp).Row
   Range(Cells(1, i), Cells(LR, i)).Copy Destination:=Cells(Rows.Count, 1).End(xlUp).Offset(1)
Next i
Columns("B:Z").Delete
End Sub


Make sure the macro is pasted only on the sheet that has the search terms.




Save the file in the Excel Macro-Enabled Workbook format (*.xlsm).


Step 6: Create a pivot table


Make sure the range includes the entire column (A:A). Filter out (blank), numbers and common words like prepositions in the pivot table and sort the table in descending order from largest to smallest.




And there you have it. This table lists every word in the search terms report separately. When you consider that it’s only one or two words that signal the intent of a search, you can really see the value of arranging all the words like this.


Personally, I’ve used this method to add negative keywords more often that I’ve used it to add keywords. Because I can set the match type to be phrase, adding just a couple of irrelevant negative keywords ensures that I’m blocking all possible variations that include those words.


Conclusion


Users vary a lot in how they search and it can get very overwhelming trying to digest every search term in its entirety. This method will help you find just handful of overarching words that are roots of many different variations. Of course, some queries could lose their meaning when dissected this way and you shouldn’t use this every time you look at a search terms report. Think of the method as an occasional in-depth review.

Keywords in paid search platforms are probably the most important element in your campaign. Think of it this way, even if you have not so good ad copies and a landing page, having all the right keywords could get you some conversions; conversion rate may not be high, but it will still be higher than 0. If you have zero relevant keywords, but the best ad copies and landing page, you won’t get any conversion. This is how important keywords are. Search funnels, customer’s online journeys varying in lengths and complexity, all start with a search. Keyword selection is like picking the paths that you think your customers will travel. It’s important to frequently check that you are on the right paths.

Monday, 25 May 2015

Avoiding Script Timeouts - Part 3

Avoiding Script Timeouts Part 3


If you've done absolutely all you can to speed up your scripts but they still time out now and again it may not matter.  Depending upon what your script does, if it completes 90% or so of the required actions on a regular basis that may be enough but there's a couple of things you can do to make the best of this situation even if you can't solve the speed issues.

Use a sort order

If you're working to change Keyword positions or optimise for performance it's a good idea to use a sort order to ensure the most important elements are processed first in the script.  In this way if the script does time out you should have hit the bulk of these most important elements already.  For example, if you're optimising for performance you'll likely want to sort by Cost descending so that the elements with the biggest spend get optimised first.  You can do this simply in your selector using the OrderBy method:

var campSelector = AdWordsApp.campaigns()
  .OrderBy("Cost DESC")
  .get();

You can order by any of the same columns you can use in the Condition methods so for example, CTR (note, of course, that in scripts this is written as "Ctr"), AveragePosition, Impressions and so on.

Once you're ordering by some metric, if you want to cover your whole set of elements even if the script times out, you can consider changing this sort order every now and again.  So, for example, you could change the sort order to ascending just for Monday and Thursday, as follows:

var d = new Date();
var theDay = d.getDay();
// day "0" is Sunday
var sortOrder = (theDay == 1 || theDay == 4)? "ASC" : "DESC";
var campSelector = AdWordsApp.campaigns()
  .OrderBy("Cost " + sortOrder)
  .get();

In this way, twice a week your script will run in the "reverse" direction so you should pick up any elements that are frequently missed when it times out before reaching them.  You can, of course, change how often you do this just by editing the day choices.

Check the time

Time outs can be most annoying when the last thing the script does is write results to a spreadsheet, send an email or perform some other final action.  If the script times out this final action won't happen so you could end up with incomplete data or lacking notifications.  Fortunately, there's a solution to this too.

The AdWordsApp object has a useful method called "getExecutionInfo()" that has a method itself called "getRemainingTime()".  Using these methods you can check how long there is to run (in seconds) before the script times out so if you check this figure frequently you can anticipate a time out and force the final action to happen early.  For example:

if(AdWordsApp.getExecutionInfo().getRemainingTime < 45) {
  // code to exit looping and jump to final action
}

So if there's less than 45 seconds remaining, you can jump out of any loops and force the final action.  How you do this will depend upon the coding but it's usually fairly simple.

Whether a log of an incomplete run is useful is of course dependent upon what you're doing, but even a partial report is often more useful than nothing at all (and you could adjust the reporting to show that it's partial).

I hope you find these tips useful!

Monday, 18 May 2015

Avoiding Script Timeouts - Part 2

Avoiding Script Timeouts Part 2


So, you've done your very best, but that wonderful script that's going to make your life so much easier and your clients so much happier is still timing out every time it runs.  What can you do?

If you're already selecting only the elements you need and your script is as fast as it can be, there's really only one option to allow scripting to process the entire intended scope - you need to split the process up into smaller chunks.  At the time of writing, AdWords Scripts can run as often as once per hour so there is the opportunity to run the same script up to 24 times per day or 12 hours of run time.  If you can't address your entire scope in 12 hours you need to go back to the drawing board!

So, here are some options for splitting up your intended scope:

#1 - Use Labels

Labels are really useful in scripting since they're a dead easy and quick way to identify elements you want to be addressed by the script.  Let's say you have 20 Campaigns you want to process and your script is timing out before it's finished the 7th Campaign so you're guessing you need to run the script 4 times to be absolutely sure.  Simply apply four Labels, for example "Block_1", "Block_2", etc. to the Campaigns in blocks of 5 (or as appropriate so they have roughly the same "load") then use a condition in your Campaign selector as follows:

.withCondition("LabelNames CONTAINS_ANY ['Block_1']")

When the script runs it will only process the Campaigns with the Label "Block_1".  Run the script 3 more times using the appropriate Labels and you're done.

I'll describe how to do this automatically later, but let's move on to another option.

#2 - Set limits

If you're addressing a large Account it's likely you've got a spread of performance metrics across the elements you're looking to process so you could use conditions to split the scripts up, for example:

.withCondition("Impressions > 1000")

(don't forget you'll need a DateRange condition as well).  This option can be useful where the time that the script runs is important.  You may want to ensure your biggest spenders, for example, are processed first in a day and this becomes increasingly important the more runs you need to make.  If, for example, you need the script to run 10 times before it addresses the whole scope, even if you start at 1am you'll still be into the working day before the last elements are processed so using this sort of condition can ensure the most important ones are done first.

#3 - Use Labels (again)

Another use of Labels is in marking elements are "processed".  So, if you were running your script against Keywords you could apply the Label "Processed" to each Keyword you complete and use a selector with the line:

.withCondition("LabelNames CONTAINS_NONE ['Processed']")

in this way, each time the script runs it'll only work on the Keywords not already processed.  The only real downsides to this method are that you need to use another script to remove these processed Labels before each new "day" of script running and unless you also label Campaigns/Ad Groups your script could be inefficient as it searches Campaigns where all the Keywords are already done.

OK, so there's three options for splitting, but how do you get the script to run more than once?  You could use a number of individual scripts pre-set with their conditions and running at different hours, but that's not very efficient and makes it harder to edit the script (since you have to make sure you make exactly the same edits to each one).  I prefer to use systems based upon the hour of the day and just have the same script run every hour.

For example, the following script snippet will return the hour of the day (in your Account time zone):

var theHour = new Date(Utilities.formatDate(new Date(), AdWordsApp.currentAccount().getTimeZone(), 'MMM dd,yyyy HH:mm:ss')).getHours();

If you've used a Label naming convention like the one I have above, you can then build your required Label name using the following:

var labelName = "Block_" + theHour;

So, in your script, you might have the following:

function main() {
  var theHour = new Date(Utilities.formatDate(new Date(),   AdWordsApp.currentAccount().getTimeZone(), 'MMM dd,yyyy HH:mm:ss')).getHours();
  if(theHour > 0 && theHour < 5) {
    var labelName = "Block_" + theHour;
    doProcess(labelName);
  }
}  

function doProcess(labelName) {
  var campIter = AdWordsApp.campaigns()
    .withCondition("LabelNames CONTAINS_ANY ['" + labelName + "']")
    .get();
}

Set that script to run every hour and it will only process the Account in the scripts that run at 1am, 2am, 3am and 4am and will automatically run on the Campaigns with the appropriate Labels.

You can extend this use of Labels and hours to many other situations so go have fun!

In the next post I'll look at some options that'll make the best use of a script you just can't stop timing out.

Tuesday, 12 May 2015

Avoiding Script Timeouts - Part 1

Avoiding Script Timeouts - Part 1


Scripts are possibly the most useful tool for managing larger Accounts.  Scripts can apply complex processes automatically and reliably across a large number of AdWords elements and allow you to concentrate on what you do best - marketing.  However, ironically, when the Account is very large and/or the script complex, you may find your marvellous script consistently "times out".  At the time of writing, scripts can only run for 30 minutes before automatically terminating; this obviously means there's the potential for an unknown percentage of your AdWords elements to remain unprocessed but it also often means important logging information is lost (as "final" logs are never reached).

This post will hopefully give you some pointers to ensure your scripts run as quickly as possible and the next will give you some options for dealing with scripts that simply cannot be made to run under 30 minutes.  So, let's start with the tips:

#1 - Good structure

All programming benefits from a good structure and with AdWords scripts the structure can be particularly important in terms of run time.  Most scripts will use some form of selector to fetch AdWords elements (Campaigns, Groups, Keywords, etc.) and then process them in some way but how you fetch these elements can have a big impact on how fast a script runs.  Imagine each selector is like sending an office minion out of the building to get something from a local store; the more often you send that person out the more time it's going to take to complete your task.  So, for example, if you want to work on Keywords, rather than selecting Campaigns, then iterating them to select Ad Groups, then iterating those to select Keywords, look for a method to select the Keywords you need in one selector.  Labels are an excellent way to do this (and you could use another script to apply and/or remove the Labels, of course, running before your main one).

Don't forget things like Campaign and Ad Group names are accessible from Keyword objects so you don't need to iterate Campaigns just to retrieve their names for reporting.

As a rule of thumb, your selector should, as far as possible, select the objects you want to work upon directly and if you're not doing that, you should think about how you could.

#2 - Only select what you need

Make sure your selectors use conditions that ensure they return only the elements you need to work upon.  One very common bad practice (in all programming/scripting) is to fetch a large dataset and then examine each returned element for suitability, discarding those that don't fit.  For example, you may select all the Keywords in a Campaign, then use conditional statements to check whether those Keywords are enabled or if they have impressions, etc.  It is much better practice (and far faster) to include these conditions in the original selector so if you want to work only on Keywords that are enabled, ensure you include these conditions in your selector:

.withCondition("Status = 'ENABLED'")
.withCondition("CampaignStatus = 'ENABLED'")
.withCondition("AdGroupStatus = 'ENABLED'")

If you want to check for clicks or impressions, you can do so, as long as you include a time range in the selector, e.g.

.withCondition("Impressions > 0")
.forDateRange("LAST_30_DAYS")

The same thinking can be applied to all other elements you might select; try to use the selector itself to define your returned objects rather than grabbing a huge bundle then spending ages throwing most of it away.

#3 - Use AdWords API reports

The many prebuilt reports in the API are much faster at retrieving AdWords elements than the normal selectors so where possible, use these reports.  The process of using them within scripts is quite different from a selector but there are plenty of examples on the web and once you've used one, the process is similar for all.  These reports aren't appropriate for all script uses but if you can use one, you should.  See here for a list of available reports.

https://developers.google.com/adwords/api/docs/appendix/reports

#4 - Watch your Logging

Logging is, of course, a vital part of scripting, especially in the development/testing stages but logging has a surprisingly big impact on run time, particularly when the logs are frequent and within a loop.  Try to keep your logging to what is absolutely necessary and once you're sure the script is working correctly, consider whether you can remove any.

#5 - Keep loops clean

Avoid including statements within loops that don't need to be calculated in each iteration.  For example, if you wanted to compare each Keyword's CTR against the average for an entire Campaign, you only need to calculate the Campaign average once, don't include that calculation inside the Keyword iterator.  The script within  a loop should be only that needed for the loop to operate correctly.

#6 - Check for "bloat"

It's very easy when writing script to check for certain conditions (average position vs ROAS or CTR vs number of conversions, etc.) to end up with several conditional statements.  It's just as easy for the final version to end up with redundant conditions.  Make sure all the tests/conditions you apply are unique and where they are, consider whether there's a quicker way to write the same set of conditions.

There are other tips for speeding up scripts that can be learned from the many online pages that teach speed improvement for JavaScript and while some can't be applied to AdWords scripts, most can and I'd recommend some quality time with Google search.  You might try starting with a search on "improve javascript speed".

In the next post I'll look at what you can do if despite your best efforts the script still times out.  Good luck!

Monday, 30 March 2015

Shopping Promo Rotation

As we all know, Shopping Campaign Ads can - and should! - contain a short promotional text line to enhance their appeal.  You can read up on it here.  Promotional text can have a big impact on the performance of your Shopping Ads but how do you test different versions?  Although Shopping Ad Groups allow you to create more than one Ad (and therefore more than one version of the promo text) there's currently no option to rotate these Ads or optimise them for conversions or clicks.  I recently wanted to test various texts and came up with this solution, using Scripts, of course.

What does it do?
In this simple form the script attempts to replicate the "rotate evenly" setting available in regular Campaigns.  Given any number of Ads in the Group, when the script runs it pauses any currently enable Ad then enables the one with the least number of impressions "today".  Run once an hour, this should effectively rotate all your Shopping Ads throughout the day allowing you to examine their performance over a reasonable period of time.

Since the Ad chosen to be enabled is always the one with the least impressions, in theory the Ads should rotate in such a way that the same Ad isn't always shown at the same hour of the day, making the test a little more "even", though you could always experiment with programming in another randomising factor.

How do I choose the best Ad?
Once (if) you see a clear "winner" you can either simply remove the script schedule and ensure that winner is enabled, or you can remove the other Ads, it's up to you.

The code
Copy and paste the code below into a new Script, give it an appropriate name, authorise it then PREVIEW the script to check it works as expected.

Note that as provided, the Script will operate on all Shopping Campaigns in the Account.  If you wish to limit which Campaigns it operates upon, you can enable either the name choice condition or the Label choice condition (by removing the // at the start of these lines).  Note also that the script expects there to be at least two Ads in each Campaign.

Ideally I'd suggest scheduling the script to run every hour but you could also try just once a day or even once a week.  Experiment!

As always, the script is provided with no guarantees and you should preview and test it thoroughly before use.

UPDATE: The code below now checks for multiple Ad Groups and uses only those enabled.

UPDATE: Now always rotates to a new Ad, regardless of impressions count of Ad currently showing.


// Shopping Ad Rotation Script (c) Jon Gritton 2015
function main() {
  var sCamp = AdWordsApp.shoppingCampaigns()
    // optional conditions to pick specific Campaigns
    //.withCondition("Name CONTAINS 'XXX'") // use to pick by name
    //.withCondition("LabelNames CONTAINS_ANY ['ShopAdTest']") // use to pick by Label
    .withCondition("Status = 'ENABLED'")
    .get();
  
  while (sCamp.hasNext()) {
    var thisCamp = sCamp.next();
    Logger.log(thisCamp.getName());
    var pAdGs = thisCamp.adGroups()
      .withCondition("Status = 'ENABLED'")
      .get();
  
    while (pAdGs.hasNext()) {
      var thisAdG = pAdGs.next();
      var pAds = thisAdG.ads()
        .withCondition("Status = 'ENABLED'")
        .get();
      while(pAds.hasNext()) {
        var currAd = pAds.next();
      }
      
      var eAd = thisAdG.ads()
      .withCondition("Status = 'PAUSED'")
      .orderBy("Impressions ASC")
      .forDateRange("TODAY")
      .withLimit(1)
      .get().next();
      
      eAd.enable();
      currAd.pause();
      Logger.log("Enabled: " + eAd.getId() + ", Paused: " + currAd.getId());
    }
  }
}

Thursday, 11 September 2014

TIME for balanced reporting on timepieces

This article in this week's TIME magazine left me momentarily lost for words.

Apple Watch CoverIt was not the writing itself, or the vague predictions for the future, but simply that it completely ignores the existence of other wearable tech, or at least the online section of the article does, and that's what really matters since it is that version that will be shared around the Web.  (You can read it here:  http://goo.gl/ZLDMUE).

To read this article you would believe that until Apple's announcement of their Watch, no-one had ever seen wearable technology on the wrist.  There had been no Pebble, no Sony, no Samsung Gear, no LG G Watch R and certainly no Moto 360 (and my apologies to the others I've missed).

Bear in mind we're talking here about a product that hasn't even been released yet, and is not scheduled to be sold until "early" 2015 (and we all know "early" has a very flexible definition).

With the Android OS having held the market share of smartphone devices (as at the time of writing, source: http://goo.gl/cXzFFq) it is hard to believe an article could focus so completely upon a device that not only doesn't currently exist in public, but when released is likely to be useful to a much smaller percentage of that market share.

Consider some of the claims:

"The Apple Watch is just the start.", from the front cover.  Well, it's the start if you considering "the start" to be joining a race long after most of the other major competitors have already run three laps.

"This is new, and slightly unnerving." Again, no it isn't (new - it may be unnerving).  The Pebble was released in January 2013, 18 months ago, but if we want to be true to the idea of "wearable computers on the wrist" we have to go all the way back to 1984, yes, 30 years ago, and the Seiko RC-1000 which, ironically, was compatible with both the Apple II and the IBM-PC.  There have been many other devices built and proposed since then.

"The Apple watch represents a redrawing of the map that locates technology in one place and our bodies in another."  I'm not even sure where to start here.  This comment ignores not only the numerous other wrist devices, but the whole arena of medical technology implanted in the body, prosthetics, pacemakers, et al.  It also ignores the plethora of for-purpose health monitoring equipment that has been strapped to athletes, amateur and professional alike, for countless years.

I am usually largely immune to the whole Apple bandwagon, but it would have been so simple to have written an article like this that presented a more balanced view of wearable tech and it's disappointing to see it in a magazine I used to trust for that balance and informed opinion.  The Apple Watch, when it's eventually on sale, I have no doubt will be a very fine piece of technology, but please remember that it's not the first such device, not revolutionary, and really doesn't redraw any boundaries that weren't redrawn towards the end of the last century.

Friday, 11 April 2014

Please... check your checkout process!


Many months ago I went to buy a fairly specialised piece of equipment online and found it out of stock.  There are no other suppliers but luckily the site included an "email me when back in stock" option so I went with that and thought no more.  Yesterday I finally received the "back in stock" email and flew to the website, all excited, credit card in hand.  Yes, there it was and, astonishingly after so many months, it was still in my basket so, there's the big blue "Checkout" button and off we go!

Except we didn't "go".  What actually happened was that I spent the next 10 minutes becoming increasingly (and alternately) amazed, frustrated and annoyed at what was quite simply the most laborious and tiresome checkout process I've ever seen.  Here's what happened:

Me:  Clicked "Checkout"
Site:  You must login or register to complete the process.

Why?  Why must I register to buy something from you?  No sane high street store is going to let you get to the till with an expensive basket of their products then refuse to sell them unless you sign up to their newsletter.  OK, but I really want this thing, and anyway, how hard can it be?  So I'm looking at the login screen which asks for a username and password.  Now, as I said, it's been months since I went to this site so I can't remember if I registered to do the "back in stock" thing and there's no clue on the screen what the username might be - is it my email or a name?  Neither, infuriatingly, is there a "forgotten password" process.  You can, apparently, reset your password but presumably that might require you knowing what your username was.  Hopeless.  I go ahead with a new registration, using my normal email, hoping that if that email is already in the system it'll warn me and there might be more options.  No, apparently not, but at least I'm now registered and I'm back to the checkout page, still showing my basket.

Me:  Clicked "Checkout"
Site:  Your account is inactive, you must activate your account before you can checkout.

Seriously?  OK, where's my email tab, yes, there's an email and a link to click.  Clicked.  Opens in a new tab and says I'm now active.  The old tab is still showing the "account is inactive method" so...

Me:  Click "Back".  Clicked "Checkout".
Site:  You must complete your profile information before you can checkout.

By now there is steam coming from my ears.  There's a good chance this thing will be sold out again by the time I actually place the order.  If this hadn't been the only supplier, and they weren't so darn scare, I'd have walked away ages ago.  OK, first page of the modal dialogue asks me if I'm a company or personal buyer.  Well, I'm a company, and I'm in the UK.  Easy enough.  Next page is all the usual name, address stuff, but also a box for VAT number.  Now I've been using the web for a few years so I was able to guess - and guess I had to because there was no other indication - that the red bar to the right of VAT number means that the field is mandatory, which is odd, because not all UK companies are registered for VAT in fact a large proportion aren't.  So, I wonder what happens if I leave that blank.  No, no dice.  No warning either, it just sits there with the "Next" button disabled.  So, presumably if you're not VAT registered you have to buy personally, which would make it difficult for accounting purposes but no matter, I get past this.

Me:  Clicked "Checkout".
Site:  Presents a summary of my order.  Hurrah!  Hang on.  Only at this point did the order display a further £35 of shipping and taxes - this on an item that only costs £85 (or appeared to).  So, I could have gone through all the above and only then found out it was going to cost me £120 instead of the £85 it shows in the basket!  But, I need it and I'm not giving up now so...

Me:  Clicked "Checkout".
Site:
Me:  Clicked "Checkout" (yeah, 'cos that's how computers work, if it didn't work first time it might second)
Site:
Me:  (screaming)  Why won't you do anything?  What do you want now?  Blood?  A signed affidavit from the Prime Minister?

Then I notice in writing 1mm high, dark grey text on a light grey background "You must accept the Terms and Conditions to complete the sale".  I check the box, really hard.

From this point on it all becomes very boring.  I was offered PayPal which, of course, worked effortlessly and a few seconds later I had a confirmation.

The worst of it is, these people probably don't even know they have a problem.  The nature of their products and their relative difficulty to obtain means the likes of me are prepared to cross lakes of fire to buy them but if this were a more readily available product I'd be surprised if they made any sales at all.

So, never underestimate the importance of a smooth and simple checkout process for ecommerce sites, it could be the difference between success and failure.

Wednesday, 8 January 2014

Check your Scripts when Using Shopping Campaigns...

Google has recently confirmed that at present the new "Shopping" Campaign type is not included when using AdWords Scripts to iterate through Campaigns within an Account.  If you run Scripts that examine Campaigns for reporting or control purposes you should check that the Script allows for this omission or you may see unexpected results.

Google is aware of the issue and a fix should be in place shortly.  I'll post again when there is an update.

Wednesday, 27 November 2013

Make Time for Time Lag


If you're an AdWords agency you'll be giving your customers regular reports on performance, and if you're tracking conversions, those reports will include conversion numbers and probably total conversion value.  So, if you produce your reports monthly, do you run around frantically on the 1st of each month preparing a stack of reports then breath a sigh of relief when they're all emailed out?

If so, you may want to rethink your reporting process and perhaps make your 1st of the month a little less stressful from now on.

Sometimes a person will click an Ad, visit the website then buy the product advertised almost instantly but a lot of the time - and varying from business to business - this doesn't happen in such a rapid "one click -> visit -> buy" process.  Certainly as product values increase the path to a decision to buy usually becomes longer; most of us are going to think a lot longer about buying something for $600 than we are something that's only $6.  For these higher value - or simply more "thoughtful" purchases - the path to final conversion will most likely include multiple clicks and multiple visits over many days.  Fortunately, AdWords has a handy report that'll show you exactly how long this path is for your Account; the Time Lag report, found under the Search Funnels section of the Conversions page.

Here's a shot taken from one of my Accounts, covering a period of the past three months:


The figures here are pretty hard to read so I'll pick out just the relevant bits.  The report shows that 65% of conversions and almost 42% of the value of conversions happens within one day of first click, but of course that also means that 35% of conversions and 58% of the value happens more than one day after the first click.  What's really scary here is that 23% of all conversion value occurs more than 8 days after first click and it's still 13% after 12 days.  It's also interesting to note that the graph largely supports the concept that lower value items are purchased more quickly - the first 24 hours has 65% of conversions but only 42% of the value, suggesting these items tend towards the lower price range for this client with higher value items taking more than a day to convert.

So, if I'd prepared my report for this company on the 1st of the month, I am very likely to be missing conversions and value.  In this particular case (a low volume/high value product) those few "missed" conversions could have a substantial impact on ROAS (Return on Advertising Spend) for the reported month.  In preparing this post I checked the above Account on the 1st November, then daily (or so) up to today.  On the 1st, the Account reported 40 conversions for October.  By the 7th November it was reporting 42 conversions, by the 15th, 43.  OK, not a massive change, but one of those 3 "late" conversions was a sale that represented almost 15% of the conversion value for that month.

Don't forget these "missed" conversions will not appear in the report for the following month.  AdWords attributes conversions to the date of first click so if the click happened in October but the actual final conversion occurred in November, a report for November will not show that conversion.

How important the Time Lag factor is to your own Accounts will depend upon their nature.  I've seen Accounts where over 90% of conversions (number and value) occurred within 1 day of first click and 98% within 2 days; for Accounts like this preparing reports on the 7th or so of the month will probably be fine, but for Accounts with data similar to what I've shown above, I usually don't prepare reports until at least the 20th of the month.  It's also a good idea to issue "quarterly" reports that allow for a much longer period.  For example, I might prepare a Q3 report around now.

If you're using Analytics as your conversion tracking, then this issue is less troublesome since Analytics, by default, uses a last click Attribution Model.  However, if you're looking at the data imported into AdWords you need to bear in mind data can be 48 hours or so delayed in transferring across so you're still not really safe reporting on the 1st.

So, if you're in the habit of producing monthly reports on the 1st, it might be an idea to re-examine some of the figures...

More Information on Conversion Tracking Reports

Friday, 25 October 2013

Video Doesn't Have To Be Epic

AdWords Video Ads don't have to be a Hollywood production

I'm a big fan of video advertising - not so long ago I was making short films and music videos so that's perhaps not surprising - but I do truly believe that if a picture is worth a thousand words then video takes that principle and expands it immensely.

Whenever I suggest video as an advertising medium normally the first response I get is that it's far too expensive, time consuming and difficult to produce.  (In fact, this is normally the second response - the first is usually laughter).  However, the world of video has changed hugely in the last few years; even budget priced digital cameras can now shoot HD video in various formats and memory cards continue to drop in price making storage less of an issue.  YouTube continues to become more mainstream - it's now the second largest search engine on the Internet - and consumers are becoming more familiar with using YouTube as a resource, more than just somewhere to look for music videos.  So, it's certainly doesn't have to be expensive, but isn't it still time consuming and complex?  No, not if you don't want it to be.

Here's a handful of video spots I've pulled from random searching.  I don't know if any of these are actually being used as AdWords Ads (I suspect not) but they're all promotions and they're great examples of what's possible.

This first, from Criswell Chevrolet is a classic example of a simple, one-shot, straight to camera setup.



OK, so he stumbles on his lines a couple of times but for me that adds to the honesty and simplicity of the video.  Anyone could produce something like this with any camera able to shoot video.  I really like this.

This second is from the UK and is a little more ambitious but still a simple setup using (I think) just one camera and a handful of extras.  (Warning - you may want to keep your hand near your volume control, this, and the next video can be quite loud...)



Even though there's a lot more going on here than in the first it's nothing that couldn't be done with a simple idea, some makeup and a few friends.  This video would need editing to put together the various shots but most modern cameras include a suite of editing tools along with the product and some of them are really easy to use.  Mind you, I'm not entirely sure I'd want to visit a pie shop like that...

This final video, also from the UK, is another step up.  It may not look much more complex than the last, but there are some trickier video effects employed here and some thought to artistry.  It's still probably only a single camera though and probably shot in a single afternoon (though editing would have taken longer).  This does have a thumping sound track so watch those speakers again...



So, what's stopping you?  Brainstorm an idea, grab a camera and go.  You could be done by this time tomorrow!