所有文章
實戰指南閱讀時間 8 分鐘

你的 App ROAS 仍在計入 Apple 和 Google 已退款的購買,請改用淨 ROAS 出價

退款很少回傳到廣告平台,因此 ROAS 仍在計入 Apple 和 Google 早已退款的購買。本文說明 Firebase、Google Ads 和 AdAttributionKit 在哪些環節遺漏退款、這會造成多少損失,以及如何為 App 建立淨 ROAS。

一位行銷分析師的辦公桌,筆電上顯示廣告活動圖表,旁邊放著一支 iPhone、一支 Android 手機和幾行被劃掉的列印資料,象徵 App 退款後的淨 ROAS

重點摘要

  • Firebase 自動收集的 app_store_refund 事件只在 Google Play 為應用程式內購買退款時觸發。Google 將其標示為僅限 Android,因此 App Store 退款永遠不會減少 Firebase 已記錄的 in_app_purchase 收益。
  • 對於 Android App,Google Ads 會自動追蹤 Google Play 應用程式內購買,並將購買金額作為轉換價值回報。對於訂閱,它只記錄首次購買和首次付款金額。
  • Google Ads 轉換調整可以重新設定某次轉換的價值,或將其撤回為零。Google 表示,只有隨附交易 ID 傳送的線上轉換才能調整。
  • Apple 的 AdAttributionKit 在首次啟動後有三個轉換時間範圍:第 0 至 2 天、第 3 至 7 天和第 8 至 35 天,而精細轉換值只會出現在第一個回傳中。
  • 淨 ROAS 等於廣告歸因收益減去這些購買的退款,再除以廣告支出。如果某個廣告活動的買家退款較多,即使它的總 ROAS 較高,依淨 ROAS 排名也可能較低。
  • 退款訊號送達的是開發者的伺服器,而不是廣告聯播網。Apple 會傳送 REFUND 類型的 App Store 伺服器通知,Google Play 則透過即時開發人員通知和 Voided Purchases API 回報作廢購買,後者可回溯 30 天。
  • 只有兩種退款流程允許開發者提交證據:Apple 的 CONSUMPTION_REQUEST,須在 12 小時內回應;以及透過 orders.reviewrefund 進行的 Google Play 退單審查,須在 24 小時內回應。

廣告後台會在應用程式內購買發生的那一刻入帳,而且大多數後台從不沖回。當 Apple 或 Google 之後為這筆購買退款時,錢會從你的撥款中扣除,卻仍留在廣告活動的收益裡,於是 ROAS 繼續把功勞記在促成這筆銷售的廣告上。淨 ROAS,也就是扣除退款後的收益除以廣告支出,才是告訴你哪些廣告活動真正賺錢的數字。你必須自己建立它,因為退款訊號落在你的伺服器上,而不是廣告聯播網裡。

為什麼不計退款時 ROAS 會高估收益

ROAS 是歸因收益除以廣告支出。收益這一側通常只寫入一次,也就是在購買時,由裝置上的 SDK 或從商店匯入的轉換資料寫入。退款是之後發生在裝置之外的事件,發生在客戶與 Apple 或 Google 之間。除非有機制把它帶回同一個廣告活動,否則這筆購買會一直被計入。

如果退款很少且分布平均,這不會造成什麼問題。但通常並非如此。一個承諾超出 App 實際能力的廣告素材、一個投放給錯誤受眾的優惠,或一個充斥盜刷卡的流量來源,都會讓退款集中到特定廣告活動上。總 ROAS 正好掩蓋了這種差異。

什麼是淨 ROAS?

淨 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 不會自動評估付費 App 的購買收益和退款,且回報的收益可能與 Google Play Developer Console 中的資料不同。在 iOS 上,沒有任何自動機制會從 Firebase 已記錄的購買中扣除 App Store 退款。

Google Ads 將購買金額記為轉換價值

對於使用應用程式內結帳的 Android App,Google Ads 可以追蹤點擊過你廣告的使用者的應用程式內購買,不需要在 App 中加入程式碼。Google 表示,購買金額會自動作為轉換價值回報。對於訂閱,只有首次購買會被記錄為轉換,也只記錄首次付款金額。該說明文章沒有提到退款。

Google Ads 確實有更正工具。轉換調整可以在不改變轉換次數的情況下重新設定轉換價值,也可以撤回轉換,將其價值設為 0.00,並同時作用於 CPA 和 ROAS 出價策略。Google 表示,只有使用了交易 ID 的線上轉換才能調整,且已撤回的轉換不能再次調整。該頁面沒有提到 App 轉換,因此在依賴調整功能之前,請先確認你的轉換設定支援調整。

