오픈소스마케팅

Google Ads Script로 시간대별 구글 광고 소진율 체크하기

Google Ads Script로 시간대별 구글 광고 소진율 체크하기

지난번 소개 드렸던 구글 애즈 스크립트! 많이 활용하고 계시나요? 🤗 이어지는 글도 구글 애즈 스크립트에 대한 내용입니다!

지난 번 글의 말미에서 잠깐 언급했듯, 당일 새벽시간대 노출량 체크만으로 잔여 예산(크레딧)을 점검하자니, 생각보다 광고가 중단되는 기간이 길어질 수 있겠다는 생각이 들었습니다. 예를 들어, 0시부터 새벽 1시까지, 단 1건이라도 노출이 발생했다면 1시 이후 예산이 소진되어서 광고가 중단되어도 계정 체크 알림 메일은 다음날 발송이 되는 문제가 발생하는 겁니다.

그래서, 00시부터의 노출을 체크하는 방법 외에도 시간대 별로 적정 금액을 소진하고 있는지 체크해 보면 조금 더 타이트하게 점검할 수 있지 않을까 하는 아이디어가 떠올랐습니다. 이번 글에서는 시간별로 적정 비용이 소진되고 있는지 체크하는 스크립트를 소개해 드리도록 하겠습니다. 🙌

지난번에 GAS에 대한 간단한 설명과 사용 방법에 대해서 소개해 드린 내용이 있는데요, 애즈 스크립트에 대한 기본적인 내용은 이전 글을 참고해 주세요 😊

Google Ads Script로 구글 광고 잔액 소진 알림 보내기

이번에도 먼저 구글 Google Ads Script의 한계점을 파악하고 시작하겠습니다.

✅  한계점

  • 계정 단위에서 예산 정보를 직접 가져올 수는 없다.(계정 크레딧은 별도의 셀렉터가 없다.)
  • 기간을 직접 선택할 수 있는 최소 범위는 날짜 단위다.(시간대로 체크하기 어렵다.)

✅  접근 방법

  • 누적으로 오늘 총 소진 광고비를 체크하자.
  • 지난 일정 기간의 시간대별 평균 소진 비용과 오늘 현재 시간까지의 누적 소진 비용을 비교하자. ⇒ 지난 평균 7일 소진 비용을 계산, (((7일 총 소진 비용 합계 ÷ 7) ÷ 24 )*현재 시간)으로 오늘 누적 소진 광고비를 비교하자

광고비 비교

스크립트 작성

당일 XX시까지 소진 비용이 지난 7일 대비 일정 수준 미만인 경우, 지정된 메일 주소로 계정 체크 필요하다는 메일을 전송하는 스크립트를 작성해 보겠습니다.

아래 스크립트를 구글 애즈 스크립트 입력창에 입력합니다.

function main() {

  var todayCampSelector = AdsApp.campaigns().forDateRange("TODAY").withCondition("Status = ENABLED").get();

  while (todayCampSelector.hasNext()) {
    var todaySumCost = todayTotalCost;
    var todayCamp = todayCampSelector.next();
    var todayCost = todayCamp.getStatsFor("TODAY").getCost();

    if (typeof todaySumCost != "number"){
      var todayTotalCost = todayCost;
    } else {
      var todayTotalCost = todayCost + todaySumCost;
    };
  };

  var campaignSelector = AdsApp.campaigns().forDateRange("LAST_7_DAYS").withCondition("Cost > 0").get();

  while (campaignSelector.hasNext()){
    var weekSumCost = weekTotalCost;
    var campaign = campaignSelector.next();
    var weekCost = campaign.getStatsFor("LAST_7_DAYS").getCost();

    if (typeof weekSumCost != "number"){
      var weekTotalCost = weekCost;
    } else {
      var weekTotalCost = weekCost + weekSumCost;
    };
  };

  var accTimeZone = AdsApp.currentAccount().getTimeZone();
  var date = new Date();
  var accHour = Utilities.formatDate(date, accTimeZone, "kk");
  var avgCost = parseInt(weekTotalCost/7/24*accHour);

  var costRate = parseInt(todayTotalCost/avgCost*100);
  var nowTime = Utilities.formatDate(date, accTimeZone, "yyyy-MM-dd kk:mm");

  var accId = AdsApp.currentAccount().getCustomerId();
  var accName = AdsApp.currentAccount().getName();
  if (accHour > 12 && accHour < 19 && costRate < 70){
    MailApp.sendEmail("[email protected]", "[중요] 구글 Ads " + "[" + accName +"("+ accId +")" + "]" +" 계정" + " 체크 요망.", nowTime + "기준, 소진된 총 광고 비용이 지난 7일 평균 대비 " + costRate + "% 수준입니다. 계정을 확인해주세요.");
  };  

}

