ROAS aplikasi Anda masih menghitung pembelian yang sudah di-refund Apple dan Google, jadi tetapkan bid berdasarkan ROAS bersih
Refund jarang dikirim balik ke platform iklan, sehingga ROAS terus mengkreditkan pembelian yang uangnya sudah dikembalikan Apple dan Google. Inilah titik di mana Firebase, Google Ads, dan AdAttributionKit kehilangan data refund, berapa biayanya, dan cara menyusun ROAS bersih untuk aplikasi.

Poin utama
- Event app_store_refund yang dikumpulkan otomatis oleh Firebase hanya terpicu saat Google Play me-refund pembelian dalam aplikasi. Google menandainya khusus Android, jadi refund App Store tidak pernah mengurangi pendapatan in_app_purchase yang tercatat di Firebase.
- Google Ads melacak pembelian dalam aplikasi Google Play secara otomatis untuk aplikasi Android dan melaporkan nilai pembelian sebagai nilai konversi. Untuk langganan, yang dicatat hanya pembelian pertama dan nilai pembayaran pertama.
- Penyesuaian konversi Google Ads dapat mengubah nilai konversi atau menariknya menjadi nol, dan Google menyatakan konversi online hanya bisa disesuaikan jika ID transaksi dikirim bersamanya.
- AdAttributionKit milik Apple punya tiga jendela konversi setelah peluncuran pertama, yaitu hari 0 sampai 2, 3 sampai 7, dan 8 sampai 35, dan nilai konversi terperinci hanya muncul di postback pertama.
- ROAS bersih adalah pendapatan yang diatribusikan ke iklan dikurangi refund atas pembelian tersebut, lalu dibagi biaya iklan. Kampanye dengan ROAS kotor lebih tinggi bisa berperingkat lebih rendah pada ROAS bersih jika pembelinya lebih sering meminta refund.
- Sinyal refund sampai ke server developer, bukan ke jaringan iklan. Apple mengirim App Store Server Notification REFUND, dan Google Play melaporkan pembatalan lewat notifikasi developer real-time serta Voided Purchases API, yang menjangkau 30 hari ke belakang.
- Hanya dua alur refund yang memungkinkan developer mengirim bukti: CONSUMPTION_REQUEST dari Apple, dijawab dalam 12 jam, dan tinjauan chargeback Google Play lewat orders.reviewrefund, dijawab dalam 24 jam.
Dasbor iklan mencatat pembelian dalam aplikasi saat itu juga, dan sebagian besar tidak pernah membatalkannya. Ketika Apple atau Google kemudian me-refund pembelian itu, uangnya hilang dari payout Anda tetapi tetap ada di pendapatan kampanye, sehingga ROAS terus mengkreditkan iklan yang menjualnya. ROAS bersih, yaitu pendapatan setelah refund dibagi biaya iklan, adalah angka yang menunjukkan kampanye mana yang benar-benar menghasilkan. Anda harus menyusunnya sendiri, karena sinyal refund masuk ke server Anda, bukan ke jaringan iklan.
Mengapa ROAS melebih-lebihkan pendapatan jika refund diabaikan
ROAS membagi pendapatan yang diatribusikan dengan biaya iklan. Sisi pendapatan biasanya ditulis sekali, saat pembelian, oleh SDK di perangkat atau impor konversi dari toko. Refund adalah peristiwa belakangan yang terjadi di luar perangkat, antara pelanggan dan Apple atau Google. Kecuali ada yang membawanya kembali ke kampanye yang sama, pembelian itu tetap dihitung.
Itu tidak masalah jika refund jarang terjadi dan tersebar merata. Biasanya tidak begitu. Materi iklan yang menjanjikan lebih dari yang diberikan aplikasi, penawaran yang ditampilkan ke audiens yang salah, atau sumber trafik yang penuh kartu curian akan menarik refund ke kampanye tertentu. ROAS kotor menyembunyikan persis perbedaan itu.
Apa itu ROAS bersih?
ROAS bersih adalah rasio yang sama dengan refund dikeluarkan dari baris pendapatan: pendapatan yang diatribusikan ke kampanye, dikurangi refund atas pembelian yang sama, dibagi biaya kampanye. Sebagian tim juga mengurangkan komisi toko dan pajak. Apa pun yang Anda kurangkan selain itu, refund adalah bagian yang mengubah kampanye mana yang unggul.
Di mana refund hilang antara toko dan dasbor iklan Anda
Firebase mencatat refund Google Play, bukan refund App Store
Daftar event yang dikumpulkan otomatis milik Google mencakup in_app_purchase, yang terpicu saat pengguna menyelesaikan pembelian dalam aplikasi, termasuk langganan awal, yang diproses oleh Apple App Store atau Google Play. Pasangan refund-nya, app_store_refund, terpicu saat pembelian dalam aplikasi di-refund oleh Google Play, dan Google menandainya khusus Android. Baik app_store_refund maupun event langganan otomatis tidak diekspor ke BigQuery.
Halaman yang sama menyebutkan bahwa Analytics tidak otomatis mengukur pendapatan dan refund pembelian aplikasi berbayar, dan pendapatan yang dilaporkan bisa berbeda dari Google Play Developer Console. Di iOS, tidak ada mekanisme otomatis yang mengurangkan refund App Store dari pembelian yang sudah dicatat Firebase.
Google Ads mencatat nilai pembelian sebagai nilai konversi
Untuk aplikasi Android yang memakai penagihan dalam aplikasi, Google Ads dapat melacak pembelian dalam aplikasi oleh orang yang mengklik iklan Anda, tanpa kode di aplikasi. Google menyatakan nilai pembelian otomatis dilaporkan sebagai nilai konversi. Untuk langganan, hanya pembelian pertama yang dicatat sebagai konversi, dan hanya nilai pembayaran pertama yang dicatat. Artikel bantuan itu tidak menyebut refund.
Google Ads memang punya alat koreksi. Penyesuaian konversi memungkinkan Anda mengubah nilai konversi tanpa mengubah jumlahnya, atau menariknya, yang menetapkan nilainya menjadi 0.00 dan memengaruhi strategi bid CPA maupun ROAS. Google menyatakan konversi online hanya bisa disesuaikan jika Anda memakai ID transaksi, dan konversi yang sudah ditarik tidak bisa disesuaikan lagi. Halaman itu tidak menyebut konversi aplikasi, jadi pastikan pengaturan konversi Anda mendukung penyesuaian sebelum mengandalkannya.
Postback iklan Apple ditutup sebelum banyak refund datang
AdAttributionKit punya tiga jendela konversi yang dimulai saat pengguna pertama kali membuka aplikasi: hari 0 sampai 2, hari 3 sampai 7, dan hari 8 sampai 35. Aplikasi dapat memperbarui nilai konversinya sampai jendela berakhir. Apple lalu mengirim postback setelah jeda acak, 24 sampai 48 jam untuk yang pertama dan 24 sampai 144 jam untuk yang kedua dan ketiga. Jika aplikasi mengunci nilai lebih awal, sistem mengabaikan pembaruan berikutnya di jendela itu.
Nilai konversi terperinci hanya muncul di postback pertama. Postback berikutnya paling banyak membawa nilai kasar. Pembelian pada hari 1 yang di-refund Apple pada hari 10 sudah dilaporkan dalam postback yang tidak bisa diubah lagi.
| Sumber pengukuran | Yang dicatat saat pembelian | Yang terjadi saat pembelian di-refund |
|---|---|---|
| Firebase in_app_purchase, Android dan iOS | ID produk, harga, nilai, mata uang, jumlah | Android: app_store_refund terpicu. iOS: tidak ada event refund otomatis |
| Google Ads, konversi Google Play, Android | Nilai pembelian sebagai nilai konversi, hanya pembayaran pertama untuk langganan | Tidak dijelaskan. Penyesuaian dapat mengubah atau menarik konversi online yang dikirim dengan ID transaksi |
| Postback AdAttributionKit, iOS | Satu nilai konversi per jendela, terperinci hanya di jendela pertama | Tetap setelah postback jendela itu disiapkan |
| Server Anda sendiri | Setiap transaksi, terhubung ke ID pengguna Anda | Notifikasi REFUND Apple, sinyal pembelian yang dibatalkan dari Google Play |
Kapan refund aplikasi datang, dan siapa yang memutuskannya
Refund tidak datang dengan satu jadwal. Ada yang datang beberapa jam setelah pembelian dan ada yang berbulan-bulan kemudian, itulah sebabnya ROAS sebuah kohort terus turun setelah laporan kampanye tampak final.
| Jalur refund | Waktu menurut toko itu sendiri | Siapa yang memutuskan | Sinyal di server Anda |
|---|---|---|---|
| Permintaan refund Google Play | Dalam 48 jam pelanggan meminta ke Google. Setelah itu, Google mengarahkan mereka ke developer | Google, lalu Anda | Pembelian dibatalkan via RTDN dan Voided Purchases API |
| Refund dari developer di Google Play | Kapan pun Anda menerbitkannya | Anda | Pembelian dibatalkan, jika Anda mencabut akses |
| Laporan tagihan tidak sah di Google Play | Dalam 120 hari sejak transaksi | Pembelian dibatalkan | |
| Refund Apple | Diajukan di reportaproblem.apple.com, kabar dalam 24 sampai 48 jam | Apple | Notifikasi REFUND dengan revocationReason |
| Permintaan konsumsi Apple | Anda menjawab dalam 12 jam | Apple, memakai data Anda | CONSUMPTION_REQUEST |
| Tinjauan chargeback Google Play | Anda menjawab dalam 24 jam lewat orders.reviewrefund | Bank, setelah menerima bukti Anda | Pembelian dibatalkan jika chargeback tetap berlaku |
Berapa kerugian ROAS yang buta refund dalam uang
Ambil dua kampanye dengan anggaran yang sama. Angka di bawah ini adalah ilustrasi, bukan tolok ukur.
| Baris | Kampanye A | Kampanye B |
|---|---|---|
| Biaya iklan | $10,000 | $10,000 |
| Pendapatan pembelian yang diatribusikan | $14,000 | $12,500 |
| ROAS kotor | 1.40 | 1.25 |
| Porsi pendapatan yang di-refund | 18% | 4% |
| Pendapatan setelah refund | $11,480 | $12,000 |
| ROAS bersih | 1.15 | 1.20 |
ROAS kotor menyuruh Anda memindahkan dana ke A. ROAS bersih mengatakan B mempertahankan lebih banyak dari setiap dolar. Jika bidding Anda berjalan pada nilai kotor, algoritme terus mencari lebih banyak pembeli seperti pembeli A, karena tidak ada yang pernah memberitahunya bahwa mereka meminta uangnya kembali.
Biaya iklan hanyalah tagihan pertama. Pelanggan yang di-refund juga meninggalkan beban berikut:
- Payout. Kesepakatan afiliasi, kreator, dan influencer yang dibayar per pembelian biasanya dibayar atas penjualan, bukan penjualan dikurangi refund, kecuali kontrak menyatakan lain.
- Komputasi, panggilan API, dan penyimpanan. Pengguna yang di-refund tetap memakai server Anda, API pihak ketiga berbayar Anda, dan penyimpanan Anda sampai aksesnya dicabut. Tagihan itu tidak ikut di-refund.
- Biaya chargeback. Sejak August 3 2026, Google membebankan harga pembelian yang di-chargeback ditambah biaya bank kepada developer, sehingga sumber trafik Android yang banyak sengketanya merugikan lebih dari pendapatan yang hilang.
- Penargetan yang memburuk. Bidding berbasis nilai yang dilatih dengan pembelian yang di-refund akan mencari lebih banyak orang yang mirip dengan mereka yang uangnya dikembalikan.

