var TARGET_AVERAGE_POSITION = 2.5;
var TOLERANCE = 0.1;
var BID_ADJUSTMENT_COEFFICIENT = 1.1;
function main() {
raiseKeywordBids();
lowerKeywordBids();
}
function raiseKeywordBids() {
var keywordsToRaise = getKeywordsToRaise();
while (keywordsToRaise.hasNext()) {
var keyword = keywordsToRaise.next();
keyword.bidding().setCpc(getIncreasedCpc(keyword.bidding().getCpc()));
}
}
function lowerKeywordBids() {
var keywordsToLower = getKeywordsToLower();
while (keywordsToLower.hasNext()) {
var keyword = keywordsToLower.next();
keyword.bidding().setCpc(getDecreasedCpc(keyword.bidding().getCpc()));
}
}
function getIncreasedCpc(cpc) {
return cpc * BID_ADJUSTMENT_COEFFICIENT;
}
function getDecreasedCpc(cpc) {
return cpc / BID_ADJUSTMENT_COEFFICIENT;
}
function getKeywordsToRaise() {
var adGroupIds = [];
var adGroups = AdWordsApp.adGroups().withCondition("LabelNames CONTAINS_ANY ['bid-to-2.5']").get();
while(adGroups.hasNext()){
adGroupIds.push(adGroups.next().getId());
}
return AdWordsApp.keywords()
.withCondition('Status = ENABLED')
.withCondition('AdGroupId IN [' + adGroupIds + ']')
.withCondition(
'AveragePosition > ' + (TARGET_AVERAGE_POSITION + TOLERANCE))
.orderBy('AveragePosition ASC')
.forDateRange('LAST_7_DAYS')
.get();
}
function getKeywordsToLower() {
var adGroupIds = [];
var adGroups = AdWordsApp.adGroups().withCondition("LabelNames CONTAINS_ANY ['bid-to-2.5']").get();
while(adGroups.hasNext()){
adGroupIds.push(adGroups.next().getId());
}
return AdWordsApp.keywords()
.withCondition('Ctr > 0.01')
.withCondition(
'AveragePosition < ' + (TARGET_AVERAGE_POSITION - TOLERANCE))
.withCondition('Status = ENABLED')
.withCondition('AdGroupId IN [' + adGroupIds + ']')
.orderBy('AveragePosition DESC')
.forDateRange('LAST_7_DAYS')
.get();
}