Выгрузка целей из аккаунта Google Analytics

Если вы работаете над крупным проектом с кучей представлений в аналитиксе да еще и параллельно с другим агентством и даже не одним, то наверняка знаете, как полезно логировать изменения в целях, чтобы их легко было восстановить в случае чего.
Я как любой нормальный человек, глядя на проект, где настроено свыше полторы тысячи целей, совсем не горю желанием заносить их в какой-то документ руками, поэтому написал небольшой скрипт, который возможно пригодится и вам.

Тонкости настройки аналитики в Telegram канале

Содержание

  1. Таблица выгрузки
  2. Скрипт выгрузки
  3. Комментарии

Таблица выгрузки

В результате работы скрипта получится табличка со следующими полями:

  • Номер цели в представлении
  • Имя цели
  • Аккаунт
  • Ресурс
  • Представление
  • Активность цели
  • Тип показывает, установлена ли цель на достижение страницы, событие еще что-то
  • Условия - для страниц это тип соответствия и url, для событий название элемента события, тип соответствия и проверяемое значение

Выгрузка целей из Google Analytics

Скрипт выгрузки

Привычным движением лезем в Spreadsheets - Инструменты - Редактор скриптов и копипастим нижеследующее безобразие:

function goals() {
  var p = []
  var v = []
  var g = []

  var a = Analytics.Management.Accounts.list()

  var ss = SpreadsheetApp.getActiveSheet()
  ss.clear()
  var pr = [
    [
      'Номер',
      'Имя',
      'Аккаунт',
      'Ресурс',
      'Представление',
      'Активность',
      'Тип',
      'Условие 1',
      '',
      '',
      'Условие 2',
      '',
      '',
      'Условие 3',
      '',
      '',
    ],
  ]
  ss.getRange(ss.getLastRow() + 1, 1, pr.length, 16).setValues(pr)

  // здесь идет перебор аккаунтов и можно ограничить по частям
  for (var i = 0; i < a.items.length; i++) {
    p[i] = Analytics.Management.Webproperties.list(a.items[i].id)
  }

  for (var i = 0; i < p.length; i++) {
    v[i] = []
    for (var j = 0; j < p[i].items.length; j++) {
      v[i][j] = Analytics.Management.Profiles.list(
        p[i].items[j].accountId,
        p[i].items[j].id
      )
      for (var k = 0; k < v[i][j].items.length; k++) {
        var t = Analytics.Management.Goals.list(
          v[i][j].items[k].accountId,
          v[i][j].items[k].webPropertyId,
          v[i][j].items[k].id
        )
        g.push(t)
        writeGoals(t)
      }
    }
  }
}
function writeGoals(g) {
  var l = g.items.length
  var pr = []
  var ss = SpreadsheetApp.getActiveSheet()

  for (var i = 0; i < g.items.length; i++) {
    var t = g.items[i]
    switch (t.type) {
      case 'URL_DESTINATION':
        pr.push([
          t.id,
          t.name,
          t.accountId,
          t.webPropertyId,
          t.profileId,
          t.active,
          t.type,
          t.urlDestinationDetails.matchType,
          t.urlDestinationDetails.url,
          '',
          '',
          '',
          '',
          '',
          '',
          '',
        ])
        break
      case 'VISIT_TIME_ON_SITE':
        pr.push([
          t.id,
          t.name,
          t.accountId,
          t.webPropertyId,
          t.profileId,
          t.active,
          t.type,
          t.visitTimeOnSiteDetails.comparisonType,
          t.visitTimeOnSiteDetails.comparisonValue,
          '',
          '',
          '',
          '',
          '',
          '',
          '',
        ])
        break
      case 'EVENT':
        var ec = t.eventDetails.eventConditions
        if (ec.length == 3) {
          pr.push([
            t.id,
            t.name,
            t.accountId,
            t.webPropertyId,
            t.profileId,
            t.active,
            t.type,
            ec[0].type,
            ec[0].matchType,
            ec[0].expression,
            ec[1].type,
            ec[1].matchType,
            ec[1].expression,
            ec[2].type,
            ec[2].matchType,
            ec[2].expression,
          ])
        } else if (ec.length == 2) {
          pr.push([
            t.id,
            t.name,
            t.accountId,
            t.webPropertyId,
            t.profileId,
            t.active,
            t.type,
            ec[0].type,
            ec[0].matchType,
            ec[0].expression,
            ec[1].type,
            ec[1].matchType,
            ec[1].expression,
            '',
            '',
            '',
          ])
        } else {
          pr.push([
            t.id,
            t.name,
            t.accountId,
            t.webPropertyId,
            t.profileId,
            t.active,
            t.type,
            ec[0].type,
            ec[0].matchType,
            ec[0].expression,
            '',
            '',
            '',
            '',
            '',
            '',
          ])
        }
        break
      default:
        pr.push([
          t.id,
          t.name,
          t.accountId,
          t.webPropertyId,
          t.profileId,
          t.active,
          t.type,
          '',
          '',
          '',
          '',
          '',
          '',
          '',
          '',
          '',
        ])
        break
    }
  }
  if (pr.length)
    ss.getRange(ss.getLastRow() + 1, 1, pr.length, 16).setValues(pr)
}

Для корректной работы необходимо включить Analytics API в Ресурсы - Дополнительные функции Google.... Там же читателю предложат активировать его в консоли и дадут ссылку, это тоже надо будет сделать.

После всех приготовлений выбираем функцию goals() и жмем треугольник.

Скрипт написан на скорую руку и выгружает цели со всех аккаунтов, к которым есть доступ. Если нужно только с какого-то определенного, то я обозначил кусок кода с перебором, не стесняйтесь там вмешаться и уточнить, откуда грузить.