Перейти к содержимому

Лимит загрузки креативов Unity Ads на апку: 30 за 30 минут

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

Опубликовано
5 мин чтения
5 мин чтения
English
В статье
  1. Что написано в доках
  2. Как считается пачка
  3. Арифметика залива
  4. Как не упереться в лимит: пейсинг в коде
  5. Чего нет в доках
  6. Как это выглядит в DarkCore Ramet

Unity Ads принимает в каждую апку не больше 1 креатива в секунду и 30 креативов за 30 минут. Лимит один и для дашборда, и для Advertiser Public API. Пачка скидки не даёт: выбрали 10 крео и загрузили разом, значит потратили 10 из 30. Заливая в одну апку, вы упрётесь не в «1 в секунду», а в «30 за 30 минут».

Что написано в доках

По странице Unity про загрузку креативов, Unity ограничивает, сколько креативов можно загрузить в каждую апку за период. Лимиты общие для дашборда и Advertiser Public API: 1 креатив в секунду и 30 креативов за 30 минут.

Те же цифры стоят на странице What’s new in User Acquisition, в списке под октябрь 2026. Если лимит достигнут, Unity просит подождать, пока период сбросится, и только потом грузить в эту апку дальше.

Как считается пачка

Единица счёта: один креатив. Страница прямо говорит, что каждый креатив идёт в лимит, даже если вы загружаете несколько сразу. Пример Unity: выбрали 10 креативов и загрузили вместе, это 10 из 30 доступных за 30 минут.

Что из этого следует для работы:

  • Выбирать файлы пачкой и отправлять одной кнопкой не быстрее и не дешевле по квоте, чем по одному.
  • Лимит привязан к апке. В формулировке Unity «to each app», то есть квота у каждой апки своя. Это наше прочтение: на своей организации проверьте, прежде чем строить расписание на двух апках параллельно.
  • Лимит одинаковый в дашборде и в API, поэтому через скрипт его не обойти.

Арифметика залива

Дальше расчёт из заявленных лимитов, а не заявление Unity. Окно в 30 минут: фиксированное или скользящее, неизвестно, поэтому оценки приблизительные.

Один лимит в секунду сам по себе допускал бы 30 креативов за 30 секунд. Поэтому для пачки решает не он, а потолок 30 за 30 минут: именно он растягивает залив.

Креативов в одну апку Окон по 30 минут, минимум Примерное время
30 1 в одно окно, при 1 в секунду около 30 секунд
60 2 около часа
90 3 около полутора часов
120 4 порядка двух часов

Для 120 креативов в одну апку получается минимум четыре окна, примерно два часа при заявленном темпе. Точнее скажет только то, как Unity считает окно.

Теперь несколько апок. Допустим, у вас 12 креативов и 8 апок: это 96 загрузок, но по 12 на апку. Каждая апка укладывается в свои 30, а по секунде 12 креативов занимают около 12 секунд на апку. Если квоты и правда независимы по апкам, как следует из «to each app», залив идёт без ожидания. Другой пример: 40 крео на одну апку не влезут в одно окно, 10 придётся отложить.

Из этой арифметики три правила планирования:

  1. Считайте загрузки по парам «креатив — апка», а не по числу файлов. Одно видео в шесть апок это шесть загрузок, по одной на апку.
  2. Не планируйте впритык к 30: оставьте запас на повторы и на неизвестное, как именно считается окно.
  3. Чередуйте апки, а не заливайте одну до конца. Пока одна ждёт сброса периода, в другую можно грузить дальше, если квоты у апок и правда независимы.

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

Как не упереться в лимит: пейсинг в коде

Тип окна неизвестен, поэтому безопаснее считать его скользящим. Лимитер, который не пускает больше 30 загрузок за любые 30 минут, не нарушит и фиксированное окно. Код ниже держит это правило и паузу в секунду для каждой апки:

// Не больше 1 загрузки в секунду и 30 за любые 30 минут на каждую апку.
// Вызывать последовательно для одной апки: параллельные вызовы обходят проверку.
const sent = new Map(); // appId -> времена отправок, мс

async function takeSlot(appId) {
  const t = (sent.get(appId) ?? []).filter((x) => Date.now() - x < 30 * 60_000);
  const waitSecond = (t.at(-1) ?? 0) + 1000 - Date.now();
  const waitWindow = t.length >= 30 ? t[t.length - 30] + 30 * 60_000 - Date.now() : 0;
  const wait = Math.max(0, waitSecond, waitWindow);
  if (wait) await new Promise((r) => setTimeout(r, wait));
  t.push(Date.now());
  sent.set(appId, t);
}

// for (const file of files) { await takeSlot(appId); await upload(appId, file); }

Одна оговорка: интервал ровно в секунду ненадёжен из-за разброса задержек сети; добавьте небольшой запас (например, 100–200 мс). Если запросы уходят пачками, закладывайте его в паузу.

Чего нет в доках

На странице про загрузку креативов нет нескольких вещей, о которых спросит любой, кто льёт регулярно:

  • Какой код и какое сообщение вернёт API, когда лимит достигнут. Поэтому не привязывайтесь в коде к конкретному статусу и держите темп сами, до отправки, как в примере выше.
  • Фиксированное окно в 30 минут или скользящее.
  • Принимает ли Unity часть пачки, если отправить больше лимита, то есть первые 30 из 40.
  • Размеры файлов. Они описаны в спецификациях креативов, а не на этой странице, здесь их не разбираем.

Как это выглядит в DarkCore Ramet

В DarkCore Ramet видео загружается один раз и уходит во все апки, где оно нужно. Кампании на пары «апка — гео» очередь отправляет в темпе, который разрешает Unity. Лимит Unity при этом остаётся лимитом Unity: он считается на каждую апку, так что расписание залива удобно прикидывать по арифметике выше.

В DarkCore Ramet

Видео загружается один раз и идёт во все нужные апки

DarkCore Ramet загружает видео один раз и раздаёт его в каждую апку, где оно нужно. Очередь отправляет кампании в темпе, который разрешает Unity.

Все статьи