[email protected] 부분에 알림 받을 메일 주소를 입력합니다.

스크립트 설명

위 스크립트가 어떤 역할을 하는지 나누어 살펴보겠습니다. 지난번 스크립트 보다 조금 길고 복잡해졌는데요, 조금씩 나누어서 보면 이해가 더 편하실 거예요

오늘자 운영 중인 캠페인들의 총비용 합계 구하기

// 오늘, 현재 시간까지 비용이 소진된 캠페인 목록 가져오기.

var todayCampSelector = AdsApp.campaigns().forDateRange("TODAY")..withCondition("Status = ENABLED").get();

// '운영중'인 캠페인의 오늘 현재 시간까지 총비용 합계를 계산해서 'todayTotalCost' 변수에 할당하기.

while (todayCampSelector.hasNext()) {
  var todaySumCost = todayTotalCost;
  var todayCamp = todayCampSelector.next();
  var todayCost = todayCamp.getStatsFor("TODAY").getCost();

// 처음에는 todaySumCost에 값이 없기 때문에, 숫자가 아닌 것과 숫자를 더하면 오류가 발생됨.
// 오류를 방지하기 위해서, 조건문으로 todaySumCost가 숫자가 아닐 때는 현재 선택된 캠페인 비용이 들어갈 수 있도록 설정해 줍니다.

  if (typeof todaySumCost != "number"){
    var todayTotalCost = todayCost;
  } else {
    var todayTotalCost = todayCost + todaySumCost;
  };
};
  • todayCost에는 현재 선택된 캠페인의 비용을 가져와서 할당합니다.
  • todaySumCost에는 이전에 선택된 캠페인까지 오늘 소진된 비용의 누적된 총합을 할당합니다.
  • todayTotalCost에는 ‘이전 캠페인 소진 비용 누계 + 현재 캠페인 소진 비용’값을 할당합니다. 최종적으로 모든 캠페인 비용의 총합이 할당됩니다.

지난 7일, 비용이 발생된 캠페인들의 총비용 합계 구하기

// 지난 7일간 비용이 소진된 캠페인 목록 가져오기.
var campaignSelector = AdsApp.campaigns().forDateRange("LAST_7_DAYS").withCondition("Cost > 0").get();

// 지난 7일간 비용이 소진된 캠페인의 총비용 합계 계산해서 'weekTotalCost' 변수에 할당하기.

while (campaignSelector.hasNext()) {
  var weekSumCost = weekTotalCost;
  var campaign = campaignSelector.next();
  var weekCost = campaign.getStatsFor("LAST_7_DAYS").getCost();

// 처음에는 weekSumCost에 값이 없기 때문에, 숫자가 아닌 것과 숫자를 더하면 오류가 발생됨.
// 오류를 방지하기 위해서, 조건문으로 weekSumCost가 숫자가 아닐 때는 현재 선택된 캠페인 비용이 들어갈 수 있도록 설정해 줍니다.

  if (typeof weekSumCost != "number"){
    var weekTotalCost = weekCost;
  } else {
    var weekTotalCost = weekCost + weekSumCost;
  };
};
  • weekCost에는 현재 선택된 캠페인의 지난 7일간 소진 비용을 가져와서 할당합니다.
  • weekSumCost에는 이전 선택 캠페인까지의 7일간 소진 비용의 누적된 총합을 할당합니다.
  • weekTotalCost에는 ‘이전 캠페인까지의 7일간 소진 비용 누계 + 현재 캠페인의 이전 7일 소진 비용’ 값을 할당합니다. 최종적으로 모든 캠페인 지난 7일 소진 비용의 총합이 할당됩니다.

조회 시간대 지난 7일 평균 소진 금액 계산하기

