Wszystkie artykuły
Poradnik8 min czytania

ROAS Twojej aplikacji wciąż liczy zakupy, za które Apple i Google zwróciły pieniądze. Licytuj więc na podstawie ROAS netto

Zwroty rzadko wracają do platform reklamowych, więc ROAS nadal zalicza zakupy, za które Apple i Google już oddały pieniądze. Wyjaśniamy, gdzie Firebase, Google Ads i AdAttributionKit gubią zwroty, ile to kosztuje i jak zbudować ROAS netto dla aplikacji.

Biurko analityka marketingowego z wykresami kampanii reklamowych na laptopie, iPhone'em, telefonem z Androidem i wydrukowanymi, przekreślonymi wierszami, jako obraz ROAS netto po zwrotach w aplikacjach

Najważniejsze wnioski

  • Automatycznie zbierane zdarzenie Firebase app_store_refund jest wywoływane tylko wtedy, gdy Google Play zwraca pieniądze za zakup w aplikacji. Google oznacza je jako dostępne tylko na Androidzie, więc zwroty w App Store nigdy nie zmniejszają przychodu in_app_purchase zarejestrowanego przez Firebase.
  • Google Ads automatycznie śledzi zakupy w aplikacji w Google Play dla aplikacji na Androida i raportuje wartość zakupu jako wartość konwersji. W przypadku subskrypcji rejestruje tylko pierwszy zakup i wartość pierwszej płatności.
  • Korekty konwersji w Google Ads pozwalają zmienić wartość konwersji albo wycofać ją do zera. Google podaje, że konwersje online można korygować tylko wtedy, gdy wysłano z nimi identyfikator transakcji.
  • AdAttributionKit od Apple ma po pierwszym uruchomieniu trzy okna konwersji: dni od 0 do 2, od 3 do 7 i od 8 do 35. Szczegółowa wartość konwersji pojawia się tylko w pierwszym postbacku.
  • ROAS netto to przychód przypisany reklamom minus zwroty za te zakupy, podzielony przez wydatki na reklamy. Kampania z wyższym ROAS brutto może wypaść gorzej w ROAS netto, jeśli jej kupujący częściej żądają zwrotu.
  • Sygnały o zwrotach trafiają na serwer dewelopera, nie do sieci reklamowej. Apple wysyła powiadomienie REFUND przez App Store Server Notifications, a Google Play zgłasza unieważnione zakupy przez powiadomienia dla deweloperów w czasie rzeczywistym i Voided Purchases API, które sięga 30 dni wstecz.
  • Tylko dwie ścieżki zwrotu pozwalają deweloperowi przedstawić dowody: CONSUMPTION_REQUEST od Apple, na który odpowiada się w ciągu 12 godzin, oraz weryfikacja obciążenia zwrotnego w Google Play przez orders.reviewrefund, na którą odpowiada się w ciągu 24 godzin.

Panele reklamowe księgują zakup w aplikacji w chwili, gdy do niego dochodzi, a większość z nich nigdy go nie cofa. Gdy Apple lub Google później zwraca pieniądze za ten zakup, kwota znika z Twojej wypłaty, ale zostaje w przychodzie kampanii. ROAS nadal przypisuje więc zakup reklamie, która go przyniosła. ROAS netto, czyli przychód po zwrotach podzielony przez wydatki na reklamy, to liczba, która pokazuje, które kampanie naprawdę się opłaciły. Musisz zbudować go sam, bo sygnał o zwrocie trafia na Twój serwer, a nie do sieci reklamowej.

Dlaczego ROAS zawyża przychód, gdy pomija się zwroty

ROAS dzieli przypisany przychód przez wydatki na reklamy. Strona przychodu jest zwykle zapisywana raz, w momencie zakupu, przez SDK na urządzeniu albo import konwersji ze sklepu. Zwrot to późniejsze zdarzenie, które dzieje się poza urządzeniem, między klientem a Apple lub Google. Dopóki nic nie przeniesie go z powrotem do tej samej kampanii, zakup nadal się liczy.

Nie byłoby w tym nic złego, gdyby zwroty były rzadkie i rozłożone równomiernie. Zwykle nie są. Kreacja, która obiecuje więcej, niż aplikacja daje, oferta pokazana złej grupie odbiorców albo źródło ruchu pełne kradzionych kart ściągają zwroty do konkretnych kampanii. ROAS brutto ukrywa właśnie tę różnicę.

Czym jest ROAS netto?

ROAS netto to ten sam wskaźnik, ale ze zwrotami odjętymi od górnej linii: przychód przypisany kampanii minus zwroty za te same zakupy, podzielony przez koszt kampanii. Niektóre zespoły odejmują też prowizję sklepu i podatek. Cokolwiek jeszcze odejmiesz, to zwroty decydują o tym, która kampania wygrywa.

