:quality(80)/bucket-prod.jecreemavitrine.fr/uploads/sites/156/2025/03/ChatGPT-Image-29-mars-2025-17_18_02.png)
Script Google ads : vos alertes budget en temps réel
Table des matières
Être alerté en temps réel de l’arrêt imprévu d’une campagne Google Ads est indispensable !
Lorsqu’on gère des campagnes Google Ads, un arrêt subit de la diffusion est l’une des pires surprises que l’on puisse rencontrer.
Problème : il n’existe pas d’alerte automatique dans l’interface Google ads. C’est à vous de vérifier constamment la bonne diffusion. Y compris le week-end, en congé, la nuit… Pas facile à faire.
Or, le risque à laisser plusieurs jours sans data une campagne est énorme. On en parle ci-desous.
Pour pallier à cela, on propose à tous les CMO et trafic manager un script + une méthode pour implémenter directement notre système d’alerte automatique par mail (utilisé en interne par les consultants webloom au quotidien).
1. Les cas réguliers d’alerte et les conséquences
On rencontre souvent les mêmes causes d’arrêt des campagnes.
Peu importe la taille de l’annonceur ! :
- Carte bleue non approvisionnée ou refusé par la banque
- Mauvais paramétrage du budget sur la campagne
- Régression technique suite à une mise en production
- Changement abrupt du Smartbidding.
Conséquence ?
- Perte de visibilité au profit des concurrents.
- Détérioration des performances et surtout de l’algorithme, qui a besoin de données constantes pour garder vos coûts d’acquisition stable.
Simplement quelques jours sans budget et c’est la stratégie / apprentissage des 6 derniers mois que vous mettez en danger.
2. Utiliser un script pour une alerte automatisée
L’automatisation est la solution efficace pour simplifier la gestion des alertes. Grâce à un script Google Ads, vous pouvez :
- Surveiller automatiquement campagne par campagne la diffusion du budget
- Recevoir un e-mail dans l’heure si il y a une anomalie
- Créer facilement les regles : a quel % de non dépense faut-il s’inquieter ? Qui doit recevoir le mail d’alerte ? a quel montant minimum le script doit-il s’activer ?
Vous trouverez ci-dessous un exemple de script permettant de surveiller les dépenses quotidiennes et l’état d’approbation des annonces. Il enverra un e-mail d’alerte si une anomalie est détectée.
Méthode d’implémenation
👉 Onglet Outils
👉 Scripts
👉 Bouton + bleue
👉 Copier- coller le code ci-dessous
👉 Mettez à jour les lignes 6, 7, 8
- ajouter votre adresse
- ajouter le % d’alerte. De base, il est a 70% de baisse des dépenses VS la veille
- (uniquement en cas de baisse imprévue, pour éviter des faux positifs si vous avez choisit de ne dépenser le weekend par exemple)

👉 Autoriser le code à s’exécuter en cliquant 2 fois sur « authoriser »
👉 Exectuer le code
👉 Gerer la frequence d’analyse sur « tous les jours » a 23H, comme dans l’exemple

