Todos os artigos
Guia prático8 min de leitura

Os motivos de cancelamento de assinatura costumam chegar antes do pedido de reembolso, e o Google Play entrega muito mais deles que a Apple

O Google Play registra os motivos de cancelamento de assinaturas com sua pesquisa de cancelamento, e a Apple envia só um código de expiração. Veja o que cada loja informa, quais sinais apontam para um reembolso ou chargeback a caminho e quanto cada um custa para você.

Um desenvolvedor na mesa com a luz da manhã conferindo a tela de assinaturas de um celular ao lado de um caderno com marcações de contagem, organizando motivos de cancelamento de assinatura

Principais conclusões

  • O Google Play pergunta aos assinantes por que estão saindo quando cancelam, e a resposta chega ao desenvolvedor por canceledStateContext.userInitiatedCancellation.cancelSurveyResult em purchases.subscriptionsv2.
  • A pesquisa de cancelamento do Google Play tem cinco respostas que o desenvolvedor consegue ler: pouco uso, problemas técnicos, questões de preço, encontrou um app melhor e outro. O texto livre em reasonUserInput só é preenchido quando o usuário escolhe outro.
  • Uma notificação SUBSCRIPTION_CANCELED do Google Play traz apenas o token de compra. O motivo do cancelamento precisa ser buscado com purchases.subscriptionsv2.get, e o Google apaga todos os campos de cancelamento se o usuário restaurar a assinatura.
  • A App Store Server API da Apple não tem pesquisa de cancelamento. O campo expirationIntent traz um de cinco códigos: cliente cancelou, erro de cobrança, sem consentimento a um aumento de preço ou conversão de oferta, produto indisponível ou outro.
  • A notificação DID_CHANGE_RENEWAL_STATUS da Apple com o subtipo AUTO_RENEW_DISABLED pode significar que a App Store desativou a renovação automática depois que o cliente pediu reembolso, e não só que o cliente a desligou.
  • Um motivo de cancelamento nunca dá ao desenvolvedor voz em um reembolso. Só o CONSUMPTION_REQUEST da Apple, respondido em 12 horas, e a análise de chargeback do Google Play via orders.reviewrefund, respondida em 24 horas, pedem evidências.
  • O assinante do Google Play que cancela citando problemas técnicos é o que mais provavelmente vai querer o dinheiro de volta, e para pedidos feitos depois de August 3, 2026, um chargeback que ele ganhe custa ao desenvolvedor o preço da compra menos a taxa de serviço do Play, mais as tarifas do banco.

A maioria dos assinantes que acabam reembolsados cancela antes. Esse cancelamento vem com um motivo, e as duas lojas entregam quantidades bem diferentes dessa informação. O Google Play faz uma pesquisa rápida e repassa a resposta ao seu servidor, inclusive com texto livre. A Apple envia um código numérico que diz como a assinatura terminou, não por que o cliente quis sair. Leia os dois direito e você verá os pedidos de reembolso chegando enquanto ainda dá para fazer alguma coisa.

O que o Google Play informa sobre motivos de cancelamento

Quando um usuário cancela na central de assinaturas do Play, o Google pergunta o motivo. A resposta aparece no recurso de assinatura que você obtém com purchases.subscriptionsv2.get, dentro de canceledStateContext. Esse objeto só existe enquanto a assinatura está cancelada ou expirada, e diz quem encerrou a assinatura: o usuário, o sistema do Google, você ou uma substituição, como uma troca de plano.

Quando foi o usuário, o objeto userInitiatedCancellation tem dois campos. cancelTime diz quando ele cancelou. cancelSurveyResult guarda a resposta da pesquisa.

Motivo da pesquisaDescrição do GoogleO que costuma indicar
CANCEL_SURVEY_REASON_NOT_ENOUGH_USAGEPouco uso da assinaturaUso baixo, então pouco custo investido na conta
CANCEL_SURVEY_REASON_TECHNICAL_ISSUESProblemas técnicos ao usar o appO sinal mais forte de reembolso e chargeback
CANCEL_SURVEY_REASON_COST_RELATEDQuestões relacionadas a preçoSensibilidade a preço, às vezes uma renovação inesperada
CANCEL_SURVEY_REASON_FOUND_BETTER_APPO usuário encontrou um app melhorUm concorrente venceu, raramente vira disputa
CANCEL_SURVEY_REASON_OTHERSOutros motivosLeia reasonUserInput, as palavras do próprio usuário
CANCEL_SURVEY_REASON_UNSPECIFIEDMotivo da pesquisa não especificadoNenhuma resposta para trabalhar