Apakah tingkat refund yang tinggi pada satu kampanye itu penipuan atau janji yang tidak ditepati?
Sering kali soal janji. revocationReason dari Apple memberi tahu di sisi mana sebuah refund jatuh. Nilai 0 berarti App Store me-refund transaksi karena alasan lain, misalnya pembelian tidak sengaja. Nilai 1 berarti refund terjadi karena masalah nyata atau yang dirasakan di dalam aplikasi Anda. Kumpulan nilai 1 dari satu kampanye biasanya menunjuk ke materi iklan atau onboarding yang dituju. Kumpulan laporan tagihan tidak sah di Google Play menunjuk ke sumber trafiknya.
Cara menyusun ROAS bersih untuk aplikasi
Anda tidak butuh alat baru untuk memulai. Anda butuh beberapa penggabungan data yang mungkin belum dilakukan data Anda.
- Simpan kampanye pada pengguna. Simpan hasil atribusi di samping ID pengguna Anda sendiri saat instalasi, agar setiap transaksi berikutnya bisa ditelusuri ke kampanye.
- Simpan transaksi pada pengguna. Tetapkan appAccountToken pada pembelian iOS dan ID akun yang disamarkan pada pembelian Google Play, agar setiap event toko terpetakan ke pengguna Anda tanpa menebak.
- Pantau refund di server. Tangani notifikasi REFUND Apple dari App Store Server Notifications V2 dan notifikasi pembelian yang dibatalkan dari Google Play. Lakukan polling ke Voided Purchases API sebagai cadangan, karena API itu hanya mengembalikan pembatalan dari 30 hari terakhir.
- Laporkan angka kotor dan bersih berdampingan, per kohort pembelian. Hitung setiap refund terhadap kampanye dan tanggal pembelian yang menghasilkannya, bukan hari refund itu muncul.
- Kirim koreksi ke platform yang menerimanya. Jika konversi Google Ads Anda membawa ID transaksi, ubah atau tarik konversi yang di-refund. Jika platform tidak bisa menerima koreksi, pindahkan anggarannya berdasarkan angka bersih.
- Jawab dua permintaan bukti tepat waktu. RefundHalt menjawab CONSUMPTION_REQUEST dari Apple dalam jendela 12 jam dan tinjauan chargeback Google Play dalam 24 jam, sehingga refund yang bisa Anda sanggah mendapat versi cerita dari pihak Anda.
Haruskah refund dihitung pada tanggal pembelian atau tanggal refund?
Untuk keputusan kampanye, tanggal pembelian. Refund adalah fakta tentang sebuah pembelian, dan pembelian itu milik sebuah kampanye. Bagian keuangan mencatatnya pada tanggal refund, itulah sebabnya laporan ROAS dan payout Anda tidak akan cocok pada hari mana pun. Simpan kedua tampilan dan beri label.
Kapan ROAS bersih sebuah kohort menjadi final?
Angkanya stabil secara bertahap. Jendela refund mandiri Google ditutup setelah 48 jam, Apple memberi tahu pelanggan untuk menunggu kabar atas permintaan refund dalam 24 sampai 48 jam, dan laporan tagihan tidak sah di Google Play bisa datang dalam 120 hari sejak transaksi. Anggap angka awal sebagai sementara dan periksa ulang kohort yang sama nanti.
Pertanyaan yang sering diajukan
- Apakah Firebase mengurangkan refund dari pendapatan pembelian dalam aplikasi?
- Hanya untuk Google Play. Event app_store_refund yang dikumpulkan otomatis oleh Firebase terpicu saat Google Play me-refund pembelian dalam aplikasi, dan Google menandainya khusus Android. Tidak ada padanan otomatis untuk refund App Store, dan Google menyatakan Analytics tidak otomatis mengukur pendapatan dan refund pembelian aplikasi berbayar.
- Apakah Google Ads menghapus pembelian dalam aplikasi yang di-refund dari konversi?
- Artikel Google sendiri tentang konversi Google Play tidak menyatakan demikian. Artikel itu menyebut nilai pembelian dilaporkan sebagai nilai konversi dan tidak menyebut refund. Penyesuaian konversi Google Ads dapat mengubah atau menarik konversi, dan Google menyatakan konversi online hanya bisa disesuaikan jika ID transaksi dikirim bersamanya.
- Bisakah postback AdAttributionKit mencerminkan refund?
- Hanya jika refund terjadi sebelum postback jendela konversi itu disiapkan. Jendelanya berlangsung hari 0 sampai 2, 3 sampai 7, dan 8 sampai 35 setelah peluncuran pertama, dan begitu jendela berakhir atau nilainya dikunci, Apple mengabaikan pembaruan berikutnya di jendela itu.
- Bagaimana cara menghitung ROAS bersih untuk aplikasi?
- Ambil pendapatan yang diatribusikan ke kampanye, kurangi refund atas pembelian yang sama, lalu bagi dengan biaya iklan kampanye. Hitung setiap refund terhadap kohort pembelian yang menghasilkannya, dengan notifikasi REFUND Apple dan sinyal pembelian yang dibatalkan dari Google Play sebagai catatan refund.
- Bisakah saya menyanggah refund yang menurunkan ROAS saya?
- Hanya dua jenis. CONSUMPTION_REQUEST dari Apple memungkinkan Anda mengirim data konsumsi dalam 12 jam, dan tinjauan chargeback Google Play lewat orders.reviewrefund memberi Anda 24 jam. Refund Google Play 48 jam, refund lewat dukungan, dan pembelian yang dibatalkan diputuskan tanpa Anda, dan chargeback bank bersifat final.
Sumber dan bacaan lanjutan
- 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
Autopilot refund untuk App Store dan Google Play
Baca selanjutnya
Order ID App Store di struk pelanggan memberi tahu apa yang mereka beli dan apakah Apple sudah me-refund-nya
Endpoint Look Up Order ID milik Apple mengubah order ID dari struk App Store pelanggan menjadi transaksi bertanda tangan, termasuk tanggal dan alasan refund. Berikut cara memakainya untuk email refund, apa yang tidak bisa dilakukannya, dan bagaimana order ID Google Play dibandingkan.
Refund web checkout iOS kini datang ke Anda, bukan ke Apple, begitu juga sengketa bank
Aplikasi iPhone di AS kini boleh mengarahkan pembeli ke web checkout. Apple menyatakan tidak dapat membantu refund atas penjualan tersebut, sehingga urusan refund, chargeback, dan biaya sengketa $15 berpindah ke Anda. Inilah yang berubah, berapa biayanya, dan cara menekan jumlah sengketa.