캠페인 예산을 관리하는 Google Ad 스크립트

게시 됨: 2021-10-23

오늘날 Google Ads를 활용하는 광고주로서 캠페인별로 특정 예산을 관리하는 것은 보편적인 어려움입니다. UI의 옵션은 단수입니다. 매시간 제외하는 규칙을 설정하십시오. 내 질문은 왜? 2019년에는 시트를 통해 캠페인 수준에서 관리할 스크립트가 있으면 좋지 않을까요? 시간이 좀 걸렸지만 아래에서 볼 수 있는 방법을 알아냈습니다. 여러 캠페인에 걸쳐 시트를 사용하여 단일 스크립트에서 예산을 관리하는 기능.

스크립트를 계속 진행하기 전에 예산 관리에 적합하지 않다는 규칙을 설정한 경우 다음은 예산에 따라 캠페인을 일시 중지하거나 활성화하는 시간 설정 제한이 있는 규칙을 만드는 방법의 예입니다. 캠페인. 여기에서 자동화된 규칙에 대한 추가 세부정보를 찾을 수 있습니다.

  1. Google Ads 계정에 로그인합니다.
  2. 캠페인 , 광고 그룹 또는 키워드 페이지로 이동합니다.
  3. 통계 표 위에 있는 점 3개 아이콘을 클릭합니다.
  4. 자동 규칙 만들기 를 선택합니다.
  5. "규칙 유형" 드롭다운에서 일시 중지 또는 활성화 를 선택합니다.
  6. 캠페인 유형 선택
  7. 조건을 추가하려면 '조건' 아래에서 +추가 를 클릭합니다.
  8. 번, 매일, 매주 또는 매월 규칙의 빈도를 정의합니다.
  9. 규칙에 영향을 미치는 문제에 대해 수신할 이메일 업데이트 유형을 선택합니다.
  10. 규칙의 이름을 지정합니다.
  11. 미리보기 를 클릭하여 원하는 방식으로 실행되도록 규칙을 설정했는지 확인합니다. 미리보기는 확인을 위한 것이며 계정을 영구적으로 변경하지 않습니다.
  12. 완료되면 규칙 저장 을 클릭합니다.

예산을 위해 내 생각에 규칙에는 이점이 있지만 그다지 가치가 없습니다. 따라서 도구 비용을 지불하거나 개발자나 엔지니어가 Google API와 작동하는 멋진 스크립트나 내부 플랫폼을 구축하도록 해야 합니다. 이러한 리소스에 액세스할 수 없고 광고주가 되고 싶은 경우에는 어떻게 합니까? 저는 할 수 없습니다. PPC Hero Library에서 찾을 수 있는 모든 UI 변경 및 개선 사항에 대한 최신 정보를 포함하는 코딩 및 API 항목을 배워야 합니다.

읽는 이유와 스크립트 작동 방식.

이 스크립트는 Google 시트를 통해 캠페인 수준에서 시간 단위로 예산을 관리하므로 확장할 수 있습니다. 내 지식과 내가 웹을 샅샅이 뒤진 바, 이것은 대중을 위한 첫 번째 것입니다. 원본 대본을 쓰지 않았습니다. Google에서 여기에서 찾을 수 있습니다. 1년이라는 시간 동안 시행착오를 많이 겪었던 많은 것들을 단순히 삭제하고 몇 가지를 다시 작업하여 입찰가 대신 예산을 관리하도록 했습니다.

스크립트를 사용하면 예산을 유연하게 설정하고 합리적으로 예산을 잊어버릴 수 있습니다. 미쳐가고 싶다면 내가 하는 대로 이 스크립트를 맞춤 Google 시트가 거의 없는 페이싱 스크립트와 함께 사용하여 나만의 예산 관리 도구와 입찰자를 가질 수 있습니다. 누군가가 이 작업을 수행하고 수백만 달러를 벌 수 있는 도구를 만들 수 있다면 무료로 할 수 있는 방법이 있어야 한다고 생각했습니다.

이 스크립트를 작성하는 더 좋은 방법이 있다는 것이 거의 확실하고 MCC 수준에서 여러 계정을 관리할 수 있는 방법이 있다고 확신합니다. 나는 그것을 알아내지 못했다. 이것을 보는 개발자나 엔지니어는 이 스크립트를 조정하고 MCC 수준에서 자신의 개선 사항과 함께 무료 버전을 공유하는 것이 좋습니다.

스크립트를 설정하는 방법

스크립트를 실행하기 전에 변경해야 할 몇 가지 사항이 있습니다.

  1. 새 Google 스프레드시트를 만드세요. 여기에서 스크립트는 새 시트 사본 URL을 생성한 후 일시중지 또는 일시중지 해제할 캠페인을 알 수 있습니다.
  2. 당신이이 줄을 업데이트하시기 바랍니다없는 경우 탭의 이름이 "규칙"으로 설정되어 있는지 확인합니다 "규칙이 당신의 탭 이름이 무엇이든로 변경 : var에 spreadsheetAccess = 새로운 SpreadsheetAccess (SPREADSHEET_URL을,"규칙 ")
  3. Google 스프레드시트에서 계속 작업 중이면 행 2를 계정 번호 '000-000-0000'으로 업데이트하세요.
  4. 행 3은 7일, 1주 또는 한 달 후에 실행하려는 경우 스크립트가 실행되는 기간 참조입니다. 이 행에 대한 유효한 입력은 아래 표를 참조하십시오. 예산 관리 목표와 관련이 있기 때문입니다.
Google 광고 스크립트 기간 옵션
  • 6행 C열부터 해당 기간의 예산을 추가할 수 있습니다.
  • 마지막으로 6행 D열에 캠페인을 나열하려고 합니다.

이 정보가 예산을 더 잘 관리하는 데 도움이 되기를 바랍니다. 거의 당신이 campaign.enable에 스크립트의 campaign.pause을 변경하고 스크립트를 복제 및 캠페인을 가능하게하는 또 다른 스크립트를 만들려면 간단한 공식을 조정할 수 잊어 버렸습니다.

스크립트

 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; } }