A coluna da direita é a nossa leitura, não a do Google. As duas primeiras colunas vêm direto da referência da API.

A notificação não traz o motivo

Uma assinatura cancelada dispara uma notificação do desenvolvedor em tempo real SUBSCRIPTION_CANCELED, type 3. O Google deixa claro que essas notificações só avisam que o estado da compra mudou. O payload traz um token de compra e nada mais útil, então seu handler precisa chamar purchases.subscriptionsv2.get para ler a resposta da pesquisa.

A visão do Play Console

Você não precisa de código para ver os totais. Os relatórios de assinaturas do Play Console incluem um card de cancelamentos que divide o churn em voluntário, involuntário e outro, e um card de respostas da pesquisa de cancelamento para os usuários que escolheram responder. As respostas em texto livre de quem escolheu outro podem ser baixadas como CSV no card de outras respostas. Esse download exige a permissão View financial data, a mesma que você daria a uma ferramenta que lê seus pedidos.

O que a Apple informa, e o que ela deixa de fora

A Apple não tem nenhuma pesquisa de cancelamento que chegue aos desenvolvedores. O campo mais próximo é expirationIntent, nas informações de renovação assinadas, e ele descreve como a assinatura terminou, não o que o cliente pensou.

expirationIntentSignificado para a AppleSubtipo EXPIRED correspondente
1O cliente cancelou a assinaturaVOLUNTARY
2Erro de cobrança, como dados de pagamento inválidosBILLING_RETRY
3Sem consentimento a um aumento de preço ou conversão de oferta que o exigiaPRICE_INCREASE
4O produto não estava disponível para compra na renovaçãoPRODUCT_NOT_FOR_SALE
5Algum outro motivoSem subtipo

O código 1 é o único que descreve uma escolha do cliente, e ele não diz nada sobre a motivação. Um cliente que saiu porque o app vivia travando e outro que simplesmente terminou um projeto parecem idênticos.

O sinal escondido em AUTO_RENEW_DISABLED

Uma notificação da Apple merece atenção especial. DID_CHANGE_RENEWAL_STATUS com o subtipo AUTO_RENEW_DISABLED normalmente significa que o cliente desativou a renovação automática. A documentação da Apple acrescenta um segundo caso: a App Store também desativa a renovação automática depois que o cliente pede reembolso.

Então, no iOS, um evento de renovação desativada pode ser o primeiro sinal de um pedido de reembolso. Se a compra for um consumível ou uma assinatura com renovação automática, um CONSUMPTION_REQUEST pode vir em seguida, e a partir daí você tem 12 horas para enviar os dados de consumo. Um evento de renovação desativada que chega sem nenhuma ação visível no seu app merece ser tratado como um aviso para deixar prontos os dados de uso daquela conta.

Apple e Google lado a lado

Google PlayApple App Store
Pergunta o motivo ao usuárioSim, com uma pesquisa de cancelamentoNenhuma pesquisa visível para o desenvolvedor
Onde fica o motivocanceledStateContext em purchases.subscriptionsv2expirationIntent nas informações de renovação
Texto livrereasonUserInput, só para outroNenhum
Quem cancelouUsuário, sistema, desenvolvedor ou substituiçãoDeduzido do código e do subtipo
NotificaçãoSUBSCRIPTION_CANCELED, depois chamar getDID_CHANGE_RENEWAL_STATUS, EXPIRED
Perdido se o usuário assinar de novoSim, apagado ao restaurarAs informações de renovação refletem o estado atual
PainelCard de respostas da pesquisa de cancelamentoNenhum para motivos
Cartões de pesquisa impressos separados em pequenas pilhas sobre uma mesa de madeira ao lado de um celular e uma xícara de café, do jeito que um desenvolvedor agrupa motivos de cancelamento de assinatura

Onde um cancelamento vira reembolso

Um cancelamento interrompe a próxima cobrança. Ele não devolve a última. Se o dinheiro volta ou não depende de qual fluxo de reembolso o cliente alcança em seguida, e a maioria desses fluxos funciona sem você.

  • No Google Play, o comprador pode conseguir sozinho um reembolso em até 48 horas após a compra, e quem decide é o Google.
  • Reembolsos pelo suporte do Google ou da Apple são decididos pela loja.
  • O CONSUMPTION_REQUEST da Apple pede seus dados de consumo, com prazo de 12 horas.
  • A análise de chargeback do Google Play pede evidências via orders.reviewrefund, com prazo de 24 horas. A decisão do banco sobre um chargeback é definitiva.

Um motivo de cancelamento não muda nenhuma dessas regras. O que ele muda é quão cedo você sabe qual cliente está insatisfeito, e se suas evidências estão prontas quando chega um dos dois fluxos que as pedem.

