function main(){
//Loop through all keywords in all campaigns with 1 or more clicks
var report = AdWordsApp.report(
'SELECT AdGroupId,Id,Criteria,ConversionRate,CpcBid,FirstPageCpc,TopOfPageCpc,QualityScore,SearchRankLostImpressionShare ' +
'FROM KEYWORDS_PERFORMANCE_REPORT ' +
'WHERE Clicks > 0 ' +
'DURING LAST_30_DAYS');
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var adGroup = row['AdGroupId'];
var id = row['Id'];
var criteria = row['Criteria'];
var cr = row['ConversionRate'];
var cpc = row['CpcBid'];
var fpcpc = row['FirstPageCpc'];
var topcpc = row['TopOfPageCpc'];
var qs = row['QualityScore'];
var lis = row['SearchRankLostImpressionShare'];
//calculate max cpa bid as cpa * click conversion rate
var maxcpa = parseFloat(cpc) * parseFloat(cr);
//if max cpa bid > first position bid then
if(maxcpa > parseFloat(fpcpc)){
var kw = AdWordsApp.keywords().withIds([[adGroup,id]]).get().next();
//if max cpc bid >= max cpa and lost search impression > 20% then set max cpa = max cpc bid * 1.20
if(parseFloat(cpc) >= maxcpa && parseFloat(lis) > 20){
kw.bidding().setCpc(cpc*1.2);
}//otherwise set max cpa = top of page bid
else{
kw.bidding().setCpc(parseFloat(topcpc));
}
}
//otherwise if max cpa < first page bid
else {
var kw = AdWordsApp.keywords().withIds([[adGroup,id]]).get().next();
//if max cpa is below first page bid by 20% and quality score > 6 set it max cpa = first page bid
if(maxcpa < parseFloat(fpcpc)*.8 && parseInt(qs) > 6){
kw.bidding().setCpc(parseFloat(fpcpc));
}
}
}
}Thanks for that Anthony. That’s really helpful.
Just one more qu, if call duration isn’t available for kw, how would I populate an array for each kw for average call duration for each campaign and each adgroup?
From: Anthony Madrigal via AdWords Scripts Forum <adwords-scripts+APn2wQdtTxVvWMRs...@googlegroups.com>
Sent: 04 June 2018 19:57
To: AdWords Scripts Forum <adwords...@googlegroups.com>
Subject: Re: Adwords bids
Hi,
-------- Original message --------
To view this discussion on the web visit https://groups.google.com/d/msgid/adwords-scripts/4c672551-068d-460d-81f0-63537b9803c4%40googlegroups.com.
-------- Original message --------
Could you help with some code please?
From: Anthony Madrigal via AdWords Scripts Forum <adwords-scripts+APn2wQdtTxVvWMRs...@googlegroups.com>
Sent: 05 June 2018 20:27
To: AdWords Scripts Forum <adwords...@googlegroups.com>
Subject: Re: Adwords bids
Hi,
You will need to run a Call Metrics Call Details Report to get call details including its campaign and ad groups.
-------- Original message --------
To view this discussion on the web visit https://groups.google.com/d/msgid/adwords-scripts/9f4c70ed-56b1-4a34-8c20-ea122fafb822%40googlegroups.com.
function main(){
//Loop through all keywords in all campaigns with 1 or more clicks
var report = AdWordsApp.report(
'SELECT CampaignId,AdGroupId,Id,Criteria,ConversionRate,CpcBid,FirstPageCpc,TopOfPageCpc,QualityScore,SearchRankLostImpressionShare ' +
'FROM KEYWORDS_PERFORMANCE_REPORT ' +
'WHERE Clicks > 0 ' +
'DURING LAST_30_DAYS');
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var campaign = row['CampaignId'];
var adGroup = row['AdGroupId'];
var id = row['Id'];
var criteria = row['Criteria'];
var cr = row['ConversionRate'];
var cpc = row['CpcBid'];
var fpcpc = row['FirstPageCpc'];
var topcpc = row['TopOfPageCpc'];
var qs = row['QualityScore'];
var lis = row['SearchRankLostImpressionShare'];
//calculate max cpa bid as cpa * click conversion rate
var maxcpa = parseFloat(cpc) * parseFloat(cr);
//Get call details of campaign and ad groups
var report2 = AdWordsApp.report(
'SELECT CampaignId,AdGroupId,CallDuration ' +
'FROM CALL_METRICS_CALL_DETAILS_REPORT ' +
'DURING LAST_30_DAYS');
var rows2 = report2.rows();
var calls = 0;
var i = 0;
while(rows2.hasNext()){
var row2 = rows2.next();
var call = row2['CallDuration'];
calls += parseFloat(call);
i++;
}
//get average call duration
calls = calls/i;
//rest of code
......
}
}-------- Original message --------