Как это работает
Три шага от «непонятно, откуда клики» до «площадка закрыта во всех кампаниях аккаунта».
Скрипт находит площадки
Ads Script раз в сутки выгружает отчёт по местам показа PMax, считает CTR, клики без конверсий, тип площадки (сайт/приложение) и сравнивает с порогами.
Подозрительное — в исключения
Всё, что превышает пороги (аномальный CTR, приложения-игры, домены-фермы), уходит в account-level список исключений — закрывается сразу для всех кампаний, не только для одной.
Отчёт «было → стало»
По каждому прогону — что исключили и почему, плюс изменение средней цены клика, чтобы было видно, сработало или нет.
Google Ads Script — автоисключение площадок
Ядро подхода: запрос к group_placement_view (отчёт по площадкам/приложениям, на которых показывался Performance Max), пороги для флагов и запись в account-level список исключений.
/**
* PMax Placement & App Auto-Exclusion Guard
* 1) раз в сутки берёт отчёт по площадкам PMax
* 2) считает CTR / клики без конверсий / тип площадки
* 3) подозрительные -> account-level список исключений
* 4) шлёт отчёт "было -> стало"
*/
var CONFIG = {
LOOKBACK_DAYS: 14,
MIN_CLICKS_TO_JUDGE: 15,
CTR_ANOMALY_THRESHOLD: 0.25, // 25% для КМС/PMax уже подозрительно
ZERO_CONV_CLICK_THRESHOLD: 20, // 20+ кликов без единой конверсии
MOBILE_APP_AUTO_EXCLUDE: true,
FARM_DOMAINS: ['clickfarm-network.info', 'trafficboost-demo.ru'],
EXCLUSION_LIST_NAME: 'PMax — авто-исключения (антифрод)',
REPORT_EMAIL: '<email для отчёта>'
};
function main() {
var report = AdsApp.report(
"SELECT group_placement_view.placement, group_placement_view.placement_type, " +
"metrics.clicks, metrics.ctr, metrics.conversions " +
"FROM group_placement_view " +
"WHERE segments.date DURING LAST_" + CONFIG.LOOKBACK_DAYS + "_DAYS " +
"AND campaign.advertising_channel_type = 'PERFORMANCE_MAX'"
);
var suspects = [];
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var clicks = Number(row['metrics.clicks']);
if (clicks < CONFIG.MIN_CLICKS_TO_JUDGE) continue;
var ctr = Number(row['metrics.ctr']);
var conversions = Number(row['metrics.conversions']);
var placement = row['group_placement_view.placement'];
var placementType = row['group_placement_view.placement_type'];
var reasons = [];
if (ctr >= CONFIG.CTR_ANOMALY_THRESHOLD) reasons.push('аномальный CTR ' + Math.round(ctr*100) + '%');
if (conversions === 0 && clicks >= CONFIG.ZERO_CONV_CLICK_THRESHOLD) reasons.push(clicks + ' кликов, 0 конверсий');
if (CONFIG.MOBILE_APP_AUTO_EXCLUDE && placementType === 'MOBILE_APPLICATION') reasons.push('мобильное приложение');
if (CONFIG.FARM_DOMAINS.indexOf(placement) !== -1) reasons.push('домен из чёрного списка');
if (reasons.length) suspects.push({ placement: placement, reasons: reasons, clicks: clicks });
}
if (suspects.length) {
excludeAccountWide(suspects); // account-level: закрывает площадку сразу во ВСЕХ кампаниях
sendReport(suspects); // письмо "было -> стало" на REPORT_EMAIL
}
}
// excludeAccountWide / sendReport / вспомогательные функции — показываю полностью
// на созвоне и адаптирую под структуру вашего аккаунта (сколько кампаний PMax,
// какие конверсии считаются целевыми, куда слать отчёт).
Это не «поставил и забыл»: у площадок PMax своя специфика (часть трафика Google не раскрывает построчно), поэтому скрипт — только автоматическая часть. Ручная сверка через Insights (пункт 6 в чек-листе ниже) остаётся обязательной.
Дашборд по площадкам
ДЕМО-ДАННЫЕ — не аккаунт заказчикаТак выглядит отчёт после прогона скрипта: что нашли, почему флагнули, что сделали.
| Площадка / приложение | Тип | Клики | CTR | Конверсии | Флаг | Статус |
|---|---|---|---|---|---|---|
| clickfarm-network.info | сайт | 210 | 44% | 0 | домен-ферма | исключено |
| com.quiz.spinreward (игра) | приложение | 340 | 38% | 0 | приложение + 0 конв. | исключено |
| news-aggregator-demo.net | сайт | 95 | 29% | 1 | аномальный CTR | исключено |
| recipe-blog-demo.com | сайт | 58 | 6.1% | 3 | — | оставлено |
| shop-review-demo.com | сайт | 120 | 4.2% | 6 | — | оставлено |
Средняя цена клика по кампании — демо-пример
Условный пример на демо-цифрах: после исключения площадок-фермы и приложения аукцион перестаёт разогреваться фродовым трафиком, средняя цена клика падает. Точные цифры по вашему аккаунту увидим после первого прогона отчёта.
Чек-лист настройки аккаунта
Скрипт закрывает то, что уже прилетело. Эти шесть пунктов не дают проблеме повториться.
Адаптируем скрипт и чек-лист под ваш аккаунт
Дадим доступ на просмотр — за 1-2 дня разберём, откуда именно идёт склик в вашем случае, и подключим авто-исключения.