Apple 的廣告回傳在許多退款到來之前就已關閉

AdAttributionKit 有三個轉換時間範圍,從使用者首次啟動 App 時開始計算:第 0 至 2 天、第 3 至 7 天和第 8 至 35 天。在時間範圍結束之前,App 都可以更新轉換值。之後 Apple 會在隨機延遲後傳送回傳,第一個回傳延遲 24 至 48 小時,第二個和第三個延遲 24 至 144 小時。如果 App 提前鎖定了某個值,系統會忽略該時間範圍內的後續更新。

精細轉換值只會出現在第一個回傳中。之後的回傳最多只帶有粗略值。第 1 天發生、第 10 天被 Apple 退款的購買,已經在一個無法再更改的回傳中回報過了。

評估管道購買時記錄的內容購買被退款後會發生什麼
Firebase in_app_purchase,Android 和 iOS產品 ID、價格、價值、幣別、數量Android:觸發 app_store_refund。iOS:沒有自動退款事件
Google Ads,Google Play 轉換,Android將購買金額作為轉換價值,訂閱只計首次付款未說明。調整可以重新設定或撤回隨交易 ID 傳送的線上轉換
AdAttributionKit 回傳,iOS每個時間範圍一個轉換值,只有第一個是精細值該時間範圍的回傳準備好後即固定
你自己的伺服器每一筆交易,都與你的使用者 ID 關聯Apple REFUND 通知,Google Play 作廢購買訊號

App 退款何時到來,由誰決定

退款沒有統一的時程。有些在購買後幾小時內到來,有些則在幾個月後,這就是為什麼在廣告活動報表看似已定案之後,某個同期群的 ROAS 仍會持續下滑。

退款途徑商店自己描述的時間由誰決定你伺服器上的訊號
Google Play 退款申請48 小時內客戶向 Google 申請。之後 Google 會請他們聯絡開發者先是 Google,然後是你透過 RTDN 和 Voided Purchases API 收到作廢購買
Google Play 開發者退款你隨時可以發起你作廢購買(如果你撤銷了權益)
Google Play 未經授權扣款檢舉交易後 120 天內Google作廢購買
Apple 退款在 reportaproblem.apple.com 申請,24 至 48 小時內更新進度Apple帶有 revocationReason 的 REFUND 通知
Apple 消費資訊請求你須在 12 小時內回應Apple,依據你的資料CONSUMPTION_REQUEST
Google Play 退單審查你須在 24 小時內透過 orders.reviewrefund 回應銀行,在審閱你的證據之後退單成立時收到作廢購買

忽略退款的 ROAS 會讓你損失多少錢

以兩個預算相同的廣告活動為例。下面的數字僅供說明,並非基準。

項目廣告活動 A廣告活動 B
廣告支出$10,000$10,000
歸因購買收益$14,000$12,500
總 ROAS1.401.25
該收益中的退款占比18%4%
扣除退款後的收益$11,480$12,000
淨 ROAS1.151.20

總 ROAS 告訴你把預算轉到 A。淨 ROAS 則顯示 B 從每一美元中留下了更多。如果你的出價以總價值為準,演算法會不斷找到更多像 A 那樣的買家,因為從來沒有任何訊號告訴它這些人要求退款了。

廣告支出只是第一筆帳單。一位退款的客戶還會留下這些成本:

  • 佣金。按購買計酬的聯盟行銷、創作者和網紅合作通常依銷售額支付,而不是依扣除退款後的金額支付,除非合約另有約定。
  • 運算、API 呼叫和儲存空間。在存取權被撤銷之前,退款使用者一直在使用你的伺服器、你付費的第三方 API 和你的儲存空間。這些帳單不會退還。
  • 退單成本。自 2026 年 8 月 3 日起,Google 將退單的購買金額加上銀行手續費轉嫁給開發者,因此爭議較多的 Android 流量來源造成的損失會超過它流失的收益。
  • 目標設定變差。以已退款購買訓練的價值出價,會去尋找更多類似那些已獲退款的人。
桌上的兩疊硬幣,其中一疊被拿走部分硬幣後變矮,旁邊放著手機和計算機,呈現退款如何縮減淨 ROAS 背後的收益

某個廣告活動退款率高,是詐欺還是承諾落空?

通常是承諾的問題。Apple 的 revocationReason 會告訴你一筆退款屬於哪一類。0 表示 App Store 因其他原因為該交易退款,例如誤購。1 表示退款是因為你的 App 中存在實際的或使用者認為存在的問題。來自同一個廣告活動的大量 1,通常指向廣告素材或它引導進入的新手導覽流程。Google Play 上大量的未經授權扣款檢舉,則指向流量來源。

如何為 App 建立淨 ROAS

起步不需要新工具。你需要的是幾項你的資料可能還沒有做的串接。

  • 把廣告活動綁定到使用者。在安裝時把歸因結果與你自己的使用者 ID 一起儲存,這樣之後的任何交易都能追溯到某個廣告活動。
  • 把交易綁定到使用者。在 iOS 購買中設定 appAccountToken,在 Google Play 購買中設定經過混淆的帳戶 ID,這樣每個商店事件都能準確對應到你的使用者,不必猜測。
  • 在伺服器上監聽退款。處理來自 App Store Server Notifications V2 的 Apple REFUND 通知和 Google Play 的作廢購買通知。定期輪詢 Voided Purchases API 作為備援,因為它只會傳回過去 30 天內的作廢紀錄。
  • 依購買同期群並列回報總值和淨值。把每筆退款計入帶來這筆購買的廣告活動和購買日期,而不是退款出現的那一天。
  • 在平台接受更正的地方傳送更正。如果你的 Google Ads 轉換帶有交易 ID,就重新設定或撤回已退款的轉換。對於無法接受更正的平台,改為依據淨值數字調整其預算。
  • 準時回應兩種證據請求。RefundHalt 會在 12 小時時限內回應 Apple 的 CONSUMPTION_REQUEST,在 24 小時內回應 Google Play 的退單審查,讓你可以申辯的退款都能呈現你這一方的說法。

退款應依購買日期還是退款日期計入?

做廣告活動決策時,依購買日期。退款是關於某筆購買的事實,而這筆購買屬於某個廣告活動。財務依退款日期入帳,這就是為什麼你的 ROAS 報表和撥款在任何一天都對不上。兩種檢視都要保留,並分別標明。

同期群的淨 ROAS 什麼時候才算定案?

它是分階段確定的。Google 的自助退款時限在 48 小時後結束,Apple 告訴客戶退款申請會在 24 至 48 小時內有進度更新,而 Google Play 未經授權扣款檢舉可在交易後 120 天內提出。把早期數字視為暫定值,之後再重新檢查同一個同期群。

常見問題解答

Firebase 會從應用程式內購買收益中扣除退款嗎?
只針對 Google Play。Firebase 自動收集的 app_store_refund 事件會在 Google Play 為應用程式內購買退款時觸發,Google 將其標示為僅限 Android。App Store 退款沒有對應的自動事件,而且 Google 表示 Analytics 不會自動評估付費 App 的購買收益和退款。
Google Ads 會從轉換中移除已退款的應用程式內購買嗎?
Google 自己關於 Google Play 轉換的文章並沒有這樣說。文章表示購買金額會作為轉換價值回報,且沒有提到退款。Google Ads 轉換調整可以重新設定或撤回某次轉換,Google 表示只有隨附交易 ID 傳送的線上轉換才能調整。
AdAttributionKit 回傳能反映退款嗎?
只有當退款發生在該轉換時間範圍的回傳準備好之前才能。這些時間範圍是首次啟動後的第 0 至 2 天、第 3 至 7 天和第 8 至 35 天。一旦時間範圍結束或值被鎖定,Apple 會忽略該時間範圍內的後續更新。
如何計算 App 的淨 ROAS?
取歸因於某個廣告活動的收益,減去這些購買的退款,再除以該廣告活動的廣告支出。以 Apple 的 REFUND 通知和 Google Play 的作廢購買訊號作為退款紀錄,把每筆退款計入帶來這筆購買的同期群。
我能對拉低 ROAS 的退款提出申辯嗎?
只有兩種可以。Apple 的 CONSUMPTION_REQUEST 讓你在 12 小時內傳送消費資料,透過 orders.reviewrefund 進行的 Google Play 退單審查給你 24 小時。Google Play 的 48 小時內退款、客服退款和作廢購買,都是在沒有你參與的情況下決定,銀行退單則是最終結果。

資料來源與延伸閱讀

RefundHalt

App Store 與 Google Play 的退款自動駕駛

繼續閱讀

下一筆退款申請已經在路上。

讀完另一封關於未能抗辯退款的客服郵件所需的時間,就足夠您設定好 RefundHalt。