Gdzie zwroty giną między sklepem a panelem reklamowym

Firebase rejestruje zwroty z Google Play, a nie z App Store

Lista automatycznie zbieranych zdarzeń Google obejmuje in_app_purchase. Jest ono wywoływane, gdy użytkownik dokończy zakup w aplikacji, w tym pierwszą subskrypcję, obsłużony przez Apple App Store lub Google Play. Jego odpowiednik dla zwrotów, app_store_refund, jest wywoływany, gdy Google Play zwraca pieniądze za zakup w aplikacji, a Google oznacza je jako dostępne tylko na Androidzie. Ani app_store_refund, ani automatyczne zdarzenia subskrypcji nie są eksportowane do BigQuery.

Na tej samej stronie czytamy, że Analytics nie mierzy automatycznie przychodów i zwrotów z zakupów płatnych aplikacji oraz że raportowany przychód może się różnić od danych w Google Play Developer Console. Na iOS nic automatycznie nie odejmuje zwrotu z App Store od zakupu, który Firebase już zarejestrował.

Google Ads księguje wartość zakupu jako wartość konwersji

W aplikacjach na Androida korzystających z płatności w aplikacji Google Ads może śledzić zakupy w aplikacji dokonane przez osoby, które kliknęły Twoją reklamę, bez żadnego kodu w aplikacji. Google podaje, że wartość zakupu jest automatycznie raportowana jako wartość konwersji. W przypadku subskrypcji jako konwersja rejestrowany jest tylko pierwszy zakup i tylko wartość pierwszej płatności. Artykuł pomocy nie wspomina o zwrotach.

Google Ads ma jednak narzędzie do korekt. Korekty konwersji pozwalają zmienić wartość konwersji bez zmiany ich liczby albo ją wycofać. Wycofanie ustawia wartość na 0.00 i wpływa na strategie ustalania stawek oparte na CPA i ROAS. Google podaje, że konwersje online można korygować tylko wtedy, gdy użyto identyfikatora transakcji, a wycofanej konwersji nie można ponownie skorygować. Ta strona nie wspomina o konwersjach z aplikacji, więc zanim na nich oprzesz swoje rozwiązanie, sprawdź, czy Twoja konfiguracja konwersji obsługuje korekty.

Postbacki reklamowe Apple zamykają się, zanim dotrze wiele zwrotów

AdAttributionKit ma trzy okna konwersji, które zaczynają się w chwili pierwszego uruchomienia aplikacji przez użytkownika: dni od 0 do 2, od 3 do 7 i od 8 do 35. Aplikacja może aktualizować wartość konwersji do końca okna. Następnie Apple wysyła postback po losowym opóźnieniu: od 24 do 48 godzin w przypadku pierwszego i od 24 do 144 godzin w przypadku drugiego i trzeciego. Jeśli aplikacja wcześnie zablokuje wartość, system ignoruje dalsze aktualizacje w tym oknie.

Szczegółowa wartość konwersji pojawia się tylko w pierwszym postbacku. Późniejsze postbacki zawierają co najwyżej wartość przybliżoną. Zakup z dnia 1, za który Apple zwraca pieniądze w dniu 10, został zgłoszony w postbacku, którego nie da się już zmienić.

Źródło pomiaruCo rejestruje przy zakupieCo się dzieje, gdy za zakup zostaną zwrócone pieniądze
Firebase in_app_purchase, Android i iOSIdentyfikator produktu, cena, wartość, waluta, ilośćAndroid: wywoływane jest app_store_refund. iOS: brak automatycznego zdarzenia zwrotu
Google Ads, konwersje Google Play, AndroidWartość zakupu jako wartość konwersji, przy subskrypcjach tylko pierwsza płatnośćNie opisano. Korekty mogą zmienić lub wycofać konwersje online wysłane z identyfikatorem transakcji
Postbacki AdAttributionKit, iOSJedna wartość konwersji na okno, szczegółowa tylko w pierwszymStała, gdy postback danego okna zostanie przygotowany
Twój własny serwerKażda transakcja, powiązana z Twoim identyfikatorem użytkownikaPowiadomienie REFUND od Apple, sygnały Google Play o unieważnionych zakupach

Kiedy przychodzą zwroty w aplikacjach i kto o nich decyduje

Zwroty nie trafiają według jednego harmonogramu. Niektóre przychodzą kilka godzin po zakupie, inne po miesiącach. Dlatego ROAS kohorty dalej spada, choć raport z kampanii wyglądał już na ostateczny.

