Use the following script to change all of your Google Ads Tracking Template to include all the Campaign Name, Ad Group, Medium, MatchType, Keyword Used automatically using Google Script.
I used this script originally when I was using CallRail and wanted to automatically pull in the Keyword, Campaign Name into the CallRail Report. Instead of sitting there and changing each ad Final URL I used this script.
function main()
{
//{CampaignName} ---> Campaignlevel Template
//{AdGroupName} ----> AdgroupLevel Template
// Enter your template with at least one of {CampaignName} or {AdGroupName}
var TrackingTemplate="{lpurl}?matchtype={matchtype}&network={network}&device={device}&adposition={adposition}&keyword={keyword}&utm_source=google&utm_medium=cpc&utm_adgroup={AdGroupName}&utm_campaign={CampaignName}"; //Example
var _CAMPAIGN_CONTAINS=""; //Filter by Campaign name
var _ADGROUP_CONTAINS=""; //Filter by Adgroup name
var STATUS="ENABLED"; //ENABLED, PAUSED
// Hit Preview to see the changes/logs.
//////////////////////////////////////////////
if(TrackingTemplate.search("{CampaignName}")>0&&TrackingTemplate.search("{AdGroupName}")==-1)
{
var TempSplit=TrackingTemplate.split("&");
for(var i in TempSplit)
{
if(TempSplit[i].split("=").indexOf("{CampaignName}")>0)
{var No=i;
break;
}
}
var Temp=TempSplit[No].split("=");
var campaignIterator=_CAMPAIGN_CONTAINS==""?AdWordsApp.campaigns().withCondition("Status = "+STATUS).get():AdWordsApp.campaigns().withCondition("Name contains '"+_CAMPAIGN_CONTAINS+"'").withCondition("Status = "+STATUS).get();
if(!campaignIterator.hasNext()){Logger.log("No Campaigns matched with this condition")}
while(campaignIterator.hasNext())
{
var campaign=campaignIterator.next();
Temp[1]=campaign.getName();
TempSplit.splice(No,1,Temp.join("="));
var campaigntemplate=TempSplit.join("&");;
campaign.urls().setTrackingTemplate(campaigntemplate);
}
}
if(TrackingTemplate.search("{AdGroupName}")>0)
{
var CampaignCondition=false;
var TempSplit=TrackingTemplate.split("&");
for(var i in TempSplit)
{
if(TempSplit[i].split("=").indexOf("{AdGroupName}")>0)
{var No=i;}
if(TempSplit[i].split("=").indexOf("{CampaignName}")>0)
{var Cn=i;CampaignCondition=true;}
}
var Temp=TempSplit[No].split("=");
if(_ADGROUP_CONTAINS==""&&_CAMPAIGN_CONTAINS=="")
{var adgroupIterator=AdWordsApp.adGroups().withCondition("Status = "+STATUS).get();}
else if(_ADGROUP_CONTAINS==""&&_CAMPAIGN_CONTAINS!=="")
var adgroupIterator=AdWordsApp.adGroups().withCondition("Name contains '"+_ADGROUP_CONTAINS+"'").withCondition("Status = "+STATUS).get();
else if(_ADGROUP_CONTAINS!==""&&_CAMPAIGN_CONTAINS!=="")
var adgroupIterator=AdWordsApp.adGroups().withCondition("CampaignName contains '"+_CAMPAIGN_CONTAINS+"'").withCondition("Name contains '"+_ADGROUP_CONTAINS+"'").withCondition("Status = "+STATUS).get();
var adgroupIterator=AdWordsApp.adGroups().withCondition("CampaignName contains '"+_CAMPAIGN_CONTAINS+"'").withCondition("Name contains '"+_ADGROUP_CONTAINS+"'").withCondition("Status = "+STATUS).get();
if(!adgroupIterator.hasNext()){Logger.log("No Campaigns/Adgroups matched with this condition")}
if(CampaignCondition==false){
while(adgroupIterator.hasNext())
{
var adgroup=adgroupIterator.next();
Temp[1]=adgroup.getName();
TempSplit.splice(No,1,Temp.join("="));
var adgrouptemplate=TempSplit.join("&");
adgroup.urls().setTrackingTemplate(adgrouptemplate);
}
} else{
var TempCamp=TempSplit[Cn].split("=");
while(adgroupIterator.hasNext())
{
var adgroup=adgroupIterator.next();
Temp[1]=encodeURIC(adgroup.getName());
TempCamp[1]=encodeURIC(adgroup.getCampaign().getName());
TempSplit.splice(No,1,Temp.join("="));
TempSplit.splice(Cn,1,TempCamp.join("="));
var adgrouptemplate=TempSplit.join("&");
adgroup.urls().setTrackingTemplate(adgrouptemplate);
}
}
} else {Logger.log("Enter at least one of the {CampaignName} or {AdGroupName}")}
}
function encodeURIC( r ) {
return r.replace(/\W+/g, "");
}