Google Ad Script pour gérer les budgets de campagne
Publié: 2021-10-23Aujourd'hui, en tant qu'annonceurs utilisant Google Ads, la gestion d'un budget spécifique par campagne (s) est une lutte universelle. Vos options dans l'interface utilisateur sont uniques : définissez une règle qui exclut les horaires. Ma question est pourquoi ? Ne serait-il pas formidable d'avoir un script à gérer au niveau de la campagne, via une fiche en 2019 ? Cela a pris du temps mais j'ai compris, ce que vous verrez ci-dessous. La possibilité de gérer les budgets dans un seul script avec une feuille sur plusieurs campagnes.
Avant de continuer sur le script, si vous êtes défini sur des règles pour ne pas dire qu'elles ne sont pas idéales pour la gestion du budget, voici un exemple de la façon de créer une règle qui a des limites de temps pour mettre en pause ou activer vos campagnes en fonction d'un budget pour campagnes. Vous pouvez trouver des détails supplémentaires ici avec des règles automatisées .
- Connectez-vous à votre compte Google Ads.
- Accédez aux pages Campagnes , Groupes d'annonces ou Mots clés .
- Cliquez sur l'icône à 3 points au-dessus du tableau des statistiques.
- Sélectionnez Créer une règle automatisée .
- Sélectionnez Pause ou Activer dans la liste déroulante « Type de règle ».
- Choisissez le type de campagne
- Pour ajouter une condition, cliquez sur +AJOUTER , sous « Condition ».
- Définissez la fréquence de votre règle qui est Une fois, Quotidienne, Hebdomadaire ou Mensuelle .
- Choisissez le type de mises à jour par e-mail que vous souhaitez recevoir sur les problèmes affectant votre règle.
- Nommez votre règle.
- Cliquez sur Aperçu pour vous assurer que vous avez configuré votre règle pour qu'elle s'exécute comme vous le souhaitez. La prévisualisation sert uniquement à la vérification et n'apporte aucune modification permanente à votre compte.
- Lorsque vous avez terminé, cliquez sur Enregistrer la règle .
Il y a des avantages aux règles, dans mon esprit pour des raisons budgétaires, pas si précieux. Cela nous laisse donc payer pour des outils et/ou avoir un développeur ou un ingénieur pour créer des scripts sophistiqués ou une plate-forme interne qui fonctionne avec l'API de Google. Que faire si je n'ai pas accès à ces ressources et que tout ce que je veux faire est d'être un annonceur ? Je ne peux pas, je dois apprendre le codage et les API pour rester à jour sur tous les changements et améliorations de l'interface utilisateur, que vous pouvez trouver dans la bibliothèque PPC Hero.
Pourquoi vous lisez et comment fonctionne le script.
Ce script gère votre budget au niveau de la campagne à l'heure via une feuille google, vous pouvez donc évoluer. A ma connaissance et j'ai écumé la toile, c'est la première pour le grand public. Je n'ai pas écrit le script original. Qui peut être trouvé ici par Google. J'ai simplement supprimé un tas de choses avec beaucoup d'essais et d'erreurs sur une période d'un an et j'ai retravaillé quelques éléments pour qu'il gère les budgets plutôt que les offres.
Le script vous permet de définir vos budgets et de les oublier dans des limites raisonnables. Si vous voulez devenir fou, vous pouvez faire ce que je fais et utiliser ce script avec le script de rythme avec quelques feuilles Google personnalisées afin que vous ayez votre propre outil de gestion de budget et votre propre enchérisseur. J'ai pensé que si quelqu'un peut créer un outil pour faire ce genre de choses et gagner des millions de dollars, il doit y avoir un moyen gratuit de le faire.
Je suis certain, presque certain qu'il existe une meilleure façon d'écrire ce script et plus que certain qu'il existe un moyen de le faire au niveau MCC pour gérer plusieurs comptes. Je n'ai pas compris cela. Ce serait formidable pour ceux qui voient cela, qui sont des développeurs ou des ingénieurs, d'apporter des ajustements à ce script et de partager une version gratuite au niveau MCC avec vos propres améliorations.
Comment configurer le script
Avant d'exécuter le script, voici quelques éléments que vous devez modifier.
- Créez une nouvelle feuille Google. C'est là que le script saura quelles campagnes mettre en pause ou annuler une pause, une fois que vous avez créé une nouvelle feuille, copiez l'URL.
- Assurez-vous que le nom de votre onglet est défini sur « Règles », sinon assurez-vous de mettre à jour cette ligne où « Règles est modifiée en quel que soit le nom de votre onglet : var spreadsheetAccess = new SpreadsheetAccess(SPREADSHEET_URL, « Règles »)
- Toujours dans Google Sheets, mettez à jour la ligne 2 avec votre numéro de compte "000-000-0000" et remplacez-le par le vôtre.
- La ligne 3 est la référence de la période d'exécution de votre script, si vous souhaitez l'exécuter après 7 jours, 1 semaine ou un mois. Consultez le tableau ci-dessous pour connaître les entrées valides pour cette ligne en ce qui concerne votre objectif de contrôle de vos budgets.
- À partir de la ligne 6, colonne C, vous voudrez ajouter vos budgets pour cette période
- Enfin, à la ligne 6, colonne D, vous voudrez lister vos campagnes.
J'espère que cela vous aidera tous à mieux contrôler vos budgets. Presque oublié, vous pouvez modifier la campagne.pause dans le script en campagne.activer et ajuster la formule simple si vous souhaitez dupliquer le script et créer un autre script pour activer les campagnes.
Scénario
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; } }