Let’s wander from the web analytics subject a little and turn our attention to automation of creating Google AdWords campaigns and AdWords campaign management.
Few people know that Google AdWords provides the ability to manage ad campaigns using javascript directly in the interface of the system through Adwords API.
By the way, getting access to Google AdWords API, i.e getting API token, is not that easy.
To gain access to scripts, go to Google Adwords account and choose “Bulk operations” in the right menu, and than “Scripts”:
The next step is to create new script:
To work with the scripts you need to login:
Now when you are authorized you are able to do anything with AdWords PPC management: to manage ad campaigns, ad groups, ads and keywords in AdWords by means of javascript.
By default, there are some complete scripts that solve the following problems on AdWords optimization:
Campaigns
▪ Get each campaign’s cost and clicks last month
▪ Pause low-converting campaigns
Ad groups
▪ Set default bids of all ad groups in a campaign
▪ Enable ad groups for a brand
▪ Pause ad groups that degrade over time
Keywords
▪ Log 20 keywords that had the most impressions yesterday
▪ Pause keywords with bad average position in a campaign
▪ Increase bids of well-performing keywords by 5%
▪ Export daily report into Google spreadsheet
Ads
▪ Export disapproved ads into Google spreadsheet
Also, see below an interesting case of using Adwords script:
Controlling expenses
Let’s suppose we have the task of monitoring expenditures on a certain campaign. This task could be ordinary solved using standard AdWords tools, but using AdWords scripts guarantees us an elegant solution.
So, to complete the script we need:
- Name of a campaign
- Limit size
- Start date of tracking
- E-mail for notifications
All these data need to be entered into the electronic worksheet (save it onto the Google Disk and save the link from a browser of your document as you will need it while making the following steps).
The spreadsheet may be colored to one’s liking, but we won’t advice to change the location of the cells. Fill in the lines that are highlighted in bold.
The algorithm works as follows:
- Once an hour (that is the maximum possible frequency) the script takes the name of the campaign from the table, limit size, start date tracking;
- Calculates expenses;
- Checks whether the campaign is active. If the answer is yes, the script makes control marks in the table. If the campaign is not active, the script doesn’t make any action and just stops.
- Requests a daily account budget (it is explained below why it is done);
- Makes calculations, compares expenses on the campaign starting from a certain date to the present moment, with the deactivation threshold. If the deactivation threshold achieved, it goes to the point #6;
- Disables the campaign;
- Sends an email to the specified email address;
- Makes a corresponding note in a Google table about campaign being disabled and the time of deactivation.
See below the complete script:
function main() {
var ss = SpreadsheetApp.openByUrl( “https://docs.google.com/spreadsheet/ccc?key=0Ahq3mrXBUIYHdDBtZS1FUFBuamZQU2FWSTB4MzZDT1E#gid=0”);//link to your table var balance = ss.getRange(“C3”).getValue(); //limit size var data_start = ss.getRange(“C4”).getValue(); //Start date of tracking data_start = Utilities.formatDate(data_start, “PST”, “yyyyMMdd”); var data_today = new Date();//Today’s date data_today = Utilities.formatDate(data_today, “PST”, “yyyyMMdd”); var company_name = ss.getRange(“C2”).getValue(); //Name of campaign that is tracked var email = ss.getRange(“C5”).getValue(); //E-mail for notifications var cost = 0;// Initial cost var status = ss.getRange(“E7”).getValue(); //Status of campaign (if disabled by script) var campaignsIterator = AdWordsApp.campaigns() .withCondition(“Name = ‘” + company_name + “‘”) . get(); while (campaignsIterator.hasNext()) { var campaign = campaignsIterator.next(); var stats = campaign.getStatsFor(data_start, data_today); cost += stats.getCost(); }//Determining the cost of expenses for the specified period of time if( campaign.isEnabled()){ ss.getRange(“E7”).setValue(“0”); ss.getRange(“D7”).setValue(“”); //Determining the status of the campaign enabled/disabled. If enabled updates service information. var budget = campaign.getBudget() Logger.log(“Spent during the period: ” + cost);//Debug information is displayed in the log Logger.log(“Daily budget: ” + budget); Logger.log(“Expenditure restraint: ” + balance); var budget=campaign.getBudget()//Determining daily budget if (cost >= balance-(budget/12)) {//Checking overspending campaign.pause();//Put the campaign on pause and write an email var subject = “Campaign” + company_name + ” exhausted its budget limit”; var body = “Spent: ” + cost + ” Specified spending limit:” + balance + ” campaign ” + company_name + ” will be disabled” ; MailApp.sendEmail(email, subject, body); Logger.log(“email sent: ” + email);//Debug information is displayed in the log ss.getRange(“E7”).setValue(“1”);//Control mark in Google table ss.getRange(“D7”).setValue(new Date());//Record to the time table and date of stopping campaign } } }You may also want to check the developer’s guide.
Leave a Reply