Cada reembolso por mejora de suscripción es una decisión de la tienda, no tuya, y sale directamente de tus ingresos
Cuando un cliente pasa a un nivel superior, la tienda emite un reembolso por mejora de suscripción por los días no usados del plan anterior, y reduce tus ingresos de forma automática. Así funcionan los reembolsos por mejora en la App Store y en Google Play, y por qué Apple mantiene el importe fuera de tu servidor.

Puntos clave
- Un reembolso por mejora de suscripción es automático. Cuando un cliente pasa a un nivel superior a mitad de ciclo, la tienda acredita o reembolsa los días no usados del plan anterior sin preguntarte, y el dinero sale de los ingresos que ya habías contabilizado.
- En la App Store, una mejora surte efecto de inmediato y Apple reembolsa la parte prorrateada de la suscripción original. Una rebaja de nivel espera hasta la siguiente fecha de renovación y no reembolsa nada.
- Apple no envía a tu servidor el importe del reembolso por mejora. La transacción mejorada se marca con isUpgraded, pero el campo de precio sigue mostrando el precio completo del nuevo nivel, así que los ingresos que calculas a partir de App Store Server Notifications quedan inflados.
- Los informes financieros de App Store Connect son el único lugar donde se contabiliza un reembolso por mejora prorrateado. El personal de Apple afirma que el importe no está disponible a través de la App Store Server API, las Notifications ni StoreKit.
- Google Play no devuelve dinero a la tarjeta en una mejora. Acredita el tiempo no usado o cobra la diferencia de precio, y cuál de las dos ocurre depende del modo de reemplazo que configures. El valor por defecto es WITH_TIME_PRORATION.
- Un reembolso por mejora no es una solicitud de reembolso del cliente. No hay ningún CONSUMPTION_REQUEST ni revisión de contracargo, así que no hay ventana de 12 horas ni de 24 horas y no hay nada que disputar. Lo concilias, no lo peleas.
- El modo de reemplazo es una decisión de ingresos. WITH_TIME_PRORATION entrega al cliente tiempo pagado adicional que tú prestas al coste del nivel superior, mientras que CHARGE_PRORATED_PRICE cobra la diferencia ahora, así que un valor por defecto equivocado pierde margen mejora tras mejora.
Un cliente toca mejorar, pasa de tu nivel de cinco dólares al de diez dólares, y tú registras una venta mayor. La tienda hace otra cosa en ese mismo momento, y tú nunca la ves. Le entrega a ese cliente un reembolso por mejora de suscripción por los días que ya había pagado en el plan anterior, y ese dinero sale de tus ingresos. Nadie te preguntó. En la App Store ni siquiera encontrarás el importe en los eventos que recibe tu servidor.
Este no es el reembolso que puedes pelear. No es un CONSUMPTION_REQUEST de Apple ni una revisión de contracargo de Google Play. Es prorrateo, integrado en la forma en que ambas tiendas permiten a la gente cambiar de plan, y se ejecuta solo cada vez que un suscriptor sube de nivel. Esto es lo que realmente es un reembolso por mejora en cada tienda, por qué Apple mantiene el importe fuera de tu servidor y cuánto te cuesta la configuración equivocada de Google Play.
Qué es realmente un reembolso por mejora de suscripción
Un reembolso por mejora es la tienda ajustando cuentas por el tiempo que el cliente pagó pero no usará. No tiene nada que ver con una queja, una disputa ni tu política de reembolsos. Se dispara solo por la mecánica del cambio de plan.
Es prorrateo, no una queja del cliente
Cuando un suscriptor pasa a un nivel superior a mitad de un periodo de facturación, ya ha pagado hasta el final de ese periodo al precio anterior. La tienda lo compensa por la parte no usada. Apple emite un reembolso prorrateado de la suscripción original. Google Play acredita el valor no usado al nuevo plan. Ninguno pasa por un flujo al que puedas responder, y ninguno espera tu aprobación.
Solo una mejora lo activa
La dirección del cambio decide el dinero. En la App Store, una mejora es un paso a un producto de rango superior dentro del mismo grupo de suscripción, y solo ese paso es inmediato y con reembolso. Una rebaja es un paso a un rango inferior, y surte efecto en la siguiente renovación sin reembolso. Un cambio lateral es un paso entre productos del mismo rango, y su momento depende de las duraciones implicadas. Si ordenas mal los productos en App Store Connect, un cambio que crees que es una mejora se comportará como otra cosa.
| Cambio en App Store | Cuándo surte efecto | Qué pasa con el dinero |
|---|---|---|
| Mejora a un nivel superior | De inmediato | Apple reembolsa la parte prorrateada de la suscripción original |
| Rebaja a un nivel inferior | En la siguiente fecha de renovación | Sin reembolso, se renueva al precio más bajo |
| Cambio lateral, misma duración pagada por adelantado | De inmediato | Comienza una nueva suscripción, el servicio pagado continúa |
| Cambio lateral, duraciones distintas | En la siguiente fecha de renovación | Sin reembolso a mitad de ciclo |
Por qué la App Store oculta el reembolso por mejora a tu servidor
Esta es la parte que rompe el reporte de ingresos. Apple emite el reembolso por mejora, pero nunca le dice a tu servidor cuánto reembolsó.
isUpgraded es la única señal, y el precio es incorrecto
La nueva transacción llega con isUpgraded en true, lo que te indica que ocurrió un cambio de plan. El campo de precio de esa transacción sigue mostrando el precio de venta completo del nuevo nivel, no el importe que Apple recuperó del anterior. Ninguna App Store Server Notification lleva la cifra del reembolso. En palabras de la propia Apple en los foros de desarrolladores, el importe del reembolso prorrateado no está disponible a través de la App Store Server API, las Notifications ni StoreKit, y el reporte de App Store Connect es tu fuente para todos los fines de contabilidad financiera.
El informe financiero es el único registro honesto
Los informes financieros y de ventas de App Store Connect contabilizan el reembolso por mejora prorrateado, porque esos informes determinan lo que Apple realmente te paga. Eso los convierte en la fuente de verdad para cualquier suscriptor que alguna vez haya subido de nivel. Construye tu contabilidad a partir de los informes, y trata los eventos del servidor como señales de derechos, no como ingresos.

