De ROAS van je app telt nog steeds aankopen mee die Apple en Google hebben terugbetaald. Bied daarom op netto ROAS
Terugbetalingen komen zelden terug bij advertentieplatforms, dus de ROAS blijft aankopen meetellen die Apple en Google al hebben terugbetaald. Hier lees je waar Firebase, Google Ads en AdAttributionKit terugbetalingen kwijtraken, wat dat kost en hoe je netto ROAS voor een app opbouwt.

Belangrijkste inzichten
- Het automatisch verzamelde Firebase-event app_store_refund wordt alleen geactiveerd wanneer Google Play een in-app-aankoop terugbetaalt. Google markeert het als alleen voor Android, dus terugbetalingen in de App Store verlagen nooit de in_app_purchase-omzet die Firebase heeft vastgelegd.
- Google Ads houdt Google Play-in-app-aankopen voor Android-apps automatisch bij en rapporteert de aankoopwaarde als conversiewaarde. Bij abonnementen registreert het alleen de eerste aankoop en de waarde van de eerste betaling.
- Met conversieaanpassingen in Google Ads kun je de waarde van een conversie corrigeren of tot nul intrekken. Volgens Google kunnen online conversies alleen worden aangepast als er een transactie-ID mee is verstuurd.
- Apple's AdAttributionKit heeft na de eerste keer openen drie conversievensters, dag 0 tot 2, 3 tot 7 en 8 tot 35. Een gedetailleerde conversiewaarde verschijnt alleen in de eerste postback.
- Netto ROAS is de aan advertenties toegeschreven omzet min de terugbetalingen op die aankopen, gedeeld door de advertentie-uitgaven. Een campagne met een hogere bruto ROAS kan lager uitkomen op netto ROAS als haar kopers vaker hun geld terugvragen.
- Terugbetalingssignalen komen binnen op de server van de ontwikkelaar, niet bij het advertentienetwerk. Apple stuurt een REFUND-melding via App Store Server Notifications, en Google Play meldt geannuleerde aankopen via realtime ontwikkelaarsmeldingen en de Voided Purchases API, die 30 dagen terugkijkt.
- Maar twee terugbetalingsprocessen laten een ontwikkelaar bewijs indienen: Apple's CONSUMPTION_REQUEST, te beantwoorden binnen 12 uur, en de chargebackbeoordeling van Google Play via orders.reviewrefund, te beantwoorden binnen 24 uur.
Advertentiedashboards boeken een in-app-aankoop op het moment dat die plaatsvindt, en de meeste draaien dat nooit terug. Betaalt Apple of Google die aankoop later terug, dan verdwijnt het geld uit je uitbetaling, maar blijft het in de omzet van de campagne staan. De ROAS blijft de aankoop dus toeschrijven aan de advertentie die hem opleverde. Netto ROAS, de omzet na terugbetalingen gedeeld door de advertentie-uitgaven, is het getal dat laat zien welke campagnes echt hebben opgeleverd. Je moet het zelf opbouwen, want het terugbetalingssignaal komt binnen op je server, niet bij het advertentienetwerk.
Waarom ROAS de omzet overschat als terugbetalingen ontbreken
ROAS deelt toegeschreven omzet door advertentie-uitgaven. De omzetkant wordt meestal één keer geschreven, bij de aankoop, door een SDK op het apparaat of een conversie-import uit de store. Een terugbetaling is een latere gebeurtenis buiten het apparaat, tussen de klant en Apple of Google. Zolang niets die terugkoppelt naar dezelfde campagne, blijft de aankoop meetellen.
Dat zou onschuldig zijn als terugbetalingen zeldzaam en gelijk verdeeld waren. Meestal zijn ze dat niet. Een creative die meer belooft dan de app waarmaakt, een aanbod voor de verkeerde doelgroep of een verkeersbron vol gestolen kaarten trekt terugbetalingen naar specifieke campagnes. Bruto ROAS verbergt precies dat verschil.
Wat is netto ROAS?
Netto ROAS is dezelfde verhouding, maar met de terugbetalingen uit de bovenste regel gehaald: de omzet die aan een campagne is toegeschreven, min de terugbetalingen op diezelfde aankopen, gedeeld door wat de campagne kostte. Sommige teams trekken ook de storecommissie en belasting af. Wat je verder ook aftrekt, terugbetalingen bepalen welke campagne wint.
Waar terugbetalingen verdwijnen tussen de store en je advertentiedashboard
Firebase registreert terugbetalingen van Google Play, niet van de App Store
Google's lijst met automatisch verzamelde events bevat in_app_purchase. Dat wordt geactiveerd wanneer een gebruiker een in-app-aankoop voltooit, inclusief een eerste abonnement, verwerkt door de Apple App Store of Google Play. De tegenhanger voor terugbetalingen, app_store_refund, wordt geactiveerd wanneer Google Play een in-app-aankoop terugbetaalt, en Google markeert het als alleen voor Android. Noch app_store_refund noch de automatische abonnementsevents worden naar BigQuery geëxporteerd.
Op dezelfde pagina staat dat Analytics omzet en terugbetalingen van aankopen van betaalde apps niet automatisch meet, en dat de gerapporteerde omzet kan afwijken van de Google Play Developer Console. Op iOS trekt niets automatisch een App Store-terugbetaling af van een aankoop die Firebase al heeft vastgelegd.
Google Ads boekt de aankoopwaarde als conversiewaarde
Voor Android-apps met in-app-facturering kan Google Ads in-app-aankopen bijhouden van mensen die op je advertentie hebben geklikt, zonder code in de app. Volgens Google wordt de aankoopwaarde automatisch gerapporteerd als conversiewaarde. Bij abonnementen telt alleen de eerste aankoop als conversie, en wordt alleen de waarde van de eerste betaling vastgelegd. Het helpartikel noemt geen terugbetalingen.
Google Ads heeft wel een correctiemiddel. Met conversieaanpassingen kun je de waarde van een conversie corrigeren zonder het aantal te wijzigen, of de conversie intrekken. Dan wordt de waarde 0.00, en dat werkt door in biedstrategieën op CPA en ROAS. Volgens Google kunnen online conversies alleen worden aangepast als je een transactie-ID hebt gebruikt, en een ingetrokken conversie kan niet opnieuw worden aangepast. App-conversies worden op die pagina niet genoemd. Controleer dus of je conversie-instelling aanpassingen ondersteunt voordat je erop bouwt.
De advertentie-postbacks van Apple sluiten voordat veel terugbetalingen binnenkomen
AdAttributionKit heeft drie conversievensters die beginnen wanneer de gebruiker de app voor het eerst opent: dag 0 tot 2, dag 3 tot 7 en dag 8 tot 35. De app kan haar conversiewaarde bijwerken tot een venster afloopt. Apple stuurt de postback daarna met een willekeurige vertraging, 24 tot 48 uur voor de eerste en 24 tot 144 uur voor de tweede en derde. Zet de app een waarde vroeg vast, dan negeert het systeem verdere updates in dat venster.
De gedetailleerde conversiewaarde verschijnt alleen in de eerste postback. Latere postbacks bevatten hooguit een grove waarde. Een aankoop op dag 1 die Apple op dag 10 terugbetaalt, is gemeld in een postback die niet meer kan veranderen.
| Meetbron | Wat er bij de aankoop wordt vastgelegd | Wat er gebeurt als de aankoop wordt terugbetaald |
|---|---|---|
| Firebase in_app_purchase, Android en iOS | Product-ID, prijs, waarde, valuta, aantal | Android: app_store_refund wordt geactiveerd. iOS: geen automatisch terugbetalingsevent |
| Google Ads, Google Play-conversies, Android | De aankoopwaarde als conversiewaarde, bij abonnementen alleen de eerste betaling | Niet beschreven. Aanpassingen kunnen online conversies met een transactie-ID corrigeren of intrekken |
| AdAttributionKit-postbacks, iOS | Eén conversiewaarde per venster, alleen in de eerste gedetailleerd | Vast zodra de postback van dat venster is voorbereid |
| Je eigen server | Elke transactie, gekoppeld aan je gebruikers-ID | REFUND-melding van Apple, signalen van Google Play over geannuleerde aankopen |
Wanneer app-terugbetalingen binnenkomen en wie erover beslist
Terugbetalingen volgen geen vast schema. Sommige komen binnen enkele uren na de aankoop, andere maanden later. Daarom blijft de ROAS van een cohort dalen nadat het campagnerapport al definitief leek.
| Terugbetalingsroute | Termijn volgens de store zelf | Wie beslist | Signaal op je server |
|---|---|---|---|
| Terugbetalingsverzoek bij Google Play | Binnen 48 uur vraagt de klant het aan Google. Daarna verwijst Google de klant naar de ontwikkelaar | Google, daarna jij | Geannuleerde aankoop via RTDN en de Voided Purchases API |
| Terugbetaling door de ontwikkelaar bij Google Play | Wanneer jij die uitvoert | Jij | Geannuleerde aankoop, als je de toegang intrekt |
| Melding van een niet-geautoriseerde afschrijving bij Google Play | Binnen 120 dagen na de transactie | Geannuleerde aankoop | |
| Terugbetaling door Apple | Aangevraagd op reportaproblem.apple.com, update binnen 24 tot 48 uur | Apple | REFUND-melding met revocationReason |
| Verbruiksverzoek van Apple | Je antwoordt binnen 12 uur | Apple, op basis van jouw gegevens | CONSUMPTION_REQUEST |
| Chargebackbeoordeling bij Google Play | Je antwoordt binnen 24 uur via orders.reviewrefund | De bank, na jouw bewijs | Geannuleerde aankoop als de chargeback blijft staan |
Wat een ROAS die terugbetalingen negeert in geld kost
Neem twee campagnes met hetzelfde budget. De cijfers hieronder zijn een illustratie, geen benchmark.
| Regel | Campagne A | Campagne B |
|---|---|---|
| Advertentie-uitgaven | $10,000 | $10,000 |
| Toegeschreven aankoopomzet | $14,000 | $12,500 |
| Bruto ROAS | 1.40 | 1.25 |
| Terugbetaald deel van die omzet | 18% | 4% |
| Omzet na terugbetalingen | $11,480 | $12,000 |
| Netto ROAS | 1.15 | 1.20 |
Bruto ROAS zegt dat je geld naar A moet verschuiven. Netto ROAS laat zien dat B van elke dollar meer heeft overgehouden. Draait je biedstrategie op brutowaarde, dan blijft het algoritme meer kopers zoals die van A zoeken, omdat niets het ooit vertelt dat ze hun geld hebben teruggevraagd.
Advertentie-uitgaven zijn alleen de eerste rekening. Een klant die zijn geld terugkreeg, laat ook dit achter:
- Uitbetalingen. Affiliate-, creator- en influencerdeals die per aankoop betalen, keren meestal uit op de verkoop, niet op de verkoop min terugbetalingen, tenzij het contract iets anders zegt.
- Rekenkracht, API-aanroepen en opslag. Een gebruiker die zijn geld terugkreeg, heeft je servers, je betaalde API's van derden en je opslag gebruikt tot de toegang werd ingetrokken. Die facturen worden niet terugbetaald.
- Chargebackkosten. Sinds 3 augustus 2026 legt Google de aankoopprijs bij een chargeback plus de bankkosten bij de ontwikkelaar. Een Android-verkeersbron met veel geschillen kost dus meer dan de omzet die ze verliest.
- Slechtere targeting. Waardegebaseerd bieden dat is getraind op terugbetaalde aankopen, gaat op zoek naar meer mensen zoals degenen die hun geld terugkregen.

