var MONTHLY_BUDGET = 990.00; // set to less than client budget if run daily, more if hourly.
function main() { var itsFirstOfTheMonth = ((new Date()).getDate() == 1); var totalCostMTD = getTotalCost().toFixed(2); Logger.log("Total cost this month: $" + totalCostMTD + "; Monthly budget: $" + MONTHLY_BUDGET );
if (totalCostMTD >= MONTHLY_BUDGET) { Logger.log("Spend has reached monthly budget."); applyLabel(); pauseCampaigns();
};
if (itsFirstOfTheMonth) { reenableCampaigns(); };
};
function getTotalCost() { var campIter = AdWordsApp.campaigns().get(); var totalCost = 0; while (campIter.hasNext()) { totalCost += campIter.next().getStatsFor("THIS_MONTH").getCost(); }; return totalCost; };
function applyLabel() { var labelName = 'Active Last Month'; AdWordsApp.createLabel(labelName);
var campaignIterator = AdWordsApp.campaigns() .withCondition('CampaignStatus = ENABLED') .get(); while (campaignIterator.hasNext()) { var campaign = campaignIterator.next(); campaign.applyLabel(labelName); }; Logger.log('labels applied.'); };
function pauseCampaigns() { var campaignIterator = AdWordsApp.campaigns() .withCondition('CampaignStatus = ENABLED') .get(); while (campaignIterator.hasNext()) { var campaign = campaignIterator.next(); campaign.pause(); }; Logger.log('enabled campaigns paused'); };
function reenableCampaigns() {
var label = AdWordsApp.labels() .withCondition('Name = "Active Last Month"') .get().next();
var campaignIterator = label.campaigns().get();
while (campaignIterator.hasNext()) { var campaign = campaignIterator.next(); campaign.removeLabel('Active Last Month'); campaign.enable(); }; Logger.log('First of the month: campaigns reenabled') };