Массовый запуск кампаний Unity Ads: что умеют xlsx-таблицы
Таблицы Bulk Campaign Management правят таргетинг, ставки и расписания, но не бюджеты и не создают кампании с Automated Bidding. Разбор по докам Unity.
Массовый запускUnity API5 мин чтения

Advertiser Public API заменил Advertising Management API: новая база, id приложений, микродоллары, другие поля. Порядок миграции и что убрано.

В сентябре 2026 года Advertiser Public API заменил Advertising Management API (/advertise/v1). Если ваши скрипты или сервисы ходят в старый API, их придётся переписывать: у нового другая база и префикс пути, id приложений стали UUID, деньги передаются в микродолларах, часть полей переименована, часть убрана. Даты отключения старого API в документации Unity нет.
Запись за сентябрь 2026 на странице What’s new in User Acquisition говорит прямо: Advertiser Public API заменяет Advertising Management API (/advertise/v1), а у кого есть интеграция со старым API, тому нужно перейти на новый. Страница про управление кампаниями через API называет /advertise/v1 предыдущей версией advertiser API. Через новый можно программно управлять приложениями, кампаниями, бидами, source bids и ROAS-целями, бюджетами, креативами и creative packs. В дашборде он лежит в Settings > API management.
Подробную карту переноса Unity вынесла на отдельную страницу, Advertiser API migration reference. Всё ниже про маршруты, поля и порядок взято оттуда. Страница сама говорит, что написана для LLM-агентов, пишущих код, а из даты на ней только пометка «Last updated 2 months ago». Читается как справочник, не как инструкция для людей.
Хост остаётся прежним, services.api.unity.com. Меняются база и путь:
prod: https://services.api.unity.com/ads/advertiser
staging: https://staging.services.api.unity.com/ads/advertiser
| Что | Старый API | Новый API |
|---|---|---|
| Префикс пути | /advertise/v1 |
/public/v1 |
| Приложение в пути | apps/{campaignSetId} |
applications/{applicationId} |
| Авторизация | HTTP Basic (ключ service account) | HTTP Basic работает, дополнительно принимается Bearer JWT |
Пример нового маршрута со страницы Unity:
…/ads/advertiser/public/v1/organizations/{orgId}/applications/{applicationId}/campaigns
Ключ service account остаётся тем же, но нужные роли и разрешения другие. Поэтому 403 с тем же ключом, по справочнику Unity, означает не выданную роль, а не ошибку в запросе. Как это искать и чинить, разобрано в статье про ошибку 403 Invalid Credentials. Если у вас несколько организаций, роли проверяйте в каждой: про подключение нескольких организаций есть страница про кабинеты.
Раньше приложение определялось через campaignSetId, 24 символа hex. Теперь это applicationId в формате UUID. Unity советует сохранить таблицу соответствия «старый id → новый»: без неё вы не свяжете старые данные с новыми маршрутами.
Id кампаний, креативов и creative packs не меняются, это по-прежнему 24 символа hex. Переживает ли id креатива повторную загрузку, страница не говорит и предлагает проверить самому.
Раньше суммы были десятичными строками в долларах. Теперь это целые числа в микродолларах, 1 USD равен 1 000 000. Примеры со страницы Unity: "2500.20" превращается в "2500200000", а бид "0.201" в 201000. Заметьте: в примерах Unity сумма дана в кавычках, бид без. Точный тип поля сверяйте со схемой, а не с этой статьёй.
Цель по ROAS тоже поменялась. Было goal с процентом строкой ("12.34"), стало target с долей числом (0.1234).
Переводить через умножение на 1e6 не стоит: дробное число рядом с границей округления может дать хвост. Надёжнее резать строку:
// "2500.20" -> 2500200000n, "0.201" -> 201000n
// знаки после шестого отбрасываются, отрицательные суммы не проверялись
function usdToMicros(usd) {
const [whole, frac = ""] = String(usd).split(".");
return BigInt(whole + frac.padEnd(6, "0").slice(0, 6));
}
Выборка из справочника Unity:
| Было | Стало | Заметка |
|---|---|---|
store |
store + обязательный platform |
платформу теперь надо указывать |
goal |
optimizationType |
installs стал cpi, eventOptimization стал appEventConversion |
scheduleStart / scheduleEnd |
start / end |
|
enabled |
paused |
смысл перевёрнут |
biddingStrategy |
bidConfigurationMethod |
automated стал auto |
cpiBids[] |
manualBids[] |
|
sourceBids[] |
manualSourceBids[] |
|
eventOptimizationBids[] |
appEventBids[] |
Самая дорогая ошибка здесь enabled → paused. Булево значение переносится механически, а смысл у него обратный: если пересадить enabled: true в paused: true, живая кампания встанет на паузу, а выключенная запустится.
Из выбранных Unity примеров:
GET …/apps стал GET …/applications.GET …/organizations/{orgId}/campaigns?appIds={applicationId}.cpi-bids, source-bids, roas-bids, event-optimization-bids) слились в один PATCH …/campaigns/{campaignId}/bids.PATCH …/campaigns/{campaignId}/budget-cap и PATCH …/campaigns/{campaignId}/targeting.PATCH …/assign-creative-pack и DELETE …/unassign-creative-pack.GET campaign?includeFields=….Про новый PATCH …/bids Unity пишет, что он заменяет весь набор бидов этого типа: надо слать полный массив, а [] очищает набор. Из этого следует практический вывод: если раньше вы добавляли один source bid отдельным запросом, то теперь отправка одного элемента сотрёт все остальные source bids. Сначала прочитайте текущий набор, потом меняйте и отправляйте целиком.
В новом API нет:
limitedAdTracking, connectionType, screenSize, screenDensity, allowedDevices, osMax.adomain.squareVideo: он не поддерживается.Если ваша связка опиралась на что-то из этого списка, переписывать надо логику, а не только имена полей.
Порядок, который предлагает сама страница Unity:
optimizationType и start, остальное добить через PATCH.Логика понятна: сначала то, на что ссылается остальное (приложения и их id), потом сами кампании, потом всё, что к ним крепится.
Страницы, которые мы прочитали, молчат о нескольких вещах, о которых вы спросите в первую очередь:
/advertise/v1, ни срок, пока старый API ещё работает, нигде не указаны. Считать, что у вас есть время, нельзя. Считать, что его нет, тоже: просто неизвестно.DarkCore Ramet работает с Unity Ads через официальный Unity API: организацию подключают ключом service account или своим Unity ID. Пары «апка — гео» превращаются в кампании пачкой с превью до отправки, а биды, дневной бюджет и паузы можно править сразу по многим кампаниям и кабинетам. Каждое изменение читается обратно из Unity, прежде чем считается выполненным.
Залив по официальному Unity API пачкой
DarkCore Ramet запускает и правит кампании Unity Ads пакетно через официальный Unity API. Организацию подключаете ключом service account.
Таблицы Bulk Campaign Management правят таргетинг, ставки и расписания, но не бюджеты и не создают кампании с Automated Bidding. Разбор по докам Unity.
Массовый запускUnity API5 мин чтения

Ключ service account рабочий, а запросы падают с 403 Invalid Credentials: у аккаунта нет роли. Какие роли нужны и кто может создать ключ.
Unity API5 мин чтения

Лимит Unity Ads: 1 креатив в секунду и 30 за 30 минут на каждую апку, пачка считается поштучно. Прикидываем залив и что не сказано в доках.
КреативыUnity API5 мин чтения
