The script below uses the Airport Status Service from FAA.gov to enable and pause ads when there is a delay at a major airport. This would be useful for any business that is near an airport that may benefit from delays such as restaurants, bars, or hotels. Your ads could say things like:
You can add or remove airport codes from the list at the top. All you need to do is tag your ads with the label [airport_code]_delay ("ORD_delay","ATL_delay").
What other dynamic data could you use to optimize your ads? Movie times? Sports games? Let me know in the comments below and I'll see what I can come up with.
Thanks,
Russ
/********************************************* * Pause/Enable Ads Based On Airport Delays * Version 1.1 * ChangeLog v1.1 * - Added ability to completely pause non-delay ads * Created By: Russ Savage * FreeAdWordsScripts.com *********************************************/ // For this to work, you need to add a label to all // the ads for each airport. For example, PIT_normal // or SFO_normal var PAUSE_NORMAL_ADS_DURING_DELAY = false; var DELAY_SUFFIX = '_delay'; //the suffix on the label for delayed ads var NORMAL_SUFFIX = '_normal'; //the suffix on the label for normal ads var AIR_CODES = ["ATL","ANC","AUS","BWI","BOS","CLT","MDW","ORD","CVG","CLE", "CMH","DFW","DEN","DTW","FLL","RSW","BDL","HNL","IAH","HOU", "IND","MCI","LAS","LAX","MEM","MIA","MSP","BNA","MSY","JFK", "LGA","EWR","OAK","ONT","MCO","PHL","PHX","PIT","PDX","RDU", "SMF","SLC","SAT","SAN","SFO","SJC","SNA","SEA","STL","TPA", "IAD","DCA"]; function main() { var faaUrl = "http://services.faa.gov/airport/status/"; var args = "?format=application/json"; for(var i in AIR_CODES) { try{ var resp = UrlFetchApp.fetch(faaUrl + AIR_CODES[i] + args); if( resp.getResponseCode() == 200 ) { var json = Utilities.jsonParse(resp.getContentText()); if(json.delay == "false") { Logger.log("No delays at "+json.IATA+". Pausing delay ads if any are running."); turnOffDelayAds(json.IATA); if(PAUSE_NORMAL_ADS_DURING_DELAY) { turnOnNonDelayAds(json.IATA); } } else { Logger.log("Delays in "+json.IATA+" Reason: "+json.status.reason); Logger.log("Turning on delay ads if there are any."); turnOnDelayAds(json.IATA); if(PAUSE_NORMAL_ADS_DURING_DELAY) { turnOffNonDelayAds(json.IATA); } } } } catch(e) { Logger.log("Error: " + e.message); } } } function turnOffDelayAds(airportCode) { var labelName = airportCode + DELAY_SUFFIX; var adIter = AdWordsApp.ads() .withCondition("LabelNames CONTAINS_ANY ['"+labelName+"']") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .withCondition("Status = ENABLED") .get(); while(adIter.hasNext()) { adIter.next().pause(); } } function turnOffNonDelayAds(airportCode) { var labelName = airportCode + NORMAL_SUFFIX; var adIter = AdWordsApp.ads() .withCondition("LabelNames CONTAINS_ANY ['"+labelName+"']") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .withCondition("Status = ENABLED") .get(); while(adIter.hasNext()) { adIter.next().pause(); } } function turnOnDelayAds(airportCode) { var labelName = airportCode + DELAY_SUFFIX; var adIter = AdWordsApp.ads() .withCondition("LabelNames CONTAINS_ANY ['"+labelName+"']") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .withCondition("Status = PAUSED") .get(); while(adIter.hasNext()) { adIter.next().enable(); } } function turnOnNonDelayAds(airportCode) { var labelName = airportCode + NORMAL_SUFFIX; var adIter = AdWordsApp.ads() .withCondition("LabelNames CONTAINS_ANY ['"+labelName+"']") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .withCondition("Status = PAUSED") .get(); while(adIter.hasNext()) { adIter.next().enable(); } }