Ścieżka zwrotuTerminy według samego sklepuKto decydujeSygnał na Twoim serwerze
Prośba o zwrot w Google PlayW ciągu 48 godzin klient prosi Google. Potem Google kieruje go do deweloperaGoogle, potem TyUnieważniony zakup przez RTDN i Voided Purchases API
Zwrot przez dewelopera w Google PlayKiedy go zleciszTyUnieważniony zakup, jeśli odbierzesz dostęp
Zgłoszenie nieautoryzowanej płatności w Google PlayW ciągu 120 dni od transakcjiGoogleUnieważniony zakup
Zwrot od AppleZgłaszany na reportaproblem.apple.com, odpowiedź w ciągu od 24 do 48 godzinApplePowiadomienie REFUND z revocationReason
Prośba Apple o dane o wykorzystaniuOdpowiadasz w ciągu 12 godzinApple, na podstawie Twoich danychCONSUMPTION_REQUEST
Weryfikacja obciążenia zwrotnego w Google PlayOdpowiadasz w ciągu 24 godzin przez orders.reviewrefundBank, po zapoznaniu się z Twoimi dowodamiUnieważniony zakup, jeśli obciążenie zwrotne zostanie utrzymane

Ile kosztuje ROAS, który nie widzi zwrotów

Weźmy dwie kampanie z tym samym budżetem. Poniższe liczby są ilustracją, a nie punktem odniesienia.

PozycjaKampania AKampania B
Wydatki na reklamy$10,000$10,000
Przypisany przychód z zakupów$14,000$12,500
ROAS brutto1.401.25
Udział zwrotów w tym przychodzie18%4%
Przychód po zwrotach$11,480$12,000
ROAS netto1.151.20

ROAS brutto podpowiada, żeby przesunąć pieniądze do A. ROAS netto pokazuje, że B zatrzymała więcej z każdego dolara. Jeśli Twoje stawki opierają się na wartości brutto, algorytm dalej szuka kupujących takich jak w A, bo nic mu nigdy nie mówi, że zażądali zwrotu pieniędzy.

Wydatki na reklamy to tylko pierwszy rachunek. Klient, który dostał zwrot, zostawia po sobie także:

  • Wypłaty. Umowy z afiliantami, twórcami i influencerami rozliczane za zakup zwykle płacą od sprzedaży, a nie od sprzedaży pomniejszonej o zwroty, chyba że umowa stanowi inaczej.
  • Moc obliczeniową, wywołania API i przestrzeń dyskową. Użytkownik, który dostał zwrot, korzystał z Twoich serwerów, płatnych API zewnętrznych dostawców i przestrzeni dyskowej, dopóki nie odebrano mu dostępu. Te faktury nie są zwracane.
  • Koszty obciążeń zwrotnych. Od 3 sierpnia 2026 Google przerzuca na dewelopera cenę zakupu objętego obciążeniem zwrotnym wraz z opłatami bankowymi. Źródło ruchu na Androidzie z dużą liczbą sporów kosztuje więc więcej niż przychód, który traci.
  • Gorsze targetowanie. Ustalanie stawek oparte na wartości, wytrenowane na zakupach ze zwrotem, szuka kolejnych osób podobnych do tych, którym oddano pieniądze.
Dwa stosy monet na biurku, jeden niższy po zabraniu części monet, obok telefonu i kalkulatora, pokazujące, jak zwroty zmniejszają przychód stojący za ROAS netto

Czy wysoki odsetek zwrotów w jednej kampanii to oszustwo, czy niespełniona obietnica?

Często chodzi o obietnicę. revocationReason od Apple mówi, po której stronie leży przyczyna zwrotu. 0 oznacza, że App Store zwrócił pieniądze za transakcję z innych powodów, na przykład za przypadkowy zakup. 1 oznacza zwrot z powodu rzeczywistego lub domniemanego problemu w Twojej aplikacji. Skupisko jedynek z jednej kampanii zwykle wskazuje na kreację reklamową albo onboarding, do którego prowadzi. Skupisko zgłoszeń nieautoryzowanych płatności w Google Play wskazuje na źródło ruchu.

Jak zbudować ROAS netto dla aplikacji

