DOŁĄCZ DO GRUPY
BEZPŁATNY AUDYT
SKRYPT PMAX
NEWSLETTER

Zaawansowane Google Ads

5,001 członków

Dołącz do naszej społeczności ekspertów Google Ads i zyskaj dostęp do zaawansowanych strategii, wsparcia specjalistów i inspirujących case studies.

Prywatna grupa - Tylko zatwierdzeni członkowie

Nie jesteś pewny, czy Twoje reklamy działają tak, jak powinny?

Umów się na bezpłatny audyt konta Google Ads

Profesjonalna analiza

Szybki kontakt i konkretne informacje zwrotne.

Analiza efektywności
Weryfikacja Strategii
Praktyczne rekomendacje
Propozycja współpracy

Chcesz lepiej zrozumieć działanie kampanii Performance Max?

PMax Channels Analyzer

Darmowy skrypt dla Google Ads

Analizuj wydatki i konwersje z poszczególnych kanałów w kampaniach Performance Max.

Podział na kanały
Szczegółowe statystyki
Łatwa instalacja
Automatyczne raporty

Zapisz się na newsletter i otrzymuj praktyczne porady oraz narzędzia, które usprawnią twoje konto reklamowe.

Skrypt Google Ads: Budget Protector

Monitoring kosztów to jeden z kluczowych elementów zarządzania reklamami. Szczególnie jeśli pracujemy na wielu kontach.

Algorytm Google Ads pozwala na przekroczenie budżetu dziennego nawet dwukrotnie. Mamy np. kampanię z budżetem 30zł, a jej wczorajszy koszt wyniósł 55zł.

W niektórych wypadkach nieoczekiwane wzrosty kosztów mogą negatywnie wpłynąć na proces optymalizacji.

Poniższy skrypt Google Ads blokuje system przed wydaniem więcej niż ustaliliśmy. Jeżeli jakaś kampania przekroczy nasz dzienny budżet, aplikacja wstrzyma ją. Ponowne uruchomienie nastąpi po północy.

Skrypt sprawdza tylko te kampanie, którym nadamy etykietę.

Wymagany harmonogram: co godzinę

Konfiguracja:
1. Utwórz etykietę i oznacz nią kampanie, które ma sprawdzać skrypt
2. Wprowadź treść etykiety do zmiennej CAMPAIGN_LABEL


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: Code structure improvements
//Updated on 14.02.2020: Time zone issue fixed

/*

Copyright 2020 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 CAMPAIGN_LABEL = 'Check'; // Looks for campaigns with that label 

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


function main() {

    checkPausedCampaigns();
    checkSpend();

}

//Check the spend
function checkSpend() {
    var allCampaigns = AdsApp.campaigns()
        .withCondition("LabelNames CONTAINS_ANY ['" + CAMPAIGN_LABEL + "']")
        .forDateRange("TODAY")
        .get();

    while (allCampaigns.hasNext()) {
        var iterator = allCampaigns.next();
        var campaignBudget = iterator.getBudget();
        var campaignCost = iterator.getStatsFor('TODAY').getCost();

        //Is the spend too high?
        if (campaignCost > campaignBudget) {

            //Pause the campaign
            iterator.pause();

            //Log the name of the paused campaign
            Logger.log("The campaign: " + iterator.getName() + " has exceeded the daily budget - time to pause it!");
        }
    }
}

//Is it the time to unpause the campaigns?   
function checkPausedCampaigns() {
    var time = Utilities.formatDate(new Date(), AdsApp.currentAccount().getTimeZone(), "HH");

    //Just to be safe, the script tries 3 times to unpause the campagins
    if (time === "00" || time === "01" || time === "02") {
        var pausedCampaigns = AdsApp.campaigns()
            .withCondition("LabelNames CONTAINS_ANY ['" + CAMPAIGN_LABEL + "']")
            .withCondition("Status = PAUSED")
            .get();
        while (pausedCampaigns.hasNext()) {
            var iterator = pausedCampaigns.next();

            //Unpause the campaign
            iterator.enable();

            //Log the name of the unpaused campaign
            Logger.log("It's a new day for campaign: " + iterator.getName() + " time to unpause it!");
        }
    }
}

Dodaj komentarz

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