Is een hoog terugbetalingspercentage bij één campagne fraude of een gebroken belofte?
Vaak is het de belofte. Apple's revocationReason vertelt aan welke kant een terugbetaling valt. Een 0 betekent dat de App Store de transactie om andere redenen heeft terugbetaald, bijvoorbeeld bij een per ongeluk gedane aankoop. Een 1 betekent dat er is terugbetaald vanwege een echt of vermeend probleem in je app. Een cluster van enen uit één campagne wijst meestal op de advertentiecreative of de onboarding waar die naartoe leidt. Een cluster van meldingen van niet-geautoriseerde afschrijvingen bij Google Play wijst op de verkeersbron.
Zo bouw je netto ROAS op voor een app
Je hebt geen nieuwe tool nodig om te beginnen. Je hebt een paar koppelingen nodig die je data waarschijnlijk nog niet maakt.
- Koppel de campagne aan de gebruiker. Sla het attributieresultaat bij de installatie op naast je eigen gebruikers-ID, zodat elke latere transactie naar een campagne te herleiden is.
- Koppel de transactie aan de gebruiker. Stel een appAccountToken in bij iOS-aankopen en een versleuteld account-ID bij Google Play-aankopen, zodat elk store-event zonder giswerk bij je gebruiker terechtkomt.
- Vang terugbetalingen op de server op. Verwerk de REFUND-melding van Apple uit App Store Server Notifications V2 en de meldingen van Google Play over geannuleerde aankopen. Vraag als vangnet de Voided Purchases API op, want die geeft alleen annuleringen van de afgelopen 30 dagen terug.
- Rapporteer bruto en netto naast elkaar, per aankoopcohort. Reken elke terugbetaling toe aan de campagne en de aankoopdatum waar ze vandaan komt, niet aan de dag waarop de terugbetaling opdook.
- Stuur correcties waar een platform ze accepteert. Hebben je Google Ads-conversies een transactie-ID, corrigeer of trek dan de terugbetaalde in. Waar een platform geen correcties accepteert, verdeel je het budget op basis van nettocijfers.
- Beantwoord de twee bewijsverzoeken op tijd. RefundHalt beantwoordt Apple's CONSUMPTION_REQUEST binnen het venster van 12 uur en de chargebackbeoordeling van Google Play binnen 24 uur. Zo krijgen de terugbetalingen die je kunt betwisten ook jouw kant van het verhaal.
Moeten terugbetalingen meetellen op de aankoopdatum of op de terugbetalingsdatum?
Voor campagnebeslissingen op de aankoopdatum. Een terugbetaling is een feit over een aankoop, en de aankoop hoort bij een campagne. De financiële administratie boekt hem op de terugbetalingsdatum. Daarom komen je ROAS-rapport en je uitbetaling op geen enkele dag overeen. Houd beide weergaven bij en label ze.
Wanneer is de netto ROAS van een cohort definitief?
Die stabiliseert in stappen. Het selfservicevenster voor terugbetalingen van Google sluit na 48 uur, Apple zegt klanten binnen 24 tot 48 uur een update over een terugbetalingsverzoek te verwachten, en een melding van een niet-geautoriseerde afschrijving bij Google Play kan binnen 120 dagen na de transactie komen. Behandel vroege cijfers als voorlopig en controleer hetzelfde cohort later opnieuw.
Veelgestelde vragen
- Trekt Firebase terugbetalingen af van de omzet uit in-app-aankopen?
- Alleen voor Google Play. Het automatisch verzamelde Firebase-event app_store_refund wordt geactiveerd wanneer Google Play een in-app-aankoop terugbetaalt, en Google markeert het als alleen voor Android. Er is geen automatische tegenhanger voor terugbetalingen in de App Store, en volgens Google meet Analytics omzet en terugbetalingen van aankopen van betaalde apps niet automatisch.
- Haalt Google Ads terugbetaalde in-app-aankopen uit de conversies?
- Google's eigen artikel over Google Play-conversies zegt dat niet. Er staat dat de aankoopwaarde wordt gerapporteerd als conversiewaarde, en terugbetalingen worden niet genoemd. Met conversieaanpassingen in Google Ads kun je een conversie corrigeren of intrekken, en volgens Google kunnen online conversies alleen worden aangepast als er een transactie-ID mee is verstuurd.
- Kunnen AdAttributionKit-postbacks een terugbetaling weergeven?
- Alleen als de terugbetaling plaatsvindt voordat de postback van dat conversievenster is voorbereid. De vensters lopen van dag 0 tot 2, 3 tot 7 en 8 tot 35 na de eerste keer openen. Zodra een venster afloopt of de waarde is vastgezet, negeert Apple verdere updates in dat venster.
- Hoe bereken ik netto ROAS voor een app?
- Neem de omzet die aan een campagne is toegeschreven, trek de terugbetalingen op diezelfde aankopen af en deel door de advertentie-uitgaven van de campagne. Reken elke terugbetaling toe aan het aankoopcohort waar ze vandaan komt, en gebruik de REFUND-melding van Apple en de signalen van Google Play over geannuleerde aankopen als terugbetalingsoverzicht.
- Kan ik de terugbetalingen betwisten die mijn ROAS verlagen?
- Maar twee soorten. Met Apple's CONSUMPTION_REQUEST kun je binnen 12 uur verbruiksgegevens sturen, en de chargebackbeoordeling van Google Play via orders.reviewrefund geeft je 24 uur. De terugbetalingen binnen 48 uur bij Google Play, terugbetalingen via support en geannuleerde aankopen worden zonder jou beslist, en chargebacks van de bank zijn definitief.
Bronnen en verder lezen
- 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
De terugbetalingsautopiloot voor de App Store en Google Play
Lees verder
De App Store order-ID op het bonnetje van een klant vertelt je wat die kocht en of Apple het al heeft terugbetaald
Apples endpoint Look Up Order ID zet de order-ID van een App Store bon om in ondertekende transacties, inclusief terugbetalingsdatum en reden. Zo gebruik je het bij terugbetalingsmails, dit kan het niet, en zo verhoudt de order-ID van Google Play zich ertoe.
Terugbetalingen bij iOS-webcheckout komen bij jou terecht in plaats van bij Apple, en de bankgeschillen ook
Amerikaanse iPhone-apps mogen kopers nu naar een webcheckout sturen. Apple zegt dat het bij terugbetalingen voor die aankopen niet kan helpen, dus de terugbetalingen, de chargebacks en de geschilkosten van $15 komen bij jou te liggen. Dit is wat er verandert, wat het kost en hoe je geschillen beperkt.