Na początek nie potrzebujesz nowego narzędzia. Potrzebujesz kilku powiązań, których Twoje dane prawdopodobnie jeszcze nie tworzą.

  • Przypisz kampanię do użytkownika. Zapisz wynik atrybucji przy instalacji obok własnego identyfikatora użytkownika, aby każdą późniejszą transakcję dało się powiązać z kampanią.
  • Przypisz transakcję do użytkownika. Ustaw appAccountToken przy zakupach na iOS i zaciemniony identyfikator konta przy zakupach w Google Play, aby każde zdarzenie ze sklepu bez zgadywania trafiało do Twojego użytkownika.
  • Odbieraj zwroty na serwerze. Obsługuj powiadomienie REFUND od Apple z App Store Server Notifications V2 i powiadomienia Google Play o unieważnionych zakupach. Dla bezpieczeństwa odpytuj też Voided Purchases API, bo zwraca ono tylko unieważnienia z ostatnich 30 dni.
  • Raportuj brutto i netto obok siebie, według kohort zakupów. Przypisuj każdy zwrot do kampanii i daty zakupu, z której pochodzi, a nie do dnia, w którym zwrot się pojawił.
  • Wysyłaj korekty tam, gdzie platforma je przyjmuje. Jeśli Twoje konwersje w Google Ads mają identyfikator transakcji, skoryguj lub wycofaj te ze zwrotem. Tam, gdzie platforma nie przyjmuje korekt, przesuwaj jej budżet na podstawie wyników netto.
  • Odpowiadaj na dwie prośby o dowody na czas. RefundHalt odpowiada na CONSUMPTION_REQUEST od Apple w 12-godzinnym oknie, a na weryfikację obciążenia zwrotnego w Google Play w ciągu 24 godzin. Dzięki temu w zwrotach, które da się zakwestionować, liczy się też Twoja wersja wydarzeń.

Czy zwroty liczyć według daty zakupu, czy daty zwrotu?

Przy decyzjach o kampaniach według daty zakupu. Zwrot jest faktem dotyczącym zakupu, a zakup należy do kampanii. Dział finansowy księguje go według daty zwrotu, dlatego raport ROAS i wypłata nie zgadzają się w żadnym konkretnym dniu. Prowadź oba widoki i wyraźnie je oznacz.

Kiedy ROAS netto kohorty jest ostateczny?

Stabilizuje się etapami. Samoobsługowe okno zwrotów Google zamyka się po 48 godzinach, Apple zapowiada klientom odpowiedź na prośbę o zwrot w ciągu od 24 do 48 godzin, a zgłoszenie nieautoryzowanej płatności w Google Play może nadejść w ciągu 120 dni od transakcji. Traktuj wczesne liczby jako wstępne i sprawdzaj tę samą kohortę ponownie później.

Często zadawane pytania

Czy Firebase odejmuje zwroty od przychodu z zakupów w aplikacji?
Tylko w przypadku Google Play. Automatycznie zbierane zdarzenie Firebase app_store_refund jest wywoływane, gdy Google Play zwraca pieniądze za zakup w aplikacji, a Google oznacza je jako dostępne tylko na Androidzie. Dla zwrotów w App Store nie ma automatycznego odpowiednika, a Google podaje, że Analytics nie mierzy automatycznie przychodów i zwrotów z zakupów płatnych aplikacji.
Czy Google Ads usuwa zakupy w aplikacji ze zwrotem z konwersji?
Artykuł Google o konwersjach Google Play tego nie twierdzi. Mówi, że wartość zakupu jest raportowana jako wartość konwersji, i nie wspomina o zwrotach. Korekty konwersji w Google Ads pozwalają zmienić lub wycofać konwersję, a Google podaje, że konwersje online można korygować tylko wtedy, gdy wysłano z nimi identyfikator transakcji.
Czy postbacki AdAttributionKit mogą uwzględnić zwrot?
Tylko jeśli zwrot nastąpi przed przygotowaniem postbacku dla danego okna konwersji. Okna obejmują dni od 0 do 2, od 3 do 7 i od 8 do 35 po pierwszym uruchomieniu. Gdy okno się skończy albo wartość zostanie zablokowana, Apple ignoruje dalsze aktualizacje w tym oknie.
Jak obliczyć ROAS netto dla aplikacji?
Weź przychód przypisany kampanii, odejmij zwroty za te same zakupy i podziel przez wydatki kampanii na reklamy. Przypisuj każdy zwrot do kohorty zakupów, z której pochodzi, a jako zapis zwrotów wykorzystaj powiadomienie REFUND od Apple i sygnały Google Play o unieważnionych zakupach.
Czy mogę zakwestionować zwroty, które obniżają mój ROAS?
Tylko dwa rodzaje. CONSUMPTION_REQUEST od Apple pozwala wysłać dane o wykorzystaniu w ciągu 12 godzin, a weryfikacja obciążenia zwrotnego w Google Play przez orders.reviewrefund daje Ci 24 godziny. O 48-godzinnych zwrotach w Google Play, zwrotach przez dział wsparcia i unieważnionych zakupach decyduje się bez Ciebie, a obciążenia zwrotne przez bank są ostateczne.

Źródła i materiały dodatkowe

RefundHalt

Autopilot zwrotów dla App Store i Google Play

Czytaj dalej

Kolejny wniosek o zwrot jest już w drodze.

Skonfiguruj RefundHalt w czasie potrzebnym na przeczytanie kolejnej wiadomości od pomocy technicznej o zwrocie, którego nie udało Ci się zakwestionować.