Quanto cada motivo custa para você

A resposta da pesquisa também é um guia aproximado de quanto a conta já custou para ser atendida, que é o dinheiro que fica na sua mão quando há um reembolso.

Problemas técnicos

Este é o caro. O cliente usou o produto o bastante para encontrar problemas, então você já pagou a computação das sessões dele, as chamadas à API do modelo que as solicitações dele geraram, o armazenamento do que ele criou e qualquer repasse devido a um criador cujo conteúdo ele usou. Se depois ele conseguir um reembolso, o preço volta e esses custos ficam com você. Se ele recorrer ao banco no Google Play, um pedido feito depois de August 3, 2026 custa a você o preço da compra menos a taxa de serviço do Play, mais as tarifas do banco.

Questões de preço

Uma reclamação de preço custa menos do que parece, a não ser que esconda uma renovação inesperada. Essa é a história clássica de chargeback, então verifique se o cancelamento veio logo depois de uma cobrança de renovação e se seus lembretes de renovação foram enviados.

Pouco uso

Pouco uso significa custo baixo de atendimento, então um reembolso aqui devolve principalmente dinheiro que não custou muito para ganhar. É também o motivo em que dados de consumo honestos, se a Apple pedir, mostram exatamente o que o cliente usou e o que não usou.

Encontrou um app melhor

Esses clientes raramente contestam alguma coisa. Eles foram para um concorrente. O motivo é útil para decisões de produto e quase nunca para a defesa contra reembolsos.

Uma rotina para ler motivos de cancelamento

  • A cada SUBSCRIPTION_CANCELED do Google Play, chame purchases.subscriptionsv2.get e salve canceledStateContext com o token de compra e cancelTime.
  • Salve reasonUserInput literalmente quando o motivo for outro. É o único texto livre que qualquer uma das lojas entrega.
  • A cada DID_CHANGE_RENEWAL_STATUS da Apple com AUTO_RENEW_DISABLED, registre o evento e puxe o uso daquela conta, caso venha um CONSUMPTION_REQUEST.
  • A cada notificação EXPIRED da Apple, registre o subtipo e expirationIntent para que churn voluntário e falhas de cobrança não se misturem.
  • Para cancelamentos do Google Play por problemas técnicos, confira seus logs de erro daquela conta e entre em contato antes que o cliente procure o banco.
  • Mantenha logs de uso por conta, para que um CONSUMPTION_REQUEST seja respondido em menos de 12 horas e uma análise de chargeback em menos de 24.

Perguntas frequentes

Como vejo por que um assinante do Google Play cancelou?
Chame purchases.subscriptionsv2.get e leia canceledStateContext.userInitiatedCancellation.cancelSurveyResult. O campo de motivo guarda a resposta da pesquisa, e reasonUserInput guarda o texto livre quando o usuário escolheu outro. O Play Console também mostra os totais no card de respostas da pesquisa de cancelamento.
A Apple informa aos desenvolvedores por que um cliente cancelou uma assinatura?
Não. A Apple não tem pesquisa de cancelamento visível para desenvolvedores. O campo expirationIntent diz como a assinatura terminou, com códigos para cliente cancelou, erro de cobrança, sem consentimento a um aumento de preço, produto indisponível ou outro, mas não a motivação do cliente.
A notificação SUBSCRIPTION_CANCELED inclui o motivo do cancelamento?
Não. As notificações do desenvolvedor em tempo real do Google Play só dizem que o estado da compra mudou. Busque a assinatura com purchases.subscriptionsv2.get para ler o motivo e salve-o na hora, porque o Google apaga os campos de cancelamento se o usuário restaurar a assinatura.
Uma notificação AUTO_RENEW_DISABLED da Apple pode indicar um pedido de reembolso?
Sim. A documentação da Apple diz que o subtipo AUTO_RENEW_DISABLED cobre tanto o cliente desativando a renovação automática quanto a App Store desativando-a depois que o cliente pediu reembolso.
Posso revogar o acesso quando um assinante cancela?
No Google Play, não enquanto ele ainda tiver direito. O Google diz que um assinante que cancelou mantém o acesso até o fim do ciclo de cobrança, e remover o acesso antes viola a política de assinaturas do Google Play. Use expiryTime para decidir quando o acesso termina.

Fontes e leituras adicionais

RefundHalt

O piloto automático de reembolsos para App Store e Google Play

Continue lendo

A próxima solicitação de reembolso já está a caminho.

Configure a RefundHalt no tempo que você levaria para ler mais um e-mail de suporte sobre um reembolso que não conseguiu contestar.