Inzicht in CPC pieken

Benieuwd wat Smart Bidding doet met de daadwerkelijke biedingen? Dit script geeft inzicht in de CPC pieken in je account

Start nu!
CPC pieken met Smart Bidding in Google Ads
Inzicht Get started!

Met de komst van Smart Bidding in Google Ads hebben we de biedingen uit handen gegeven. En alle controle aan Google geven, voelt toch niet geruststellend. Hoewel Google veel meer factoren kan meenemen in biedingen en deze kan aanpassen per veiling, weet je niet hoeveel er per veiling betaald wordt. Dit script, origineel van Stefan Neefischer, geeft je inzicht.

CPC pieken in je Google Ads account

Met onderstaand script krijg je inzicht in het hoogste bedrag dat je in een bepaalde periode hebt betaald voor een klik. En dat kan, wanneer je geen maximum CPC hebt ingesteld op je Smart Bidding strategie, behoorlijk hoog oplopen. In de originele analyse van Stefan Neefischer komt hij een bedrag tegen €339 voor 1 klik! En dat bedrag verdwijnt uiteindelijk in de gemiddelden van je account. 

> Je vind de resultaten van het script in de log

Instellingen

  • DATE_RANGE: Geef aan over hoeveel dagen terug het script de statistieken moet verzamelen.
  • MAX_CPC: Stel deze CPC in om te analyseren hoeveel je hebt uitgegeven aan klikken die duurder waren. Een goed uitgangspunt is de gemiddelde CPC in je account * 2 of * 3.
The script
// SEAlyzer CPC Peak Analyzer
//
// Author: Stefan Neefischer (stefan@sealyzer.com)
// Minor changes: Tibbe van Asten
// 
// Created: 13-05-2020
// Last update: 15-06-2021
//
// ABOUT THE SCRIPT
// This script gives you insights on the impact of hidden search queries
// in your account. See what percentage of impressions, clicks, cost
// and conversion is generated by unknows search queries.
//
////////////////////////////////////////////////////////////////////

var config = {
  
  DATE_RANGE : last_n_days(30),
  
  // Type in your upper CPC bound - some good dynamic bounds are: 2 * AvgCPC, 3 * AvgCPC
  MAX_CPC : 5.00,
  
}

////////////////////////////////////////////////////////////////////

function main(){
  
  report("KeywordId, AdNetworkType2, Query, Date, Impressions, Clicks, AverageCpc, Conversions, ConversionValue, Cost, Device","SEARCH_QUERY_PERFORMANCE_REPORT");
  report("Id, Criteria, AdNetworkType2, Date, ClickType, Device, Impressions, Clicks, AverageCpc, Conversions, ConversionValue, Cost","KEYWORDS_PERFORMANCE_REPORT");
  
} // function main()

////////////////////////////////////////////////////////////////////

function report(fields, type) {
  
  // Microamount is used in awql - we have to convert it
  var upperbound_micro = 1000000 * config.MAX_CPC;
  
  var top_cpc = 0;
  var cost_sum = 0;
  var conversion_sum = 0;
  var conversionValue_sum = 0;
  
  outliercount = 0;
 
  var report = AdsApp.report(
    "SELECT " + fields +
    " FROM " + type +
    " WHERE AverageCpc > "+ upperbound_micro +
    " DURING " + config.DATE_RANGE);
  
  var rows = report.rows();  
  while (rows.hasNext()) {
    var row = rows.next();
    
    outliercount += 1;
    
    cost_sum += parseFloat(row['Cost']);
    conversion_sum += parseFloat(row['Conversions']);
    conversionValue_sum+=parseFloat(row['ConversionValue']);
    
    if (top_cpc < row['AverageCpc']) {
      top_cpc = row['AverageCpc'];
    }

  } // rowIterator
  
  if (conversion_sum > 0) {
    cpo = cost_sum/conversion_sum;
  } else {
    cpo = cost_sum;
  }
  
  if (cost_sum > 0) {
    roi = conversionValue_sum / cost_sum;
  } else {
    roi = 0;
  }

  Logger.log("--------------------------------");
  Logger.log("Segment performance of Clicks with CPCs > " + config.MAX_CPC);
  Logger.log("FROM " + type);
  Logger.log("--------------------------------");
  Logger.log("Your CPC Peak was " + top_cpc + " for the time period " + config.DATE_RANGE);
  Logger.log("There where " + outliercount + " cases of clicks higher than your CPC bound");
  Logger.log("In total you paid " + cost_sum.toFixed(2) + " for those clicks");
  Logger.log("This segment of clicks generated " + conversion_sum.toFixed(2) + " conversions resulting in a CPO of " + cpo.toFixed(2));
  Logger.log("This segment of clicks generated " + conversionValue_sum.toFixed(2) + " in conversionValue resulting in a ROI of " + roi.toFixed(2));
  Logger.log(" ");
  
} // funtion report()

////////////////////////////////////////////////////////////////////

function last_n_days(n) {
  
	var	from = new Date(), to = new Date();
	to.setUTCDate(from.getUTCDate() - n);
  
	return googleDateRange(from, to);
  
} // function last_n_days()

////////////////////////////////////////////////////////////////////

function googleDateRange(from, to) {
  
	function googleFormat(date) {
    
		var date_array = [date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate()];
    
		if (date_array[1] < 10) date_array[1] = '0' + date_array[1];
		if (date_array[2] < 10) date_array[2] = '0' + date_array[2];
    
		return date_array.join('');
	}
  
	var inverse = (from > to);
	from = googleFormat(from);
	to = googleFormat(to);
  
	var result = [from, to];
	
  if (inverse) {
		result = [to, from];
	}
  
	return result;
  
} // function googleDateRange()
Show whole script!
Loading Comments
The Experts
Tibbe van Asten Team Lead Performance Marketing
Nils Rooijmans Water Cooler Topics
Martijn Kraan Freelance PPC Specialist
Bas Baudoin Teamlead SEA @ Happy Leads
Jermaya Leijen Digital Marketing Strategist
Krzysztof Bycina PPC Specialist from Poland
How about you? JOIN US!
Sharing Knowledge
Caring

Adsscripts.com staat voor het delen van kennis. In de huidige markt houden SEA-specialisten de kennis en ervaring graag voor zich. Wij zijn er van overtuigd dat het delen van kennis ervoor kan zorgen dat iedereen beter wordt in haar of zijn werk. Daarom lopen wij hier graag in voorop, door onze kennis over scripts te delen met iedereen.

Wil jij ook graag een bijdrage leveren? Wij staan open voor nieuwe ideeën en feedback op alles wat je op Adsscripts.com vindt.

Neem contact op

Training &
Workshop
Neem contact op!
Adsscripts Training & Workshop