После частичного возврата передавайте в Google Ads оставшуюся ценность покупки. Если заказ был на 600 BYN, а покупателю вернули 150 BYN, новая ценность — 450 BYN. Сумма возврата 150 BYN и изменение −150 BYN решают другую задачу: ими нельзя заменять итоговую ценность конверсии.
Чтобы корректировка не уменьшила результат дважды, свяжите возврат с исходным заказом, проверьте тип изменения и сохраните версию отправленных данных. Ниже — протокол для покупки, уже записанной тегом Google Ads с идентификатором транзакции. Допуск корректировок для целей, импортированных из других источников, проверяют отдельно; наличие refund в другой системе ещё не подтверждает нужный результат в Ads.
Выберите изменение ценности или полный отзыв
Google различает два действия: изменение ценности сохраняет число конверсий, полный отзыв убирает конверсию из счётчика и обнуляет её ценность. Для частичного возврата с положительным остатком подходит изменение ценности.
| Ситуация | Действие в файловом шаблоне | Что должно остаться |
|---|---|---|
| Вернули часть заказа | RESTATE | Та же покупка с новой положительной ценностью |
| Покупку нужно полностью исключить из результатов | RETRACT | Покупка удалена из числа конверсий, её ценность — ноль |
| Возврат ещё не подтверждён | Пока не отправлять корректировку | Исходная запись и задача на проверку |
Отзыв и изменение до нуля требуют отдельной проверки: последующие корректировки такой конверсии Google игнорирует. Не обнуляйте ценность на время спора с клиентом. В API названия типов отличаются: RESTATEMENT и RETRACTION; не переносите их автоматически в файловый шаблон с RESTATE и RETRACT.
Если вы передавали в качестве ценности маржинальный доход или условную оценку лида, вычитать сумму денежного возврата напрямую нельзя. Сначала пересчитайте ту же бизнес-величину по исходному правилу. Этот пример использует стоимость покупки; общая связь ценности с результатом бизнеса разобрана в юнит-экономике рекламы.
Соберите журнал до файла импорта
Для каждого изменения сохраните исходный ID заказа, действие-конверсию, первоначальную ценность и валюту, ID возврата, подтверждённую сумму возврата, время изменения и новую ценность. Отдельно храните состояние обработки: подготовлено, отправлено, отклонено или проверено в отчёте.
ID заказа должен совпадать с исходной конверсией. Допишите к нему суффикс — и вы уже потеряете прямую ссылку на нужную покупку. Время изменения тоже имеет смысл: по правилам файловой загрузки оно должно быть позже конверсии и раньше загрузки. Название действия должно совпадать с настройкой аккаунта.
Внутренний refund_id защищает ваш расчёт от повторного вычитания одного возврата. Это поле журнала, а не дополнительная колонка для Google: берите свежий шаблон в аккаунте и переносите только предусмотренные им поля.
Учебный пример: два возврата по одному заказу
Все события и суммы вымышлены. В локальном управленческом журнале используются BYN; это не описание реального рекламного аккаунта. Для рабочего импорта сохраняйте исходную валюту конверсии и проверяйте формат своего действия.
Есть три покупки одного действия: A — 600 BYN, B — 200 BYN, C — 300 BYN. Первоначальная ценность — 1 100 BYN. Затем по A подтвердили два разных возврата, по B — полный; C остался без изменений.
| Событие журнала | Результат локальной проверки | Подготовленное изменение |
|---|---|---|
| A, возврат R-A1 на 150 BYN | Остаток 600 − 150 = 450 | RESTATE, новая ценность 450 |
| A, возврат R-A2 на 50 BYN | Остаток 600 − 150 − 50 = 400 | RESTATE, новая ценность 400 |
| Повтор R-A2 с теми же данными | Возврат уже учтён | Новую строку не создавать |
| B, возврат R-B1 на 200 BYN | Полный отзыв подтверждён | RETRACT, без новой положительной ценности |
Второе изменение по A содержит 400 BYN. Повторно отправить 50 или вычесть 150 ещё раз — значит исказить итог. Определение поля новой ценности прямо использует значение после изменения, а для следующего изменения требует более позднее время.
Два разных возврата меняют остаток последовательно. Повтор одной записи не становится третьим возвратом.
Контрольный итог после этих событий — 400 + 0 + 300 = 700 BYN. В упрощённой модели трёх целиком учтённых покупок число конверсий уменьшается с трёх до двух: частичный возврат A сохраняет покупку, полный отзыв B убирает её. Это локальная проверка учебного набора; реальный агрегат зависит также от выбранных колонок и атрибуции.
При неизменном учебном расходе 200 BYN отношение ценности к расходу меняется с 1 100 / 200 = 5,5 до 700 / 200 = 3,5. Полученная разница не доказывает ухудшение новой рекламы: уточнился результат прежних покупок.
Проверьте очередь изменений перед загрузкой
Остановите строку, если исходный заказ не найден, валюта не совпадает, сумма возвратов превышает первоначальную ценность или время нового изменения не позже предыдущего. Одинаковый refund_id с другой суммой — конфликт данных, а не повод выбрать последнюю строку без проверки.
Минимальная арифметика для двух частичных возвратов воспроизводится без внешних библиотек:
from decimal import Decimal as D
original = D("600")
refunds = [("R-A1", D("150")),
("R-A2", D("50")),
("R-A2", D("50"))]
seen = {}
for refund_id, amount in refunds:
if refund_id in seen:
assert seen[refund_id] == amount
continue
assert amount > 0
seen[refund_id] = amount
value = original - sum(seen.values(), D("0"))
assert value > 0 # полный отзыв — отдельное решение
print(refund_id, value)Результат — две строки: R-A1 450, R-A2 400. Код проверяет учебный расчёт; он не отправляет данные в Ads и не подтверждает наличие исходной конверсии. Для рабочего процесса нужны также журнал уже принятых изменений и проверка конфликтующих версий.
Перенесите проверенные строки в актуальный шаблон
Скачайте в аккаунте свежий шаблон корректировок. Для изменения заполните исходный ID заказа, название действия, время, RESTATE, новую ценность и валюту; для отзыва — RETRACT. Новые конверсии и корректировки загружайте отдельно.
Google рекомендует ждать минимум 24 часа после исходной конверсии. Допустимый срок загрузки и влияние на ставки сверяйте для своего сценария в актуальной справке.
Для технического повтора сохраняйте ID заказа, действие, время и состав данных: Google использует эти ключи для распознавания повторов. Новое подтверждённое изменение получает более позднее время.
Примите результат в отчёте
Сохраните файл, время загрузки и результат обработки каждой строки. Если исходная конверсия не найдена, проверьте ID и действие; не создавайте вторую покупку ради устранения ошибки корректировки.
Затем сравните один и тот же период и действие до и после обработки. Сегмент корректировок Google Ads позволяет увидеть исходные значения и внесённые изменения. Для учебного набора ожидается уменьшение ценности на 400 BYN и отзыв одной покупки. Успешная загрузка файла и совпадение этих контрольных величин — разные доказательства.
В управленческой таблице выберите один маршрут: исходная ценность минус подтверждённые возвраты либо уже исправленная ценность из Ads. Если взять исправленные 700 BYN и снова вычесть 400 BYN возвратов, получится ошибочная сумма 300 BYN.
Правило учёта возвратов и состав расходов закрепите в основном разборе экономики рекламы. Если изменения затрагивают закрытый период, сохраните новый снимок по протоколу пересчёта прошлых конверсий. Перенос самого импорта на новый транспорт решает отдельный материал о Data Manager API: поля его новых событий не заменяют шаблон корректировок.
Источники
Материал подготовлен редакцией WiseLab с помощью AI. Источники и фактические утверждения проверены при подготовке.
Что думаете?
Загружаем комментарии…