Skip to main content
Question

DEFERRED proration mode triggers RENEWAL instead of INITIAL_PURCHASE on Google Play - contradicts documentation

  • December 8, 2025
  • 3 replies
  • 60 views

Forum|alt.badge.img

Hi team,

I'm experiencing unexpected webhook behavior when using `DEFERRED` proration mode for Google Play subscription changes.

## Expected Behavior (per documentation)

According to the [Event Flows documentation](https://www.revenuecat.com/docs/integrations/webhooks/event-flows#product-change-at-period-end):

> In the case of a product change at period end, a PRODUCT_CHANGE event will immediately be sent informing of the upcoming product change. [...] When the customer encounters their next renewal, a RENEWAL event will be dispatched (for App Store subscriptions) or an **INITIAL_PURCHASE event (for Google Play subscriptions)**.

## Actual Behavior

When using `GoogleProrationMode.DEFERRED` for a product change on Google Play:

1. `PRODUCT_CHANGE` event is received (as expected)
2. At next renewal, **RENEWAL** event is received instead of **INITIAL_PURCHASE**

This contradicts the documentation which states Google Play should trigger `INITIAL_PURCHASE`.

Additionally, the `original_transaction_id` in the RENEWAL event is **different from the old subscription's original_transaction_id**. This suggests it's actually a new subscription (which should be INITIAL_PURCHASE), not a renewal of the existing one.

## Environment

- Platform: Android (Google Play)
- Framework: Expo (React Native)
- SDK: react-native-purchases ^9.1.0
- Proration mode: `DEFERRED`
- Environment: Sandbox

## Questions

1. Is this the intended behavior, or is this a bug?
2. If intended, should the documentation be updated to reflect this?
3. Are there any known differences between Sandbox and Production for this flow?

Any clarification would be appreciated. This affects how we handle subscription changes on our backend.

Thanks!

3 replies

hussain
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • December 10, 2025

Hi ​@mobile dev,

Thanks for reaching out. I’m happy to help.

What you’re seeing is expected behavior for Google Play with DEFERRED proration, it’s described in more detail on our docs here: https://www.revenuecat.com/docs/integrations/webhooks/event-flows#product-change-at-period-end

Furthermore, I’d like to mention that on Google Play, any product change (immediate or deferred) effectively results in a new transaction / order ID for the new subscription configuration. That’s why you see a new original_transaction_id on the RENEWAL event after the change

Hope this helps, let me know if you have any other questions.

Best,

Hussain


Forum|alt.badge.img
  • Author
  • New Member
  • December 11, 2025

Thanks for the reply, ​@hussain .

I understand that Google Play issues a new transaction/order ID for product changes. However, I'm still confused about the event type.

The documentation states:
> ...a RENEWAL event will be dispatched (for App Store subscriptions) or an INITIAL_PURCHASE event (for Google Play subscriptions)
https://www.revenuecat.com/docs/integrations/webhooks/event-flows#product-change-at-period-end

But I'm receiving a RENEWAL event, not INITIAL_PURCHASE. If a new transaction ID is issued (as you mentioned), wouldn't INITIAL_PURCHASE be the correct event type?

Could you clarify whether:
1. The documentation is outdated and RENEWAL is now the expected event?
2. Or this is a bug where RENEWAL is being sent instead of INITIAL_PURCHASE?

Thanks!

 


hussain
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • December 12, 2025

Hi ​@mobile dev,

Thanks for the detailed follow-up, and for calling this out.

I’ve gone ahead and updated the documentation so it now correctly states that a RENEWAL event is sent for both App Store and Google Play for product changes at period end.

Really appreciate you taking the time to dig into this and point out the inconsistency.

Best,

Hussain