Markéta Kabátová včera (8. 10. 2016) na Digisemestru říkala, že Google prodlužuje zobrazování starých formátů reklam, protože CTR těch nových často nebývá lepší, než u těch starých. Pro snadnější kontrolu jsem vytvořil skript, který porovnává CTR starých formátů a ETA. Výstupem je report reklamních sestav s datem vytvoření první ETA reklamy. Je zde počet impresí starých a nových formátů za období od vytvoření ETA do včerejška a CTR obou formátů. Dále je vypočítán procentuální rozdíl CTR ETA oproti nerozšířeným reklamám a podíl zobrazení obou formátů. Sloupce s CTR jsou barevně odlišeny tak, že ty s nižším CTR jsou červeně. Ve sloupci Rozdíl CTR % je červeně vyznačeno, pokles CTR nových formátů oproti starým. V posledním sloupci je počítán podíl zobrazení nových a starých reklam, červeně je opět vyznačeno kde se ETA zobrazuje míň než původní reklama. Což je určitě škoda, už jen proto, že nové reklamy zabírají víc místa a bylo by proto lepší aby se víc i zobrazovaly.

Instalace je jednoduchá
- Je potřeba zkopírovat sešit s nastaveným formátováním buněk, tento sešit se vždy zkopíruje a vyplní reportem.
- Zkopírujte skript do Vašeho účtu v AdWords.
- Zkopírujte URL nového souboru do prvního řádku do proměnné vzor_url do uvozovek.
- Skript ze svého účtu spusťte (bude vyžadována autorizace k přístupu k tabulkám a AdWords účtu, tak ji povolte).
- Na Vašem Google Drivu se vytvoří nový sešit, jeho url najdete po doběhnutí skriptu v protokolech.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
var vzor_url = 'Sem vložte URL nového sešitu'; var vzor = SpreadsheetApp.openByUrl(vzor_url); function main(){ var spreadsheet = vzor.copy('Porovnání CTR starých a nových reklam ' + AdWordsApp.currentAccount().getName()); spreadsheet.setActiveSheet(spreadsheet.getSheets()[0]); spreadsheet.appendRow(["Kampaň","Sestava","Datum vytvoření", "Old Imprese","ETA imprese", "Old CTR", "ETA CTR", "Rozdíl CTR %", "Podíl zobrazení v %"]) var historie = getImpressionHistory(); pocitejCTR(historie, spreadsheet); Logger.log("Report je vygenerován na adrese: " + spreadsheet.getUrl()); } function pocitejCTR(ret_map, spreadsheet) { var iter = iter = AdWordsApp.adGroups().get(); while(iter.hasNext()) { var AdGroup = iter.next(); var id = AdGroup.getId(); if(ret_map[id]) { var from = ret_map[id]; var rok = from.slice(0,4); var mesic = from.slice(4,6); var den = from.slice(6,8); var creationDate = den + "-" + mesic + "-" + rok; var etaSumClicks = 0; var etaSumImp = 0; var oldSumClicks = 0; var oldSumImp = 0; var yesterday = getDateDaysAgo(1); var during = "'" + from + "', '" + yesterday + "'"; var kampan = AdGroup.getCampaign().getName(); var sestava = AdGroup.getName(); var oldCTR = 0; var rozdil = 1; var adsIterator = AdGroup.ads().get(); while(adsIterator.hasNext()){ var ad = adsIterator.next(); var stats = ad.getStatsFor(from, yesterday) var impressions = stats.getImpressions(); var clicks = stats.getClicks(); if(ad.getType() == 'EXPANDED_TEXT_AD'){ etaSumClicks = etaSumClicks + clicks; etaSumImp = etaSumImp + impressions; }else{ oldSumClicks = oldSumClicks + clicks; oldSumImp = oldSumImp + impressions; } } var etaCTR = (etaSumClicks/etaSumImp); if(oldSumImp != 0){oldCTR = (oldSumClicks/oldSumImp);} if(oldCTR != 0){rozdil = (etaCTR/oldCTR) - 1;} var podil = etaSumImp/ ((etaSumImp + oldSumImp)); spreadsheet.appendRow([kampan, sestava, creationDate, oldSumImp, etaSumImp, oldCTR, etaCTR, rozdil, podil]) // Logger.log(AdGroup.getName() + " vytvořeno: " + from + " CTR ETA: " + etaCTR + "% old CTR: " + oldCTR + "% podíl zobrazení: " + podil ); } } } function getImpressionHistory() { var API_VERSION = { includeZeroImpressions : false }; var first_date = new Date('10/23/2000'); var max_days_ago = diffDays(first_date,new Date()); var cols = ['Date','AdGroupId','Impressions']; var report = 'AD_PERFORMANCE_REPORT'; var ret_map = {}; var prev_days_ago = 0; for(var i = 30; i < max_days_ago; i+=30) { var start_date = getDateDaysAgo(i); var end_date = getDateDaysAgo(prev_days_ago); var date_range = start_date+','+end_date; Logger.log('Getting data for ' + date_range); var query = ['select',cols.join(','),'from',report,'where AdType IN [EXPANDED_TEXT_AD]', 'during',date_range].join(' ') var report_iter = AdWordsApp.report(query, API_VERSION).rows(); if(!report_iter.hasNext()) { Logger.log('No more impressions found. Breaking.'); break; } // no more entries while(report_iter.hasNext()) { var row = report_iter.next(); if(ret_map[row['AdGroupId']]) { var [year,month,day] = (row['Date']).split('-'); var from_row = new Date(year, parseFloat(month)-1, day); var from_row_formated = Utilities.formatDate(from_row,AdWordsApp.currentAccount().getTimeZone(),"yyyyMMdd"); var from_map = ret_map[row['AdGroupId']]; if(from_row_formated < from_map) { ret_map[row['AdGroupId']] = from_row_formated; } } else { var [year,month,day] = (row['Date']).split('-'); ret_map[row['AdGroupId']] = year + month + day; } } prev_days_ago = i; } return ret_map; } function diffDays(firstDate,secondDate) { var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds return Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); } function getDateDaysAgo(days) { var the_past = new Date(); the_past.setDate(the_past.getDate() - days); return Utilities.formatDate(the_past,AdWordsApp.currentAccount().getTimeZone(),"yyyyMMdd"); } |
Jak to funguje?
Skript automaticky zjišťuje, kdy byla vytvořena první ETA, k tomu je využita a upravena část skriptu od Russella Savageho pro štítkování entit datem vytvoření. Výstup této funkce je seznam ID sestav s datem vytvoření první ETA (to je den, kdy zaznamenala první imprese). Statistiky jsou pak zjišťovány od tohoto data vytvoření, do včerejšího data (relativně, ke dni spuštění). Zjišťuje se pak součet impresí a prokliků nových a starých formátů zvlášť, z těch jsou pak dopočítány ostatní hodnoty. Vše je následně zaznamenáno do nově vytvořené tabulky.
Vzorečky použitých výpočtů
- Old imprese – suma impresí všech reklam ve starém formátu v dané sestavě
- ETA imprese – suma impresí všech ETA v dané sestavě
- Old CTR – suma kliknutí na staré reklamy / Old imprese
- ETA CTR – suma kliknutí na ETA / ETA imprese
- Rozdíl CTR % – (etaCTR/oldCTR) – 1, pokud za dané období starý formát reklamy nezaznamenal žádné imprese, je rozdíl CTR automaticky 100%
- Podíl zobrazení v % – ETA imprese/ (ETA imprese + Old imprese)
Jestli jsem na něco zapomněl, nebo něčemu není rozumět, dejte mi vědět.