Google Ad Script pentru a gestiona bugetele campaniei

Publicat: 2021-10-23

Astăzi, ca agenți de publicitate care utilizează Google Ads, este o luptă universală să gestionați un anumit buget în funcție de campanie(e). Opțiunile dvs. din interfața de utilizare sunt singulare: setați o regulă care exclude fiecare oră. Întrebarea mea este de ce? Nu ar fi grozav să ai un script de gestionat la nivel de campanie, printr-o fișă în 2019? A durat ceva timp, dar mi-am dat seama, ceea ce o veți vedea mai jos. Abilitatea de a gestiona bugete într-un singur script cu o foaie în mai multe campanii.

Înainte de a continua cu scriptul, dacă sunteți setat pe reguli pentru a nu spune că nu sunt grozave pentru gestionarea bugetului, iată un exemplu despre cum să creați o regulă care să stabilească limite de timp pentru a vă întrerupe sau a activa campaniile pe baza unui buget pentru campanii. Puteți găsi detalii suplimentare aici cu reguli automate .

  1. Conectați-vă la contul dvs. Google Ads.
  2. Accesați paginile Campanii , Grupuri de anunțuri sau Cuvinte cheie .
  3. Faceți clic pe pictograma cu 3 puncte de deasupra tabelului cu statistici.
  4. Selectați Creați o regulă automatizată .
  5. Selectați Pauză sau Activare din meniul drop-down „Tip de regulă”.
  6. Alegeți ce tip de campanie
  7. Pentru a adăuga o condiție, faceți clic pe +ADĂUGAȚI , sub „Condiție”.
  8. Definiți frecvența regulii dvs., care este O dată, Zilnic, Săptămânal sau Lunar .
  9. Alegeți tipul de actualizări prin e-mail pe care doriți să le primiți cu privire la problemele care vă afectează regula.
  10. Denumiți-vă regula.
  11. Faceți clic pe Previzualizare pentru a vă asigura că ați configurat regula să ruleze așa cum doriți. Previzualizarea este doar pentru verificare și nu aduce modificări permanente contului dvs.
  12. Când ați terminat, faceți clic pe Salvare regulă .

Există beneficii pentru reguli, în mintea mea de dragul bugetului, nu atât de extrem de valoroase. Deci, ne lasă să plătim pentru instrumente și să avem un dezvoltator sau inginer care să creeze niște scripturi fanteziste sau o platformă internă care funcționează cu API-ul Google. Ce se întâmplă dacă nu am acces la acele resurse și tot ce vreau să fac este să fiu agent de publicitate? Nu pot, trebuie să învăț codificare și chestii API pentru a include să rămân la curent cu toate modificările și îmbunătățirile UI, pe care le puteți găsi în Biblioteca PPC Hero.

De ce citești și cum funcționează scenariul.

Acest script vă gestionează bugetul la nivel de campanie în fiecare oră printr-o foaie Google, astfel încât să puteți scala. Din câte știu și am căutat pe web, acesta este primul pentru public. Nu am scris scenariul original. Care poate fi găsit aici de Google. Pur și simplu am șters o grămadă de lucruri cu multe încercări și erori pe o perioadă de 1 an și am reluat câteva lucruri pentru ca acesta să gestioneze bugetele în loc de sumele licitate.

Scriptul vă permite flexibilitatea de a vă stabili bugetele și de a uita de ele în limitele rezonabile. Dacă vrei să înnebunești, poți să faci ceea ce fac eu și să folosești acest script cu scriptul de ritm cu câteva foi Google personalizate, astfel încât să ai propriul instrument de gestionare a bugetului și ofertant. M-am gândit că dacă cineva poate construi un instrument pentru a face aceste lucruri și a câștiga milioane de dolari, trebuie să existe o modalitate gratuită de a face acest lucru.

Sunt sigur, aproape sigur că există o modalitate mai bună de a scrie acest script și, mai mult decât sigur, există o modalitate de a o face la nivel MCC pentru a gestiona mai multe conturi. Nu mi-am dat seama de asta. Ar fi grozav pentru cei care văd acest lucru, care sunt dezvoltatori sau ingineri, să facă ajustări la acest script și să partajeze o versiune gratuită la nivel MCC cu propriile îmbunătățiri.

Cum se configurează scriptul