/// Copyright 2025, webloom
// Votre plan de croissance offert sur webloom.fr
function main() {
var EMAIL_ADDRESSES = [« mettreicivotremail »]; // Adresses e-mail pour les alertes
var THRESHOLD_PERCENTAGE = 70; // Seuil de baisse pour déclencher une alerte
var MINIMUM_AVG_SPEND = 10; // Dépense moyenne minimale pour déclencher une alerte
verifierBaisseDepenseCampagnes(EMAIL_ADDRESSES, THRESHOLD_PERCENTAGE, MINIMUM_AVG_SPEND);
}
function verifierBaisseDepenseCampagnes(emailAddresses, thresholdPercentage, minimumAvgSpend) {
var campaignsWithDrop = [];
var campaignIterator = AdsApp.campaigns()
.withCondition(« Status = ENABLED »)
.get();
var today = new Date();
var dayOfWeek = today.getDay(); // 0 = Dimanche, 6 = Samedi
while (campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
var campaignName = campaign.getName();
var campaignId = campaign.getId();
// ➤ Si aujourd’hui c’est samedi ou dimanche, vérifier si la campagne diffusait le week-end dernier
if ((dayOfWeek === 0 || dayOfWeek === 6) && !aDiffuseLeWeekendDernier(campaign)) {
Logger.log(« ⏩ Skip : » + campaignName + » ne diffuse pas le week-end. »);
continue;
}
var costToday = campaign.getStatsFor(« TODAY »).getCost();
var avgCostLast7Days = getAverageCost(campaign, 7);
if (avgCostLast7Days < minimumAvgSpend) {
continue;
}
if (avgCostLast7Days > 0) {
var decreasePercentage = ((avgCostLast7Days – costToday) / avgCostLast7Days) * 100;
if (decreasePercentage >= thresholdPercentage) {
campaignsWithDrop.push({
name: campaignName,
id: campaignId,
costToday: costToday.toFixed(2),
avgCostLast7Days: avgCostLast7Days.toFixed(2),
drop: decreasePercentage.toFixed(2)
});
}
}
}
if (campaignsWithDrop.length > 0) {
envoyerAlerte(emailAddresses, campaignsWithDrop);
}
}
function getAverageCost(campaign, days) {
var stats = campaign.getStatsFor(« LAST_ » + days + « _DAYS »);
return stats.getCost() / days;
}
function envoyerAlerte(emailAddresses, campaigns) {
var accountName = AdsApp.currentAccount().getName();
var accountId = AdsApp.currentAccount().getCustomerId();
var subject = « 🚨 Alerte : Forte baisse des dépenses sur certaines campagnes ( » + accountName + « ) »;
var message = « Alerte webloom.fr / Le compte \ » » + accountName + « \ » (ID: » + accountId + « ) a des campagnes avec une forte baisse des dépenses :\n\n »;
campaigns.forEach(function(campaign) {
message += « 📉 Campagne: » + campaign.name + » (ID: » + campaign.id + « )\n »;
message += » – Dépense moyenne sur 7 jours : » + campaign.avgCostLast7Days + « €\n »;
message += » – Dépense aujourd’hui : » + campaign.costToday + « €\n »;
message += » – Baisse estimée : » + campaign.drop + « %\n\n »;
});
MailApp.sendEmail(emailAddresses.join(‘,’), subject, message);
Logger.log(« 🚨 Alerte envoyée pour » + campaigns.length + » campagne(s) sur le compte » + accountName);
}
// ➤ Fonction qui vérifie si la campagne a diffusé le week-end dernier
function aDiffuseLeWeekendDernier(campaign) {
var now = new Date();
var dayOfWeek = now.getDay(); // 0 = Dimanche
var saturday = new Date(now);
var sunday = new Date(now);
// On remonte au week-end précédent
var daysSinceLastSaturday = (dayOfWeek + 1) % 7 + 1; // Ex: si today = Lundi (1), alors 3
saturday.setDate(now.getDate() – daysSinceLastSaturday);
sunday.setDate(saturday.getDate() + 1);
var formatDate = function(date) {
return Utilities.formatDate(date, AdsApp.currentAccount().getTimeZone(), ‘yyyyMMdd’);
};
var saturdayStr = formatDate(saturday);
var sundayStr = formatDate(sunday);
var costSat = campaign.getStatsFor(saturdayStr, saturdayStr).getCost();
var costSun = campaign.getStatsFor(sundayStr, sundayStr).getCost();
var totalWeekend = costSat + costSun;
Logger.log(« 💡 Dépense week-end dernier pour » + campaign.getName() + » : » + totalWeekend.toFixed(2) + « € »);
return totalWeekend > 0;
}
Reprenez le contrôle de vos coûts d’acquisition !
Profitez d’une analyse gratuite de votre marché et campagnes :
Complétez notre questionnaire en 2 min pour recevoir un plan d’action ciblé.