ROAS вашого застосунку досі враховує покупки, за які Apple і Google повернули гроші, тому робіть ставки на net ROAS
Повернення коштів рідко доходять до рекламних платформ, тож ROAS і далі зараховує покупки, за які Apple і Google уже повернули гроші. Пояснюємо, де Firebase, Google Ads і AdAttributionKit втрачають повернення, скільки це коштує і як побудувати net ROAS для застосунку.

Головне
- Автоматично збирана подія Firebase app_store_refund спрацьовує лише тоді, коли Google Play повертає кошти за вбудовану покупку. Google позначає її як лише для Android, тож повернення в App Store ніколи не зменшують дохід in_app_purchase, який записав Firebase.
- Google Ads автоматично відстежує вбудовані покупки Google Play в Android-застосунках і передає суму покупки як цінність конверсії. Для підписок він фіксує лише першу покупку і суму першого платежу.
- Коригування конверсій у Google Ads можуть змінити цінність конверсії або відкликати її до нуля. За словами Google, онлайн-конверсії можна коригувати, лише якщо разом із ними було передано ідентифікатор транзакції.
- В Apple AdAttributionKit є три вікна конверсії після першого запуску: дні від 0 до 2, від 3 до 7 і від 8 до 35. Детальна цінність конверсії є лише в першому postback.
- Net ROAS дорівнює доходу, атрибутованому рекламі, мінус повернення за цими покупками, поділеному на рекламні витрати. Кампанія з вищим валовим ROAS може опинитися нижче за net ROAS, якщо її покупці частіше просять повернення.
- Сигнали про повернення надходять на сервер розробника, а не в рекламну мережу. Apple надсилає REFUND App Store Server Notification, а Google Play повідомляє про анулювання через сповіщення для розробників у реальному часі та Voided Purchases API, який охоплює останні 30 днів.
- Лише два сценарії повернення дають розробнику змогу подати докази: Apple CONSUMPTION_REQUEST з відповіддю протягом 12 годин і перевірка чарджбеку в Google Play через orders.reviewrefund з відповіддю протягом 24 годин.
Рекламні панелі записують вбудовану покупку в момент, коли вона відбувається, і більшість із них ніколи її не скасовує. Коли Apple або Google згодом повертає кошти за цю покупку, гроші зникають із вашої виплати, але залишаються в доході кампанії, тож ROAS і далі зараховує її рекламі, яка її продала. Net ROAS, тобто дохід після повернень, поділений на рекламні витрати, показує, які кампанії справді окупилися. Його доведеться будувати самостійно, бо сигнал про повернення потрапляє на ваш сервер, а не в рекламну мережу.
Чому ROAS завищує дохід, якщо не враховувати повернення
ROAS ділить атрибутований дохід на рекламні витрати. Дохід зазвичай записується один раз, у момент покупки: SDK на пристрої або імпорт конверсій із магазину. Повернення коштів відбувається пізніше і поза пристроєм, між клієнтом та Apple чи Google. Якщо ніщо не повертає цю подію до тієї самої кампанії, покупка й далі рахується.
Це було б нешкідливо, якби повернення були рідкісними й розподілялися рівномірно. Зазвичай це не так. Креатив, що обіцяє більше, ніж дає застосунок, пропозиція, показана не тій аудиторії, або джерело трафіку, повне викрадених карток, стягують повернення до конкретних кампаній. Валовий ROAS приховує саме цю різницю.
Що таке net ROAS?
Net ROAS це те саме співвідношення, але з вирахуваними з верхнього рядка поверненнями: дохід, атрибутований кампанії, мінус повернення за тими самими покупками, поділений на вартість кампанії. Деякі команди також віднімають комісію магазину і податки. Що б ви не віднімали ще, саме повернення змінюють те, яка кампанія перемагає.
Де губляться повернення між магазином і вашою рекламною панеллю
Firebase записує повернення Google Play, але не App Store
У переліку автоматично збираних подій Google є in_app_purchase. Вона спрацьовує, коли користувач завершує вбудовану покупку, зокрема першу підписку, оброблену Apple App Store або Google Play. Її відповідник для повернень, app_store_refund, спрацьовує, коли Google Play повертає кошти за вбудовану покупку, і Google позначає її як лише для Android. Ні app_store_refund, ні автоматичні події підписок не експортуються в BigQuery.
На тій самій сторінці сказано, що Analytics не вимірює автоматично дохід від покупок платних застосунків і повернення, а звітний дохід може відрізнятися від даних Google Play Developer Console. На iOS ніщо автоматично не віднімає повернення App Store від покупки, яку Firebase уже записав.
Google Ads записує суму покупки як цінність конверсії
Для Android-застосунків із вбудованими платежами Google Ads може відстежувати вбудовані покупки людей, які натиснули вашу рекламу, без жодного коду в застосунку. За словами Google, сума покупки автоматично передається як цінність конверсії. Для підписок конверсією вважається лише перша покупка, і записується лише сума першого платежу. Довідкова стаття не згадує повернень.
Інструмент виправлення в Google Ads таки є. Коригування конверсій дають змогу змінити цінність конверсії, не змінюючи їх кількості, або відкликати конверсію, що встановлює її цінність на 0.00 і впливає на стратегії ставок CPA і ROAS. За словами Google, онлайн-конверсії можна коригувати, лише якщо ви використовували ідентифікатор транзакції, а відкликану конверсію вже не можна коригувати повторно. Та сторінка не згадує конверсій у застосунках, тож перш ніж на це спиратися, переконайтеся, що ваше налаштування конверсій підтримує коригування.
Рекламні postback від Apple закриваються раніше, ніж надходить багато повернень
В AdAttributionKit є три вікна конверсії, які починаються з першого запуску застосунку: дні від 0 до 2, дні від 3 до 7 і дні від 8 до 35. Застосунок може оновлювати цінність конверсії, доки вікно не закінчиться. Потім Apple надсилає postback із випадковою затримкою: від 24 до 48 годин для першого і від 24 до 144 годин для другого й третього. Якщо застосунок рано зафіксує значення, система ігнорує подальші оновлення в цьому вікні.
Детальна цінність конверсії є лише в першому postback. Наступні postback у найкращому разі містять грубе значення. Покупка першого дня, за яку Apple повернула кошти на десятий день, уже потрапила в postback, який більше не можна змінити.
| Інструмент вимірювання | Що він записує в момент покупки | Що відбувається після повернення коштів |
|---|---|---|
| Firebase in_app_purchase, Android та iOS | ID продукту, ціна, цінність, валюта, кількість | Android: спрацьовує app_store_refund. iOS: автоматичної події повернення немає |
| Google Ads, конверсії Google Play, Android | Сума покупки як цінність конверсії, для підписок лише перший платіж | Не описано. Коригування можуть змінити або відкликати онлайн-конверсії, передані з ідентифікатором транзакції |
| Postback AdAttributionKit, iOS | Цінність конверсії для кожного вікна, детальна лише в першому | Фіксується, щойно підготовлено postback цього вікна |
| Ваш власний сервер | Кожна транзакція, прив'язана до вашого ID користувача | Сповіщення Apple REFUND, сигнали Google Play про анульовані покупки |
Коли надходять повернення в застосунках і хто їх ухвалює
Повернення не приходять за одним графіком. Деякі надходять за кілька годин після покупки, а деякі через місяці. Саме тому ROAS когорти продовжує знижуватися вже після того, як звіт кампанії здавався остаточним.
| Шлях повернення | Строки за словами самого магазину | Хто вирішує | Сигнал на вашому сервері |
|---|---|---|---|
| Запит на повернення в Google Play | Протягом 48 годин клієнт звертається до Google. Після цього Google спрямовує його до розробника | Google, потім ви | Анульована покупка через RTDN і Voided Purchases API |
| Повернення від розробника в Google Play | Коли ви його оформите | Ви | Анульована покупка, якщо ви відкликаєте доступ |
| Скарга на неавторизоване списання в Google Play | Протягом 120 днів після транзакції | Анульована покупка | |
| Повернення Apple | Запит на reportaproblem.apple.com, оновлення за 24 до 48 годин | Apple | Сповіщення REFUND із revocationReason |
| Запит Apple про споживання | Ви відповідаєте протягом 12 годин | Apple на основі ваших даних | CONSUMPTION_REQUEST |
| Перевірка чарджбеку в Google Play | Ви відповідаєте протягом 24 годин через orders.reviewrefund | Банк, після ваших доказів | Анульована покупка, якщо чарджбек залишається в силі |
Скільки коштує ROAS, що не бачить повернень
Візьмімо дві кампанії з однаковим бюджетом. Цифри нижче є ілюстрацією, а не бенчмарком.
| Рядок | Кампанія A | Кампанія B |
|---|---|---|
| Рекламні витрати | $10,000 | $10,000 |
| Атрибутований дохід від покупок | $14,000 | $12,500 |
| Валовий ROAS | 1.40 | 1.25 |
| Частка цього доходу, за яку повернули кошти | 18% | 4% |
| Дохід після повернень | $11,480 | $12,000 |
| Net ROAS | 1.15 | 1.20 |
Валовий ROAS радить перекинути гроші в A. Net ROAS каже, що B зберегла більше з кожного долара. Якщо ваші ставки працюють на валовій цінності, алгоритм і далі шукатиме більше покупців, схожих на покупців A, бо ніщо не повідомляє йому, що ті попросили гроші назад.
Рекламні витрати лише перший рахунок. Клієнт, якому повернули кошти, залишає по собі ще й таке:
- Виплати. Партнерські угоди, угоди з авторами й інфлюенсерами з оплатою за покупку зазвичай платять із продажу, а не з продажу мінус повернення, якщо в договорі не сказано інше.
- Обчислення, виклики API і сховище. Користувач, якому повернули кошти, навантажував ваші сервери, платні сторонні API і сховище, доки доступ не відкликали. Ці рахунки ніхто не повертає.
- Витрати на чарджбеки. З 3 серпня 2026 року Google перекладає на розробника ціну покупки, за якою виник чарджбек, разом із банківськими комісіями. Тому джерело Android-трафіку з великою кількістю спорів коштує більше, ніж дохід, який воно втрачає.
- Гірше таргетування. Ставки на основі цінності, навчені на покупках із поверненням, шукають більше людей, схожих на тих, кому повернули гроші.