// 계정 시간대의 일시 정보를 가져와 24시 형태로 현재 시간 정보를 가져와 'accHour' 변수에 할당.
// 지난 7일 총 소진 비용을 7로 나누고, 다시 24로 나누어 시간별 소진 비용을 계산.
// 시간별 소진 평균 비용과 현재 시간을 곱하여 'avgCost'에 할당.

  var accTimeZone = AdsApp.currentAccount().getTimeZone();
  var date = new Date();
  var accHour = Utilities.formatDate(date, accTimeZone, "kk");
  var avgCost = parseInt(weekTotalCost/7/24*accHour);

당일 소진율 계산 & 현재 시간 정보 가져오기

// 평균 소진 비용 대비 당일 소진율 계산하여 'costRate'변수에 할당.
  var costRate = parseInt(todayTotalCost/avgCost*100);

// 현재 시간 정보 가져와서 'nowTime'변수에 할당.
  var nowTime = Utilities.formatDate(date, accTimeZone, "yyyy-MM-dd kk:mm");

메일 발송 조건 설정 및 내용 작성

// 계정 정보 (이름, ID) 각 변수에 할당.
var accId = AdsApp.currentAccount().getCustomerId();
var accName = AdsApp.currentAccount().getName();

// from 13 to 18, 소진율이 70% 미만인 경우 메일 발송.
if (accHour > 12 && accHour < 19 && costRate < 70){
  MailApp.sendEmail("[email protected]",
  "[중요] 구글 Ads " + "[" + accName +"("+ accId +")" + "]" +" 계정" + " 체크 요망." ,
  nowTime + "기준, 소진된 총 광고 비용이 지난 7일 평균 대비 " + costRate + "% 수준입니다. 계정을 확인해주세요.");
};
  • accName에는 해당 계정의 설정 계정명이 들어갑니다.
  • accId에는 해당 계정의 고유번호 ID가 들어갑니다.
  • nowTime에는 시간 정보가 “yyyy-MM-dd kk:mm” 형태로 들어갑니다.
  • costRate에는 지난 7일 평균 대비 현재 소진율이 정수 형태로 들어갑니다.

실행 규칙 설정하기

모든 과정은 GAS 1번 글(보러 가기)과 동일하게 설정하면 되지만, 빈도 설정 부분이 조금 다르게 진행됩니다. 광고 미 노출 여부를 체크할 때는 체크를 원하는 시간에 1번 만 실행했다면, 이번에는 빈도를 ‘매시간’으로 설정해 줍니다.

실행 규칙 1

실행 규칙 2

스크립트 실행 결과

실행 결과

직접 테스트해보니 일정 소진율 미만인 경우, 메일을 발송해 주는 기능은 정상적으로 잘 작동하는 것을 확인해 볼 수 있었는데요

아무래도 매시간 동일 비중으로 광고비가 소진되는 것은 아니고, 대부분의 유입이나 전환 발생이 이른 오후 시간대에 집중되기 때문에 오전 시간에는 소진이 저조하다는 알림이 계속 오는 문제도 함께 발견할 수 있었습니다. 그래서, 최종적으로 추천하는 알림 시간대 설정은 13 ~ 19시 정도이고, 소진율 추이도 100% 보다는 70% 정도로 낮추어 체크하는 것을 권장 드립니다.

계정별로 사용자 특성에 따라 처음에는 정상 운영 중인 기간 중에도 계정 체크 알림이 계속 발송될 수도 있는데요, 며칠간 테스트하며 알림이 오는 시간대나 소진율을 현재 운영 중인 계정에 최적화해주면 꽤 괜찮은 기능이 될 수 있을 것 같습니다.

그럼 오늘도 더 쉽고 재미있는 업무시간 보내시기 바랍니다! 🥳

작성자

김예나

Google Ads Script로 시간대별 구글 광고 소진율 체크하기
이전 글

Google Ads Script로 구글 광고 잔액 소진 알림 보내기

다음 글

유니버설 애널리틱스(UA)와 구글 애널리틱스 4(GA4)의 차이점

Google Ads Script로 시간대별 구글 광고 소진율 체크하기
상담 요청하기

문의 남기기

오픈소스마케팅의 컨설팅이 필요하시다면 문의를 남겨주세요.

[email protected]

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.