Refund mechanics, store policy changes, and revenue defense tactics for app developers.
When a child buys a coin pack on a parent's phone, both Apple and Google refund it and neither one asks you first. Regulators built it that way. Here is how these unauthorized in-app purchase refunds work on each store, the 15-minute window where the money goes, and what one actually costs you.
Read article
Refund an in-app purchase and the receipt shows the price plus tax going back. The tax was never your money. Apple and Google collect and remit it as the merchant of record, then reverse it on a refund without touching your share. Here is what a refund actually costs, and the one setup where the tax becomes yours.
When a customer moves to a higher tier, the store issues a subscription upgrade refund for the unused days on the old plan, and it reduces your proceeds automatically. Here is how upgrade refunds work on the App Store and Google Play, and why Apple keeps the amount off your server.
A refund is not a smaller sale, it is money the store pulls back out of a later payout, often weeks after the sale and sometimes straight from your bank account. Here is when refund money actually leaves on the App Store and Google Play, and why your payout never matches your dashboard.
A non-consumable refund, on a lifetime unlock, an ad-removal upgrade, or a permanent pro tier, is the one refund you can genuinely reverse, because you can take the feature back. Here is what it costs on the App Store and Google Play, why Apple never asks you first, and how to make revoke stick.
Move your billing off the App Store or Google Play and Apple and Google stop handling your refunds. Here is what alternative billing refunds actually cost you, why the store's refund review flows disappear, and who pays when a bank forces a chargeback.
A consumable in-app purchase, a coin pack, a gem bundle, a batch of AI credits, is the one purchase you have already spent money delivering before anyone asks for it back. Here is what a consumable refund costs you on the App Store and Google Play, and the one window where your answer counts.
A free trial that converts to a paid plan is where most subscription refunds begin, because the customer forgot to cancel and the first thing they see is the charge. Here is what a free trial refund costs you on the App Store and Google Play, why you can rarely contest one, and how to stop it.
Every refund Apple and Google send your server carries a reason code. Google Play stamps one of nine reasons and a source on each void, Apple flags whether the refund blames your app. Here is what each code means, how to sort them into fix, fight, or accept, and what they are worth in money.
Most app refunds and chargebacks are decided by Apple, Google, or a bank without asking you. Here is where you actually reduce app refunds: acknowledge purchases in time, deliver cleanly, tag every account, and answer the two evidence windows before the money leaves.
Customers think they have 48 hours to get an app refund. The real window is much longer. Apple takes refund requests for up to 90 days, and a bank chargeback can reverse a Google Play sale up to 120 days out. Here is every clock that keeps your revenue reversible, and what the tail costs.
When a customer asks Apple for a refund, you get 12 hours to send consumption data. Apple's own docs call it one of a variety of factors, not a verdict. Here is what your data actually moves, why a DECLINE can still end in a refund, and what the nudge is worth in dollars.
Google Play lets you stamp a stable, hashed id onto every purchase and reads it back when a dispute lands. Set it and a chargeback review ties to the exact user whose usage you have to report. Skip it and you are matching a bare order id to guesses under a 24-hour clock.
When a customer can't tell what your app charged them, they call the bank instead of you, and that dispute lands as a chargeback. Apple shows everything as apple.com/bill and lets you change nothing. Google Play lets you set the statement name. Here is what each costs and what you control.
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.
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.