Високий рівень повернень в одній кампанії це шахрайство чи порушена обіцянка?
Часто це обіцянка. Поле Apple revocationReason показує, з якого боку виникло повернення. 0 означає, що App Store повернув кошти за транзакцію з інших причин, наприклад через випадкову покупку. 1 означає, що повернення сталося через реальну або уявну проблему у вашому застосунку. Скупчення одиниць з однієї кампанії зазвичай вказує на рекламний креатив або онбординг, до якого він веде. Скупчення скарг на неавторизовані списання в Google Play вказує на джерело трафіку.
Як побудувати net ROAS для застосунку
Щоб почати, новий інструмент не потрібен. Потрібно кілька об'єднань даних, яких ваші дані, імовірно, ще не роблять.
- Прив'язуйте кампанію до користувача. Зберігайте результат атрибуції поруч із вашим власним ID користувача під час встановлення, щоб будь-яку подальшу транзакцію можна було простежити до кампанії.
- Прив'язуйте транзакцію до користувача. Задавайте appAccountToken для покупок на iOS і обфускований ID акаунта для покупок у Google Play, щоб кожна подія магазину зіставлялася з вашим користувачем без здогадок.
- Слухайте повернення на сервері. Обробляйте сповіщення Apple REFUND з App Store Server Notifications V2 і сповіщення Google Play про анульовані покупки. Регулярно опитуйте Voided Purchases API як запасний варіант, бо він повертає анулювання лише за останні 30 днів.
- Показуйте валові й чисті показники поруч, за когортами покупок. Зараховуйте кожне повернення до кампанії та дати покупки, які його принесли, а не до дня, коли повернення з'явилося.
- Надсилайте коригування туди, де платформа їх приймає. Якщо ваші конверсії Google Ads містять ідентифікатор транзакції, змінюйте цінність або відкликайте ті, за якими повернули кошти. Де платформа не приймає коригувань, перерозподіляйте її бюджет за чистими цифрами.
- Вчасно відповідайте на два запити доказів. RefundHalt відповідає на Apple CONSUMPTION_REQUEST у межах 12-годинного вікна і на перевірку чарджбеку в Google Play протягом 24 годин, тож у поверненнях, які можна оскаржити, звучить і ваша позиція.
Зараховувати повернення на дату покупки чи на дату повернення?
Для рішень щодо кампаній на дату покупки. Повернення це факт про покупку, а покупка належить кампанії. Фінансовий відділ відображає його на дату повернення, тому ваш звіт ROAS і ваша виплата не збігатимуться в жоден конкретний день. Тримайте обидва подання і підписуйте їх.
Коли net ROAS когорти стає остаточним?
Він стабілізується поетапно. Вікно самостійного повернення в Google закривається через 48 годин, Apple радить клієнтам чекати оновлення щодо запиту на повернення за 24 до 48 годин, а скарга на неавторизоване списання в Google Play може надійти протягом 120 днів після транзакції. Вважайте ранні цифри попередніми і пізніше перевіряйте ту саму когорту ще раз.
Поширені запитання
- Чи віднімає Firebase повернення від доходу з вбудованих покупок?
- Лише для Google Play. Автоматично збирана подія Firebase app_store_refund спрацьовує, коли Google Play повертає кошти за вбудовану покупку, і Google позначає її як лише для Android. Автоматичного відповідника для повернень App Store немає, а Google зазначає, що Analytics не вимірює автоматично дохід від покупок платних застосунків і повернення.
- Чи прибирає Google Ads вбудовані покупки з поверненням коштів із конверсій?
- Власна стаття Google про конверсії Google Play цього не стверджує. У ній сказано, що сума покупки передається як цінність конверсії, а повернення не згадуються. Коригування конверсій у Google Ads можуть змінити або відкликати конверсію, і за словами Google, онлайн-конверсії можна коригувати, лише якщо разом із ними було передано ідентифікатор транзакції.
- Чи можуть postback AdAttributionKit відобразити повернення?
- Лише якщо повернення відбулося до того, як підготовлено postback цього вікна конверсії. Вікна охоплюють дні від 0 до 2, від 3 до 7 і від 8 до 35 після першого запуску. Щойно вікно закінчується або значення зафіксовано, Apple ігнорує подальші оновлення в цьому вікні.
- Як розрахувати net ROAS для застосунку?
- Візьміть дохід, атрибутований кампанії, відніміть повернення за тими самими покупками і поділіть на рекламні витрати кампанії. Зараховуйте кожне повернення до когорти покупок, яка його принесла, використовуючи сповіщення Apple REFUND і сигнали Google Play про анульовані покупки як запис про повернення.
- Чи можу я оскаржити повернення, які знижують мій ROAS?
- Лише два види. Apple CONSUMPTION_REQUEST дає змогу надіслати дані про споживання протягом 12 годин, а перевірка чарджбеку в Google Play через orders.reviewrefund дає вам 24 години. 48-годинні повернення в Google Play, повернення через підтримку та анульовані покупки вирішуються без вас, а банківські чарджбеки остаточні.
Джерела та додаткове читання
- Firebase Help: [GA4] Automatically collected events
- Google Ads Help: Measure app conversions with Google Play
- Google Ads Help: About conversion adjustments
- Apple Developer Documentation: Receiving postbacks in multiple conversion windows
- Apple Developer Documentation: notificationType
- Apple Developer Documentation: revocationReason
- Google Play Developer API: Voided Purchases API
- Google Play Help: Apps, games, and in-app purchases refund policies
- Google Play Help: Learn about Google Play refund policies
- Apple Support: Request a refund for apps or content that you bought from Apple
RefundHalt
Автопілот повернень для App Store і Google Play
Читайте далі
Order ID з App Store у чеку клієнта показує, що він купив і чи Apple вже повернув гроші
Ендпоінт Look Up Order ID від Apple перетворює order ID з чека App Store на підписані транзакції, з датою і причиною повернення. Як використовувати його для листів про повернення, чого він не вміє і чим від нього відрізняється order ID у Google Play.
Повернення коштів за веб-оплату в iOS тепер надходять до вас, а не до Apple. Як і банківські спори
Застосунки для iPhone у США тепер можуть вести покупців на веб-оплату. Apple каже, що не може допомогти з поверненнями за такі продажі, тож служба повернень, чарджбеки та комісії $15 за спір переходять до вас. Пояснюємо, що змінюється, скільки це коштує і як скоротити кількість спорів.