Înainte de a rula scriptul, iată câteva lucruri pe care trebuie să le modificați.

  1. Creați o nouă foaie de calcul Google. Aici scriptul va ști ce campanii trebuie întreruptă sau anulată, după ce ați creat o nouă foaie, copiați adresa URL.
  2. Asigurați-vă că numele filei este setat la „Reguli”, dacă nu, asigurați-vă că actualizați această linie în care „Regulile sunt schimbate în oricare ar fi numele filei dvs.: var spreadsheetAccess = new SpreadsheetAccess(SPREADSHEET_URL, „ Rules ")
  3. Încă lucrează în Foi de calcul Google, actualizați rândul 2 cu numărul de cont „000-000-0000”, înlocuiți-l cu al dvs.
  4. Rândul 3 este perioada de referință pentru rularea scriptului, dacă doriți să îl executați după 7 zile, 1 săptămână sau o lună. Consultați tabelul de mai jos pentru intrări valide pentru acest rând, deoarece se referă la obiectivul dvs. de control al bugetelor.
Opțiuni pentru intervalul de timp pentru scriptul de anunțuri Google
  • Începând din rândul 6, coloana C, veți dori să adăugați bugetele pentru perioada respectivă
  • În cele din urmă, în rândul 6, coloana D, veți dori să vă listați campaniile.

Sper că acest lucru vă va ajuta pe toți să vă controlați mai bine bugetele. Aproape că ați uitat, puteți schimba campania.pause din script în campaign.enable și ajustați formula simplă dacă doriți să duplicați scriptul și să creați un alt script pentru a activa campaniile.

Scenariul

 var SPREADSHEET_URL = "[https://docs.google.com/spreadsheets/d/1AbldNxsSPHkE0WcOY01AoM7EimF2_7XDrvI5FeLcarY/edit#gid=0]"; var spreadsheetAccess = new SpreadsheetAccess(SPREADSHEET_URL, "Rules"); var totalColumns; function main() { var columns = spreadsheetAccess.sheet.getRange(5, 2, 5, 100).getValues()[0]; for (var i = 0; i < columns.length; i ++) { if (columns[i].length == 0 || columns[i] == 'Results') { totalColumns = i; break; } } if (columns[totalColumns] != 'Results') { spreadsheetAccess.sheet.getRange(5, totalColumns + 2, 1, 1).setValue("Results"); } // clear the results column spreadsheetAccess.sheet.getRange(6, totalColumns + 2, 1000, 1).clear(); var row = spreadsheetAccess.nextRow(); while (row != null) { var budget; try { budget = parseBudget(row); } catch (ex) { logError(ex); row = spreadsheetAccess.nextRow(); continue; } var selector = AdWordsApp.campaigns(); for (var i = 2; i < totalColumns; i ++) { var header = columns[i]; var value = row[i]; if (!isNaN(parseFloat(value)) || value.length > 0) { if (header.indexOf("'") > 0) { value = value.replace(/\'/g,"\\'"); } else if (header.indexOf("\"") > 0) { value = value.replace(/"/g,"\\\""); } var condition = header.replace('?', value); selector.withCondition(condition); } } var campaigns = selector.get(); try { campaigns.hasNext(); } catch (ex) { logError(ex); row = spreadsheetAccess.nextRow(); continue; } var fetched = 0; var changed = 0; while (campaigns.hasNext()) { var campaign = campaigns.next(); var oldCost = campaign.getStatsFor("THIS_MONTH").getCost(); var action = row[0]; var newStatus; fetched ++; if (budget <= oldCost) { campaign.pause(); changed++ } } logResult("Fetched " + fetched + "\nChanged " + changed); row = spreadsheetAccess.nextRow(); } var now = new Date(Utilities.formatDate(new Date(), AdWordsApp.currentAccount().getTimeZone(), "MMM dd,yyyy HH:mm:ss")); } function parseBudget(row) { if (row[1].length == 0) { return null; } var limit = parseFloat(row[1]); if (isNaN(limit)) { throw "Bad Argument: must be a number."; } return limit; } function logError(error) { spreadsheetAccess.sheet.getRange(spreadsheetAccess.currentRow(), totalColumns + 2, 1, 1) .setValue(error) .setFontColor('#c00') .setFontSize(8) .setFontWeight('bold'); } function logResult(result) { spreadsheetAccess.sheet.getRange(spreadsheetAccess.currentRow(), totalColumns + 2, 1, 1) .setValue(result) .setFontColor('#444') .setFontSize(8) .setFontWeight('normal'); } function SpreadsheetAccess(spreadsheetUrl, sheetName) { this.spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl); this.sheet = this.spreadsheet.getSheetByName(sheetName); this.cells = this.sheet.getRange(6, 2, this.sheet.getMaxRows(), this.sheet.getMaxColumns()).getValues(); this.rowIndex = 0; this.nextRow = function() { for (; this.rowIndex < this.cells.length; this.rowIndex ++) { if (this.cells[this.rowIndex][0]) { return this.cells[this.rowIndex++]; } } return null; } this.currentRow = function() { return this.rowIndex + 5; } }