Cuánto te cuesta, en dinero
El reembolso por mejora no es un error de redondeo. Son ingresos reales, y en Google Play además eliges cuánto del tiempo no usado regalas.
El reembolso son ingresos que ya habías contabilizado
Toma a un suscriptor de tu nivel de 9.99 al mes que mejora a 19.99 el día 20 de un ciclo de 30 días. Aproximadamente un tercio del mes queda sin usar, así que Apple reembolsa unos 3.33 de los 9.99 originales. No pierdes toda la venta. Devuelves la parte que el cliente pagó por adelantado y no usará. Lo importante es que la devolución es automática y recae sobre la venta anterior, así que los ingresos que ya habías contado se reducen después. Multiplica eso por cada suscriptor que sube de nivel a mitad de ciclo y es una línea que deberías poder ver, no un hueco que descubres en el pago.
En Google Play, el modo de reemplazo es la verdadera palanca de costes
Google Play no reembolsa dinero a la tarjeta en una mejora. Ajusta el tiempo no usado de una de varias maneras, y tú eliges cuál pasando un modo de reemplazo al lanzar el flujo de compra. La elección decide si le entregas al cliente tiempo pagado o le cobras la diferencia. Google recomienda CHARGE_PRORATED_PRICE para las mejoras y DEFERRED para las rebajas, pero el valor por defecto de la biblioteca es WITH_TIME_PRORATION, así que un flujo que nunca configuraste está acreditando tiempo en silencio.
| Modo de reemplazo de Google Play | Cuándo surte efecto | Qué pasa con el tiempo no usado |
|---|---|---|
| WITH_TIME_PRORATION (por defecto) | De inmediato | Se acredita como tiempo extra en el nuevo plan, la siguiente fecha de facturación se aplaza |
| CHARGE_PRORATED_PRICE (solo mejora) | De inmediato | La diferencia de precio del periodo restante se cobra ahora, la fecha de facturación no cambia |
| WITHOUT_PRORATION | De inmediato | No se ajusta nada ahora, el nuevo precio empieza en la siguiente renovación |
| CHARGE_FULL_PRICE | De inmediato | El precio completo del nuevo plan se cobra ahora, el valor restante se traslada o se prorratea |
| DEFERRED | En la siguiente renovación | El plan actual sigue hasta que caduca, luego empieza el nuevo plan |
Cómo evitar que los reembolsos por mejora sorprendan a tu contabilidad
No puedes desactivar el prorrateo, y no querrías, porque es lo que hace que un cambio de plan sea justo para el cliente. Lo que sí puedes hacer es verlo, ponerle precio y mantenerlo aparte de los reembolsos que sí puedes disputar.
Concilia las mejoras de Apple con el informe financiero
Como el importe del reembolso nunca llega a tu servidor, los informes financieros y de ventas de App Store Connect son el único lugar donde aparece un reembolso por mejora prorrateado. Concilia los ingresos por suscriptor con esos informes en cada periodo, y no calcules los ingresos a partir de un total acumulado de Server Notifications. La marca isUpgraded te dice que ocurrió un cambio. El informe te dice cuánto costó.
Elige el modo de reemplazo de Google Play a propósito
Pasa un modo de reemplazo para cada cambio de plan de forma deliberada. Usa CHARGE_PRORATED_PRICE cuando quieras cobrar la diferencia de precio ahora en una mejora. Deja WITH_TIME_PRORATION solo cuando de verdad quieras dar al cliente el tiempo sobrante. Usa DEFERRED para las rebajas y así conservas los ingresos actuales hasta que termine el plazo. El valor por defecto es una decisión, y el valor por defecto equivocado regala margen mejora tras mejora.
Mantén los reembolsos por mejora separados de los reembolsos que puedes disputar
Un reembolso por mejora es automático y definitivo por diseño. No es un cliente pidiendo que le devuelvan su dinero. Los reembolsos en los que sí puedes influir son los iniciados por el cliente, donde Apple envía un CONSUMPTION_REQUEST y te da 12 horas para responder, y donde Google Play abre una revisión de contracargo a través de orders.reviewrefund con una ventana de 24 horas. Etiqueta tus datos para que los dos nunca se confundan. Una línea la concilias. La otra la respondes, contra reloj.
La versión corta
Cuando un cliente mejora una suscripción, la tienda le ajusta el tiempo no usado de forma automática. Apple reembolsa la parte prorrateada del plan anterior de inmediato y nunca le envía la cifra a tu servidor, así que los informes financieros de App Store Connect son el único registro exacto. Google Play acredita el tiempo o cobra la diferencia según el modo de reemplazo que configures, y el valor por defecto le entrega al cliente tiempo pagado que tú prestas a coste. Nada de esto pasa por un CONSUMPTION_REQUEST ni una revisión de contracargo, así que no hay nada que disputar. Concilia el reembolso por mejora, configura tu modo de Google Play a propósito y mantenlo aparte de los reembolsos que todavía puedes pelear.
Preguntas frecuentes
- ¿Un reembolso por mejora de suscripción pide mi aprobación?
- No. Un reembolso por mejora de suscripción es automático. Cuando un cliente pasa a un nivel superior a mitad de ciclo, la tienda ajusta el tiempo no usado del plan anterior por su cuenta, sin ninguna solicitud hacia ti ni ventana para responder. Apple reembolsa la parte prorrateada de la suscripción original, y Google Play acredita el tiempo no usado o cobra la diferencia de precio según el modo de reemplazo que configures.
- ¿Por qué mis ingresos de la App Store no coinciden con mi pago después de las mejoras?
- Porque Apple no envía a tu servidor el importe del reembolso por mejora. La transacción mejorada lleva isUpgraded en true, pero el campo de precio sigue mostrando el precio completo del nuevo nivel, y ninguna App Store Server Notification incluye el reembolso. Los ingresos calculados a partir de los eventos del servidor cuentan la venta nueva y se pierden el reembolso del plan anterior, así que quedan inflados hasta que los concilias con los informes financieros de App Store Connect.
- ¿Google Play reembolsa dinero a la tarjeta cuando un cliente mejora?
- No. Google Play trata el tiempo no usado como un crédito, no como un reembolso en efectivo. Según el modo de reemplazo, acredita el tiempo restante al nuevo plan y aplaza la siguiente fecha de facturación, o cobra la diferencia de precio del periodo restante. El modo por defecto es WITH_TIME_PRORATION, que acredita el tiempo.
- ¿Puedo disputar un reembolso por mejora de suscripción?
- No. Un reembolso por mejora no es una solicitud de reembolso del cliente. No hay ningún CONSUMPTION_REQUEST de Apple ni revisión de contracargo de Google Play, así que no hay ventana de 12 horas ni de 24 horas y no hay nada que enviar. Un reembolso por mejora lo concilias. Solo disputas los reembolsos y contracargos iniciados por el cliente.
- ¿Una rebaja de nivel le da un reembolso al cliente?
- No. En la App Store, una rebaja surte efecto en la siguiente fecha de renovación y no reembolsa nada, ya que el cliente conserva el nivel superior hasta que termina el periodo pagado. En Google Play, la forma recomendada de gestionar una rebaja es el modo de reemplazo DEFERRED, que mantiene el plan actual hasta que caduca y luego inicia el inferior.
- ¿Qué modo de reemplazo de Google Play debo usar para una mejora?
- Google recomienda CHARGE_PRORATED_PRICE para las mejoras, que cobra la diferencia de precio del periodo restante de inmediato y deja la fecha de facturación sin cambios. El valor por defecto WITH_TIME_PRORATION, en cambio, acredita el tiempo no usado como servicio extra en el nivel superior, así que úsalo solo cuando tengas la intención de regalar ese tiempo.
Fuentes y lecturas adicionales
- Apple Developer: Auto-renewable subscriptions (upgrade, downgrade, and crossgrade behavior and prorated refunds)
- Apple Developer Forums: Retrieving the prorated refund amount after an upgrade (Apple staff on isUpgraded, the price field, and financial reports as the source)
- Android Developers: BillingFlowParams.SubscriptionUpdateParams.ReplacementMode (all replacement mode constants)
- Android Developers: About subscriptions (proration, default replacement mode, upgrade and downgrade recommendations)
- Google Play Developer API: Method orders.reviewrefund (chargeback review, 24 hours)
- Apple Developer: Send Consumption Information (CONSUMPTION_REQUEST response window)
RefundHalt
El piloto automático de reembolsos para App Store y Google Play
Seguir leyendo
Las compras dentro de la app no autorizadas hechas por menores casi siempre se reembolsan al progenitor, y tú asumes el coste
Cuando un menor compra un paquete de monedas en el teléfono de su progenitor, tanto Apple como Google lo reembolsan y ninguno te pregunta antes. Los reguladores lo diseñaron así. Aquí verás cómo funcionan estos reembolsos de compras dentro de la app no autorizadas en cada tienda, la ventana de 15 minutos por donde se va el dinero, y lo que uno te cuesta en realidad.
Nunca fue tuyo el impuesto del reembolso de la app, así que un reembolso te cuesta tu parte, no el total del recibo
Reembolsa una compra dentro de la app y el recibo muestra el precio más el impuesto volviendo atrás. El impuesto nunca fue tu dinero. Apple y Google lo cobran y lo remiten como comerciante registrado, y luego lo revierten en un reembolso sin tocar tu parte. Esto es lo que cuesta de verdad un reembolso, y la única configuración en la que el impuesto pasa a ser tuyo.