Stripe e Email para SaaS: os eventos de cobrança que disparam a mensagem certa
Como ligar eventos do Stripe ao seu email: quais eventos importam, webhooks ou integração, idempotência, dunning, fim de trial, mudança de plano, assentos B2B e LGPD.
Se você fatura assinaturas pelo Stripe, existe um tipo de erro que destroi a confiança com facilidade: o cliente conserta o cartão às 23h e, na manhã seguinte, recebe mais um aviso de pagamento recusado. Ou acaba de subir de plano e encontra na caixa de entrada uma campanha convencendo a subir de plano. Nada disso acontece porque a mensagem foi mal escrita. Acontece porque a ferramenta de email não sabe o que a cobrança já resolveu.
Ligar os eventos de cobrança do Stripe ao seu email resolve isso de uma vez. Cada evento — uma fatura que falha, uma assinatura que muda de plano, um trial que se aproxima do fim — vira o gatilho de uma mensagem específica, com uma regra de saída que encerra a sequência no instante em que o estado da conta mudar. O cliente certo recebe a mensagem certa, e só enquanto ela ainda faz sentido.
Este artigo mostra, em termos práticos, quais eventos do Stripe valem a pena para o email, como recebê-los — por webhook ou pela integração que a sua ferramenta oferece —, por que idempotência e retentativas decidem se o seu dunning enerva ou ajuda, como manter a cobrança como fonte da verdade dos seus segmentos, o que separa recibo de campanha segundo a LGPD, e como desenhar as sequências de fim de trial, upgrade, mudança de plano e cancelamento. Antes das perguntas frequentes, há um checklist para você testar tudo isso no modo de teste do Stripe antes da primeira mensagem chegar a um cliente real.
Quais eventos do Stripe importam para o email
O Stripe emite um evento para cada mudança no ciclo de vida da cobrança, e a maioria deles não precisa tocar o email. O critério é simples: ligue um evento quando ele mudar o que o cliente precisa ouvir. Os seis que cobrem a maior parte dos produtos SaaS por assinatura são estes:
- Checkout concluído (
checkout.session.completed): a conta acabou de virar cliente pagante. É o momento de sair das sequências de trial e entrar na jornada de boas-vindas do plano pago, com a próxima data de cobrança. - Assinatura criada (
customer.subscription.created): o primeiro ciclo começa. Confirme o que foi comprado, o valor e quando a renovação acontece — o recibo de confirmação evita o primeiro contato de suporte. - Assinatura atualizada (
customer.subscription.updated): troca de plano, mudança na quantidade de assentos, conversão do trial ou a marcação de cancelamento no fim do período. Cada caso pede uma mensagem diferente, e alguns pedem nenhuma. - Assinatura cancelada (
customer.subscription.deleted): o acesso termina. Saia de todas as sequências ativas na hora; uma oferta de reativação pode vir depois, como mensagem de marketing. - Fatura paga (
invoice.paid): o recibo é mensagem de serviço, e este mesmo evento é o sinal que encerra qualquer sequência de cobrança em atraso. - Falha de pagamento (
invoice.payment_failed): entra a sequência de dunning, com link direto para a página onde o cartão é atualizado.
Ao evento de fim de trial (customer.subscription.trial_will_end), some um aviso alguns dias antes do término, com a data real configurada na cobrança. Comece com três ou quatro eventos e uma mensagem para cada; acrescente os outros quando as regras de saída das primeiras estiverem testadas. Para cada evento, anote em uma linha: qual email sai, quem é o dono da mensagem e qual estado encerra a sequência.
Webhooks ou a integração que a ferramenta de email oferece
Existem dois caminhos para esses eventos chegarem à ferramenta de email, e quase toda equipe acaba escolhendo um dos dois. O primeiro é a conexão com o Stripe que a própria ferramenta oferece: você autentica a conta, escolhe quais eventos sincronizar e os campos caem no contato sem que seu backend participe. O segundo é o caminho dos webhooks: o Stripe notifica um endpoint do seu produto, e seu código decide o que fazer — gravar o estado e chamar a API da ferramenta de email, disparar um fluxo, atualizar um segmento.
Verifique se a ferramenta que você usa oferece integração nativa ou se você vai configurar webhooks; essa resposta muda quem mantém o quê. Na integração nativa, a pergunta que vale é o que a documentação confirma: quais eventos ela lê, com que atraso o estado do contato é atualizado e quais campos ficam disponíveis para segmentação — status da assinatura, plano, valor recorrente, fim do trial. Sem isso confirmado, você só descobre a limitação quando a primeira sequência de dunning falha em parar. No caminho dos webhooks, o endpoint, o mapeamento de campos, o tratamento de retentativas e a manutenção quando uma das duas APIs mudar são responsabilidade sua. A Sequenzy, por exemplo, integra-se ao Stripe e expõe gatilhos por evento de pagamento, incluindo a URL da fatura hospedada quando a cobrança falha — ainda assim, o mesmo checklist de documentação vale para qualquer ferramenta da sua shortlist.
Vale notar que a lógica não muda se o seu processador for outro: Paddle e Lemon Squeezy, por exemplo, também entregam eventos de assinatura, pagamento e mudança de plano por webhook ou por conexão. O mapa de eventos, as regras de saída e o dunning são os mesmos; o que muda é o nome de cada objeto na documentação do processador.
Idempotência e retentativas: onde a maioria das integrações erra
O Stripe entrega cada evento com um identificador único e reenvia a notificação enquanto não receber uma resposta de sucesso do seu endpoint. Um handler que envia o email na hora em que a notificação chega vai, cedo ou tarde, mandar o mesmo aviso de pagamento recusado duas vezes para a mesma pessoa — porque a primeira entrega demorou a ser confirmada e o Stripe reenviou. A correção não é negociar menos retentativas com o processador; é fazer o handler ser idempotente: guarde o id do evento já processado e, numa repetição, responda com sucesso sem disparar nada de novo.
Três hábitos complementares evitam a maior parte dos problemas. Primeiro, confirme a notificação rápido e faça o trabalho pesado depois: o Stripe encerra a conexão com o endpoint se a resposta demorar, e essa demora é precisamente o que provoca os reenvios — enfileire o envio de email e devolva o OK imediatamente. Segundo, decida pelo estado, não pela ordem de chegada: eventos podem chegar fora de sequência, com uma fatura paga chegando depois de um aviso de falha, e a pergunta certa é qual é o estado atual da assinatura, qual evento é o mais recente e se o cliente já não deveria estar em outra mensagem. Terceiro, tenha uma reconciliação periódica: uma comparação diária entre as assinaturas do Stripe e os status gravados na ferramenta de email pega o que um webhook perdido deixou de fora, e vale mais do que qualquer dashboard de alerta.
A cobrança é a fonte da verdade dos seus segmentos
Uma ferramenta de email guarda os atributos do contato; o Stripe guarda o estado real da assinatura. Quando os dois divergem — alguém editou o plano à mão na ferramenta, um estorno corrigiu um status, um upgrade aconteceu e o segmento não acompanhou — as automações passam a responder a uma fotografia antiga. A regra que evita isso é direcional: o estado vem do Stripe e é gravado na ferramenta, e nunca o contrário. Segmentos que disparam mensagem de cobrança são construídos a partir dos campos sincronizados, não de etiquetas digitadas num painel.
Cinco campos cobrem a maioria dos casos: o plano que a pessoa paga agora, ligado ao produto e preço do Stripe e não a um rótulo de planilha; o valor recorrente, que separa uma conta pequena de uma conta grande sem uma regra por preço; o status — ativo, em atraso, em trial, cancelado —, porque quem está em atraso recebe uma mensagem e quem cancelou recebe outra; a idade da assinatura, que distingue o cliente do segundo mês, que precisa de apoio, do cliente do segundo ano, para quem outra coisa funciona; e o uso contra os limites do plano, que vem do seu banco de dados e não da cobrança, e precisa ser combinado com o mesmo identificador da assinatura.
Atenção a duas armadilhas de segmento. A primeira: o mesmo rótulo de plano esconde situações diferentes — quem subiu de plano na semana passada, quem paga anualmente e quem está no fim do trial podem carregar o mesmo nome de plano e não devem receber a mesma mensagem. Some valor recorrente e idade da assinatura a qualquer segmento que alimente um email de cobrança. A segunda: o pagamento em atraso e o cancelamento não são o mesmo público. O primeiro ainda tem um problema prático a resolver; o segundo já tomou uma decisão, e insistir com sequências de cobrança sobre uma conta cancelada só ensina a pessoa a ignorar o seu remetente.
Recibo e dunning são mensagem de serviço; upsell pede consentimento
Nem toda mensagem que sai de um evento de cobrança tem a mesma natureza diante da LGPD e do bom senso operacional. O recibo de uma fatura paga, o aviso de pagamento recusado e a confirmação de uma troca de plano são mensagens de serviço: elas existem porque uma relação contratual está acontecendo, não porque alguém aceitou receber campanha. Elas não precisam de opt-in de marketing, mas precisam de outra coisa: precisam ser corretas, mínimas e sobre o assunto — nada de promoção anexada ao recibo, porque a pessoa que está ali para conferir um valor não pediu uma oferta, e a mistura transforma uma mensagem necessária em reclamação de spam.
A oferta de upgrade, o convite para um plano maior e a mensagem de reativação já são marketing: exigem base legal própria, respeito ao descadastro e um canal de preferências. A fronteira prática é simples de testar — se a mensagem existiria mesmo depois que a cobrança parasse de mudar, é marketing. A separação também é técnica: quando o volume justificar, mantenha remetente e subdomínio distintos para serviço e campanha, de modo que uma campanha mal recebida nunca arraste junto a entrega dos recibos. O tratamento completo dessa divisão está no artigo sobre email transacional e de marketing.
Como desenhar a sequência de dunning
A sequência de cobrança em atraso existe para uma coisa: ajudar o cliente a consertar o pagamento. Não para pressionar, não para ameaçar e não para provar que o sistema funciona. O Stripe, por padrão, tenta a cobrança de novo automaticamente várias vezes antes de desistir da fatura, e os seus lembretes devem acompanhar essa janela em vez de insistir em ritmo próprio: três ou quatro mensagens espaçadas por alguns dias cobrem o período em que a retentativa ainda pode dar certo, e qualquer coisa além disso se torna ruído.
O conteúdo de cada mensagem é curto e factual. Diga qual cobrança falhou, o valor e a data, assuma boa-fé — cartão expirado e limite atingido são a regra, não a exceção — e ofereça um único botão: a página da fatura hospedada ou a tela do seu produto onde o cartão é atualizado. Um email de falha de pagamento que aponta para uma central de ajuda genérica obriga a pessoa a procurar o formulário certo, e parte desiste no caminho. Se o processador entrega a URL da cobrança pendente, use essa URL; ela leva direto ao ponto de correção.
A regra de saída é a metade que quase todo mundo esquece de escrever: no instante em que a fatura é paga, a pessoa sai da sequência. Uma sequência que continua mandando avisos para alguém que já pagou causa mais dano do que uma sequência que nunca existiu, porque ensina o cliente pagante a tratar os seus emails como alarme falso. Antes da última tentativa, avise com clareza o que acontece se o pagamento não for concluído — a assinatura será cancelada na data X —, e prepare a transição: quando o evento de cancelamento chegar, a pessoa sai do dunning e só pode voltar depois por uma mensagem de marketing com consentimento. Não há porcentagem de recuperação a prometer aqui; o que existe é uma sequência curta, com link útil e parada no momento certo.
Fim de trial e e-mails de upgrade
O aviso de fim de trial deve nascer do evento de cobrança, e não de uma contagem escrita à mão na ferramenta de email. A data que o Stripe conhece — a data que de fato encerra o período teste e inicia a cobrança — é a única que pode ir para o cliente; uma data digitada no construtor de automação diverge da cobrança no primeiro feriado, no primeiro fuso mal configurado e no primeiro plano estendido pelo suporte. O trial_will_end chega alguns dias antes do término, com essa data real, e a mensagem deve dizer o que vai acontecer: o trial termina na data X, o que a pessoa já configurou até aqui, e o caminho para continuar — convertendo, ou pedindo mais tempo se o seu produto permite.
Mensagens de upgrade seguem outra lógica: elas dependem de uso, e uso mora no seu produto, não na cobrança. Assentos consumidos, limites do plano atingidos, recursos bloqueados — esses sinais precisam ser combinados com o mesmo identificador da assinatura para que a ferramenta de email saiba a quem escrever. E o upgrade tem duas regras de saída: quem já subiu de plano recebe a confirmação do novo valor e sai da campanha no mesmo evento, e quem está em atraso não recebe oferta de plano maior enquanto o pagamento não estiver resolvido. Para o desenho da jornada completa — o que o email cobre, o que fica no produto, o que separa cadência de gatilho — o artigo sobre sequências de onboarding de um SaaS detalha o restante do percurso.
Mudança de plano e cancelamento
A atualização de assinatura carrega situações demais para caber em um email só, e tratar todas igual é o que gera mensagens fora de lugar. Um upgrade confirmado pede uma mensagem curta: o novo valor, a próxima data de cobrança e o que passa a estar disponível; e pede a saída imediata de qualquer sequência que convencia a subir de plano, porque ela cumpriu função. Um downgrade agendado para o fim do período pede outra comunicação: o que muda, quando muda e o que a pessoa continua tendo até lá — e a mensagem não pode prometer efeito imediato se a troca só valer na renovação.
O cancelamento merece a distinção mais cuidadosa de todas. Cancelar para o fim do período não é o mesmo que cancelar agora: a conta segue ativa até a data, e as mensagens dessa fase dizem que a assinatura termina naquele dia, não que o acesso já acabou. Quando o evento de cancelamento de fato chega, a pessoa sai de todas as sequências ativas na hora; a confirmação que sai em seguida é factual — o que termina, quando, o que acontece com os dados — e pode oferecer uma pergunta única de motivo, se o seu time realmente lê as respostas. A porta de reativação fica aberta como marketing, com consentimento e sem cobrança: quem cancelou não deve receber as mesmas mensagens de quem está em atraso, e muito menos uma sequência que finja não perceber a decisão.
Contas B2B com vários assentos
Produtos cobrados por assento trazem uma camada que o SaaS de usuário único não tem: a conta tem um administrador que decide a compra, um contato de cobrança que recebe a fatura e vários membros que apenas usam o produto. Mensagens de plano, valor e pagamento pertencem ao primeiro grupo — mandar o mesmo pedido de upgrade para cada assento gera atrito interno e respostas do tipo "não sou eu quem decide". Mensagens de uso e atividade pertencem ao segundo. A ferramenta de email precisa distinguir os papéis, e isso significa gravar no contato o papel dele na conta, não apenas o id da assinatura.
Eventos de cobrança refletem essa estrutura: um aumento de assentos no meio do ciclo muda o valor da próxima fatura, e o recibo que chega não vai bater com a mensalidade que o cliente tem em mente — explicar isso no próprio recibo, ou apontar para a página de cobrança, evita o ticket de suporte. A mudança de plano também é decisão da conta, não de um membro. E quando a mensagem depender do estado da empresa e não da pessoa — a assinatura em atraso, o fim do trial da conta — o segmento deve ser montado pela conta, agrupando os membros sob o mesmo identificador. A comparação entre Userlist e Customer.io mostra como ferramentas diferentes tratam segmentos de usuário e de empresa para esse tipo de produto.
Teste no modo de teste antes da primeira mensagem real
O Stripe separa chaves, eventos e webhooks de produção dos do modo de teste, e essa separação é a sua chance de quebrar as coisas sem constranger nenhum cliente. Nunca aponte o endpoint de produção para eventos de teste, nem o contrário: manter os dois registrados, com nomes claros, evita a surpresa clássica de uma notificação de teste caindo na sequência de dunning real. Com o modo de teste ativo, você dispara cada transição pelo painel — pagamento aprovado, cartão recusado, troca de plano, fim de trial, cancelamento — e observa o que a sua integração faz com ela.
Cinco verificações cobrem o essencial. O mesmo evento entregue duas vezes produz um email só. O cartão recusado inicia o dunning com o link de atualização apontando para a página certa. O pagamento em seguida derruba a pessoa da sequência na hora. O upgrade confirmado tira a pessoa da campanha de upgrade. E o cancelamento derruba tudo, deixando apenas a confirmação prevista. Use os cartões de teste que o Stripe publica para simular recusas e retentativas, e valide os payloads que o processador de fato envia — o nome do evento e o campo de identificação precisam bater com o que está escrito no seu handler, porque uma condição que parece correta no construtor visual falha quando o campo que chega é outro.
Minimização de dados e LGPD, em termos gerais
Ligar a cobrança ao email significa enviar dados de clientes para mais um sistema, e o princípio da necessidade deve valer nesse trânsito. Para quase todas as mensagens descritas aqui, a ferramenta de email precisa de pouco: um identificador interno estável, o plano, o status, o valor recorrente e datas. O número do cartão não precisa sair do Stripe em nenhuma hipótese — a correção acontece na página hospedada do processador, e o seu email só aponta para lá. Nome completo, cargo e dados de contato vão junto apenas quando a mensagem realmente precisa deles; campos enviados por conveniência são campos que você precisa proteger, reter e apagar depois.
A divisão de natureza das mensagens que vimos acima também é uma divisão de base legal: os avisos de serviço se sustentam na relação contratual, e as ofertas dependem de consentimento ou de outro fundamento que você consiga demonstrar, com descadastro fácil e registro da origem quando essa for a base aplicável. Some a isso os direitos do titular — acesso, correção, exclusão — e lembre de que eles valem para a ferramenta de email também: quem pede exclusão precisa sumir da sua base de campanha, não só do seu banco. Confira no contrato com o fornecedor o tratamento de dados, os subprocessadores e a exportação; e mantenha o canal de atendimento preparado antes que os pedidos comecem a chegar.
Checklist antes da primeira mensagem real
- Mapa de eventos: quatro eventos do Stripe, cada um com um email, um dono e uma regra de saída escritos na mesma linha.
- Conexão decidida: a ferramenta oferece a integração e a documentação confirma quais eventos e campos chegam — ou o webhook do seu backend está no caminho, com o mapeamento documentado.
- Handler idempotente: id do evento armazenado, confirmação rápida para o processador, trabalho pesado em fila, reconciliação diária entre Stripe e ferramenta.
- Domínio autenticado: SPF e DKIM publicados para o endereço de onde os emails de cobrança saem, conforme o guia de entregabilidade.
- Segmentos preenchidos: plano, valor e status dos clientes atuais importados do Stripe, com as contas conferindo com o painel de cobrança.
- Modo de teste percorrido: evento duplicado, recusa de cartão, pagamento recuperado, upgrade e cancelamento — cada um produzindo exatamente o que o mapa previa.
- Regra de saída revisada: fatura paga derruba o dunning; upgrade derruba a campanha de upgrade; cancelamento derruba tudo — e esse combinado é revisado a cada mudança de processador ou de estrutura de planos.
Perguntas frequentes
Preciso ligar o Stripe ao email se minha lista ainda é pequena?
Não obrigatoriamente. Com poucas centenas de clientes e uma newsletter por mês, uma ferramenta simples resolve. A integração passa a valer quando os emails dependem do estado da cobrança — falha de pagamento, cancelamento, troca de plano, fim de trial —, porque essas mensagens saem no momento errado sem esses dados, e o erro custa confiança de quem já está pagando.
Quais eventos devo ligar ao email primeiro?
Comece pelos que mudam o que o cliente precisa ouvir: fatura com pagamento recusado, cancelamento de assinatura, troca de plano e fim de trial. Some o recibo de fatura paga, que encerra o dunning, e o checkout concluído, que tira a pessoa das sequências de trial. Mantenha a primeira versão pequena e acrescente eventos depois que as regras de saída dos primeiros estiverem testadas.
Webhook ou integração nativa: por onde começar?
Se a sua ferramenta oferece a conexão e a documentação confirma os eventos e campos de que você precisa, a integração nativa economiza manutenção. Se você precisa de controle total sobre o mapeamento e o timing, o webhook do seu backend dá isso em troca de mais código para manter. Nos dois caminhos, idempotência e reconciliação continuam sendo obrigatórias.
Quando a sequência de dunning deve parar?
No instante em que a fatura é paga. Não no fim do ciclo atual, não no dia seguinte: no mesmo evento que confirma o pagamento. Escreva a regra, teste com uma assinatura de teste que paga depois de dois avisos e confirme que a pessoa cai fora da sequência antes de mandar a primeira mensagem para um cliente real.
Posso colocar uma oferta de upgrade no mesmo email do recibo?
Não. O recibo é mensagem de serviço e deve tratar só do que foi cobrado; a oferta é marketing e precisa de base legal, descadastro e um contexto próprio. Misturar os dois transforma uma mensagem que o cliente espera em uma que ele pode denunciar como spam, e a reclamação atinge a reputação do endereço de onde saem também os códigos e avisos de cobrança.
O que posso enviar à ferramenta de email sem problema de LGPD?
Identificador interno, plano, status da assinatura, valor recorrente e datas cobrem a maioria das mensagens. Dados de cartão não saem do Stripe; nome e cargo só quando a mensagem exigir. Registre a base de cada tipo de mensagem, respeite o descadastro das promocionais e faça o pedido de exclusão valer também na ferramenta de email.