Skrypt Google Ads: Budget Monitor

Poniższy skrypt Google Ads sprawdza, czy na koncie są kampanie, które wyczerpały dzienny budżet.

Czasami zdarza się, że ze względu na wzrost popytu lub sezonowość produktów niektóre kampanie szybciej niż zwykle zużywają przeznaczony na nie budżet.
Może to skutkować wyczerpaniem środków np. w połowie dnia.

Jeśli tak się stanie, skrypt wyśle nam e-mail z nazwą kampanii.

Dzięki tej informacji będziemy mogli zdecydować, czy chcemy zwiększyć budżet czy zostawiamy kampanię w obecnym stanie.

Konfiguracja: Wprowadź swój e-mail do zmiennej EMAIL


Po więcej na temat Skryptów zapraszam na grupę FB o automatyzacji:
https://www.facebook.com/groups/skrypty.google.ads


//Updated on 19.03.2020: Small code structure improvements

/*

Copyright 2019 Krzysztof Bycina, www.LiveAds.pl
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

*/

// --------------------------------------- Configuration:

var EMAIL = "ENTER YOUR EMAIL HERE";

// --------------------------------------- End of the configuration




function main() {
    validateEmail(EMAIL);
    var badCampaigns = checkSpend();
    sendEmails(badCampaigns);
}

//Check the today's spend
function checkSpend() {
    var badCampaigns = [];
    var allCampaigns = AdsApp.campaigns()
        .withCondition("Clicks > 0")
        .forDateRange("TODAY")
        .get();
    while (allCampaigns.hasNext()) {
        var iterator = allCampaigns.next();
        var campaignBudget = iterator.getBudget();
        var campaignCost = iterator.getStatsFor('TODAY').getCost();

        //Is the budget depleted?
        if (campaignCost >= campaignBudget) {
            Logger.log("The campaign: " + iterator.getName() + " has depleted the daily budget");
            badCampaigns.push(iterator.getName() + " has daily budget of: " + campaignBudget + ", today's spend is: " + campaignCost);
        }
    }
    return badCampaigns;
}

function sendEmails(emailData) {
    MailApp.sendEmail(EMAIL, AdWordsApp.currentAccount().getName() + ' has campaigns that reached the daily budget.',
        'Hi, \n\nYou have campaigns that reached the daily budget. Please, check them now:\n\n' + emailData.join("\n"));
}

function validateEmail(email) {
    var key = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    if (key.test(email) === false) {
        throw new Error('You must eneter a valid email address to run the script!');
    }
}

3 comments / Add your comment below

  1. Cześć. W imieniu swoim i osób, które korzystają z Twojej pracy – dziękuję za nią. A teraz pytanie: czy sama zmiana nierówności z campaignCost >= campaignBudget na campaignCost <= campaignBudget (wiersz 37 Twojego kodu) (+ zmiany odpowiednich komentarzy) spowoduje, że ze skryptu, który informuje nas o niewystarczającym budżecie dziennym w kampanii, otrzymamy skrypt, który będzie nas informował o kampaniach, które nie wydają dziennego budżetu? Często i taka sytuacja się zdarza i prawdopodobnie będzie się zdarzać częściej, jak zostanie wyłączona opcja "przyśpieszonego wyświetlania". Pozdrawiam, Radek.

      1. dzięki wielkie to miłe i cieszę się, że skrypty się przydają 🙂 trzeba zrobić tak jak napisałeś w drugim komentarzu – myślę, że to zadziała.

        Przepraszam, ze opóźnienia w odpowiedzi. Jeśli to możliwe piszę proszę komentarze na grupie FB. Jeszcze raz dzięki.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *