Refund mechanics, store policy changes, and revenue defense tactics for app developers.
When the App Store reverses a refund it already granted, it expects your server to reinstate the access you revoked. Here is how the refund, refund declined, and reversed refund notifications work on the App Store and Google Play, and what each one costs when you ignore it.
Read article
When a customer is refunded, both Apple and Google hand their commission back, so the store's cut is not what you lose. Here is who pays for a refund on your app, what actually leaves your payout, and why a chargeback costs more than a plain refund.
Cancel a subscription and the store just stops the next charge, the customer keeps access to the end of the period, and no money moves. A refund reverses a payment that already cleared and pulls the access with it. Here is where the two split, what each costs you, and why only a refund ever reaches your server.
Consumables, non-consumables, auto-renewable subscriptions, and non-renewing subscriptions each refund on their own rules. Some can be restored, some vanish once spent, and only the consumable request and the subscription request ever ask the developer for evidence. Here is how the in-app purchase type you sell changes what a refund does to you.
App refund laws differ across the EU, the UK, and the US, but for most app sales the outcome is the same. The EU's 14-day withdrawal right is usually waived at checkout, US buyers rely on store policy, and no statutory refund lets you respond. Only two store flows ever ask for your side.
Friendly fraud is when a real customer buys your in-app purchase, uses it, then tells their bank the charge was wrong. The goods are gone and the money reverses. Here is what it costs an app developer, why it is rising, and the short window Apple and Google give you to push back.
Apple decides an App Store refund in about two days, but the money can take up to 30 days on a card and up to 60 on a phone bill. Here is the real App Store refund processing time by payment method, how Google Play compares, and why a slow refund can turn into a chargeback you cannot contest.
Apple shows refunds in two reports, Google shows them in two more, and your server sees a fourth. None of the counts match, and the gaps are by design. Here is why each surface attributes refunds differently, and how to reconcile refund reports against your own records by transaction.
On Google Play you can refund part of an order from the Console, by percentage or by amount, and share the loss with Google's fee. On the App Store you can issue no refund at all. Here is how a partial refund works on each store, and what one costs you.
Most mobile apps refund 2 to 5 percent of paid transactions, but Apple and Google keep the number in different dashboards. Here is where to find your app refund rate, what counts as normal by plan and category, and what each refund really costs you after fees.
Apple retries a refund notification up to five times and Google Play rides Pub/Sub at-least-once, so the same refund can reach your server more than once. Here is how to handle duplicate refund notifications without deducting a balance or burning API quota twice.
A Family Sharing refund reverses one payment but can leave up to five family members still on your paid features. Apple sends a REVOKE and expects your server to end the access. Here is how family-shared refunds work and what one costs.
Your refund handling only runs after a customer is already gone, so a bug in it stays invisible until it costs real money. Both stores let you fire a refund in a test environment first. Here is how to test in-app purchase refunds on the App Store and Google Play before one is real.
The refunded price is the smallest line on the bill. A refund reverses the store commission too, so you lose your share, and the compute, API calls, storage, and payouts you already spent are gone. A Google Play chargeback after August 3, 2026 adds the bank's fee on top. Here is the full bill.
A subscription refund reverses a whole billing period, not a single sale. On the App Store, Apple decides and your server only learns the outcome. On Google Play you pick a full or prorated refund yourself. Here is how each store handles subscription refunds, and what one costs you.
A refund on the App Store or Google Play is issued by the store, and the store decides it. A chargeback is the customer's bank pulling the money, and the bank decides it, with no appeal. For app developers the gap between them is now money, because from August 3, 2026 Google Play puts chargeback costs on you.
Google Play quietly stopped absorbing chargebacks. For orders placed on or after August 3, 2026, you pay back the purchase price less Play's service fee plus a bank fee on every disputed order. Here is what changed, what a single chargeback now costs, and the 24-hour window where you get to push back.
When Apple refunds one of your customers, the refund is already sitting inside your app on the transaction's revocationDate, before your server job runs. Here is where StoreKit 2 refund detection surfaces on the device, what revocationDate and revocationReason tell you, and why the client is for speed and the server is for truth.
Every App Store and Google Play refund starts a clock, and most of them run without you. Apple's shortest refund window is 12 hours, Google's chargeback window is 24, and from August 3, 2026 a missed chargeback window is a bill, not just a lost sale. Here is every deadline that touches your account.
Google Play can push your server a voided purchase notification the instant a purchase is refunded, charged back, or voided. It carries a purchaseToken, orderId, productType, and refundType, and it means one thing, revoke access. Here is how to read it and wire it up.
You can refund any Google Play order under three years old with one API call, with or without revoking access. Doing it yourself before a dispute turns into a chargeback saves you the bank fee that lands on developers from August 3, 2026. Here is how orders.refund works.
When a customer asks Apple for a refund, the Send Consumption Information payload is your reply. Apple cut it from twelve fields to five, three required and two optional. Here is every field, the values each one accepts, and the 12-hour window you send it in.
Apple's Get Refund History endpoint returns a customer's full App Store refund history as signed transactions. Here is every field, how the revision token paginates, why it is per customer and not per app, and what a refund you miss costs you.
Apple's in-app refund request lets a customer ask for a refund without leaving your app, on a sheet Apple builds and reviews. Here is what beginRefundRequest returns, the CONSUMPTION_REQUEST and 48-hour clocks it starts on your server, and whether the button is worth shipping.
Google Play voids a purchase quietly when it is refunded or charged back. The Voided Purchases API is the list of those orders, so you can revoke access. Here is every field, the 30-day window, the revoke option that hides orders, and what it costs.
Apple sends four refund messages through App Store Server Notifications V2, and most apps handle only two. REFUND tells you to revoke, REFUND_DECLINED means keep the sale, and REFUND_REVERSED hands the sale back and asks you to restore what you took. Here is what each one requires.
Since WWDC24, every Apple CONSUMPTION_REQUEST carries a consumptionRequestReason, the customer's own stated reason for wanting a refund. There are five values, from UNINTENDED_PURCHASE to LEGAL, and each one should change what you send back inside your 12-hour window. Here is how to read every one.
When a bank pulls a Google Play charge back, Google sends your server a PendingRefundReviewNotification and starts a 24-hour clock. Answer it through the ReviewRefund API with a refund preference and real consumption evidence, or the dispute is decided without you. Here is the whole flow, field by field.
Apple sends your server a CONSUMPTION_REQUEST when a customer asks for a refund, but the transaction never says who they are. appAccountToken is the UUID that links a purchase back to your user. Set it and you can answer Apple with real data. Skip it and you are guessing.
Google Play automatically refunds and revokes any purchase your server does not acknowledge within three days. It is an integration failure, not a customer decision, and it is fully preventable. Here is the exact rule, why it fires, and what each lost sale really costs.
The customer who refunds again and again is not an accident. Refund abuse costs you the money back plus the compute you already spent, and both stores hand you an identity signal, Apple's appAccountToken and Google's obfuscated account ID, to tie the pattern together.
Apple and Google can both send a refund out the door while the customer keeps their purchase. Here is exactly when access is removed automatically, when your server has to do it, and the one notification most integrations never handle.
Only two refund flows ever ask for your evidence: Apple's consumption request and Google Play's chargeback review. Everything else, the 48-hour Play refund, support refunds, voided purchases, unacknowledged trials, is decided without you. Here is the full map, what you can prevent, and what you can only record.
When a customer asks Apple for a refund, Apple asks you first. Here's exactly what the CONSUMPTION_REQUEST notification contains, what Apple expects back, how to answer one end to end, and why most developers silently forfeit.
Google quietly rewrote who pays when a Play purchase gets disputed with the bank. For orders placed after August 3, 2026, a lost chargeback comes out of your pocket, and you get 24 hours to fight back. What changed, what it costs, and how to be ready.
Blanket-declining every refund is as wrong as ignoring them. A field guide to measuring what refunds cost you and writing policy rules that protect revenue and your review score at the same time.