Sets a tracking template on all active campaigns — Search, Shopping and Performance Max — so every click is auto-tagged with UTM (utm_source=google, utm_medium=cpc, utm_campaign=campaign name). Skips paused/removed and logs old vs new template. Note: overwrites any existing tracking template.
By the SEOZ team · Updated June 12, 2026
Why it helps: Google Ads auto-tagging (GCLID) doesn't always line up with GA4 — some paid clicks land as google / organic (Organic Search) instead of google / cpc (Paid Search), even though the traffic is actually paid. Manual UTM tagging via this script minimizes the error. In some cases 15–20% of traffic was mis-attributed to that source/medium before it was tagged manually.
function main() {
// Define base UTM parameters
var UTM_SOURCE = 'utm_source=google';
var UTM_MEDIUM = 'utm_medium=cpc';
// Get all campaigns, including Shopping and Performance Max
var campaignIterators = [
AdsApp.campaigns().get(),
AdsApp.shoppingCampaigns().get(),
AdsApp.performanceMaxCampaigns().get()
];
// Loop through all campaigns
for (var i = 0; i < campaignIterators.length; i++) {
var campaignIterator = campaignIterators[i];
while (campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
// Skip campaigns that aren't active
if (campaign.isPaused() || campaign.isRemoved()) {
Logger.log('Skipping inactive campaign: ' + campaign.getName());
continue;
}
var campaignName = encodeURIComponent(campaign.getName());
var finalUrlSuffix = UTM_SOURCE + '&' + UTM_MEDIUM + '&utm_campaign=' + campaignName;
var newTrackingTemplate = '{lpurl}?' + finalUrlSuffix;
var oldTrackingTemplate = campaign.urls().getTrackingTemplate();
Logger.log('---');
Logger.log('Active campaign ID: ' + campaign.getId());
Logger.log('Campaign name: ' + campaign.getName());
Logger.log('Old tracking template: ' + (oldTrackingTemplate ? oldTrackingTemplate : 'None'));
Logger.log('New tracking template: ' + newTrackingTemplate);
campaign.urls().setTrackingTemplate(newTrackingTemplate);
}
}
}This script changes your campaigns — test on a small account first.