We now handle Apple refund requests automatically: How Dipsea’s refund rate dropped 36%

A smarter way to manage refunds and protect your bottom line.

Handle Apple Refund Requests Automatically
Rik Haandrikman
PublishedLast updated

Refunds can be a thorn in the side for app developers. It stings even more when refund requests come from long-time users, Apple ends up granting them, and it’s cutting into revenue.

Luckily, developers have a way to influence Apple’s refund decisions: by providing consumption information on in-app purchases. 

What is consumption information?

When a customer requests a refund, the App Store sends developers a CONSUMPTION_REQUEST notification via the App Store Server Notifications API, giving them 12 hours to respond with “consumption information” like the user’s app activity and purchases. 

To provide this information, you or your team would call the Send Consumption Information endpoint with a response that includes the requested consumption data. Apple then considers the provided context in their refund decision. But there’s a catch: You have only 12 hours to respond. If developers don’t respond quickly, Apple often grants the refund by default.

An Apple engineer responding to a thread about CONSUMPTION_REQUESTS notifications in the Apple Developer forums
An Apple engineer responding to a thread about CONSUMPTION_REQUESTS notifications in the Apple Developer forums

Automate consumption information sends with RevenueCat

If app developers are even aware of these notifications, many end up not responding or not responding in time. This means that even the most unjustified refund requests could end up being granted.

To help you overcome this challenge, RevenueCat can now automatically respond to Apple’s consumption requests, instantly sending all necessary information and your refund preference. Since RevenueCat is already where your monetization data lives, we can share a lot of context, including:

  • How long a customer has been using your app
  • The degree to which a customer consumed an in-app purchase (for example, someone six months into an annual subscription would have consumed that for 50%)
  • The lifetime spend of a customer across platforms
  • The lifetime refunds granted to a customer across platforms

How it works

Letting us handle Apple’s refund requests is easy: In Projects, go to Apps, select your iOS App Store entry, and scroll down to find ‘Handling of refund requests.’ Here, you can select a handling preference.

Handling of refund requests with RevenueCat

If you choose anything except “Do not handle,” RevenueCat will send all required properties (a.k.a. consumption information). If you leave the handling preference set to “Do not handle” (the default option),  we do not respond at all. 

Apple takes into account the developer’s preference on whether to grant the refund or not, so take that into consideration before picking your desired setting:

  • Submit consumption data and let Apple decide: RevenueCat sends all required information but no refund preference, leaving the decision to Apple.
  • Always prefer granting refunds: RevenueCat sends data and your preference for granting the refund.
  • Always prefer declining refunds: RevenueCat sends data and recommends Apple to decline the refund.
  • Do not handle: RevenueCat won’t manage refund requests (the default option for all users).

⚠️ Important: Make sure you have customer consent to share consumption data by outlining this in your terms and conditions, as required by Apple.

Measure refund requests

RevenueCat also handles reporting refunds granted, declined, and reversed by Apple. Just head over to the ‘App Store Refund Requests Chart’ to see the breakdown of all refund requests per refunds granted, declined, and got no resolution, as well as how those numbers change over time.

App Store Refund Requests Chart in RevenueCat Dashboard

Curious to see how responding to consumption requests with RevenueCat affects the number of declined or accepted refunds? Set a refund handling preference and see how the refunds decline from that day onwards. You’ll be pleasantly surprised! 

As you might recall, a few months ago, we bought Dipsea, a spicy audiobook app. We were curious to see if this new feature would reduce the number of granted refund requests, so we used the app as a testbed to measure performance as we built the feature.

How Dipsea decreased the refund rate with RevenueCat 

On October 18, RevenueCat started tracking Dipsea’s consumption requests, and on October 23, we began replying with Dipsea’s preference set to ‘submit consumption data and let Apple decide.’

Refund Rate Chart of Dipsea

Before using RevenueCat’s automated response, Dipsea’s refund rate was steady at 3%. In just 15 days, that rate dropped to 1.9%, saving Dipsea hundreds of dollars. Notably, this improvement came even without setting a preference to decline refunds. Although results may vary, developers may see even better outcomes by selecting the “Always prefer declining refunds” option, as Apple considers this input in their decisions.

Handling Refund Requests and the CONSUMPTION_REQUEST notification without RevenueCat

If you’re not using RevenueCat today, there’s no better time to get started. Just click here to sign up, or look through our docs first to understand how to implement or migrate over an app with existing subscribers.

If you’d rather manage CONSUMPTION_REQUEST notifications directly, here’s how to set up your system:

  1. Set up a secure server endpoint to receive notifications from Apple’s App Store Server. This will be where Apple sends the CONSUMPTION_REQUEST notification when a customer initiates a refund
  2. When a CONSUMPTION_REQUEST notification comes in, check its payload for details like consumptionRequestReason and other data fields. These will give you the necessary context on the customers’ refund request and help you decide what consumption data to include
  3. For each request, compile relevant data on how the consumer has used your app. This might include:
    1. Time spent using your app
    2. Content accessed or completed
    3. Lifetime purchase history and frequency of use
    4. Refund history, if available
  4. Using the Send Consumption Information endpoint (documented here), send Apple a response with this data. You have 12 hours to do this, so you’ll want to automate this process if there’s a significant volume of requests coming in
  5. To ensure reliable responses, it’s wise to log each request and track response time

Following these steps should give Apple the context it needs to make more informed refund decisions. For more details, Apple’s documentation covers each field and provides example payloads.

Streamline refund management and keep your focus on growth

Refund requests don’t have to derail your focus or chip away at revenue. With our new automated response to Apple’s CONSUMPTION_REQUEST notifications, you’re covered – no manual responses, no lost time, and most importantly, no preventable refunds slipping through. Whether you’re a solo developer or leading a growth team, having a reliable system in place to manage these requests means you can focus on delivering value to your customers and driving your app’s success.

Check out the new handling preferences in your RevenueCat dashboard, and we’ll handle the rest.

You might also like

Share this post

Want to see how RevenueCat can help?

RevenueCat enables us to have one single source of truth for subscriptions and revenue data.

Olivier Lemarié, PhotoroomOlivier Lemarié, Photoroom
Read Case Study