Educação · Infoprodutos

Infoprodutos e renovação

Quanto cada curso vendeu de novo, quanto renovou, quanto voltou em reembolso, quanto veio de afiliado e vendedor, e quanto está previsto entrar de renovação.

UsoComum
EsforçoMédio
Para quemInfoprodutores e escolas que vendem cursos, assinaturas e mentorias por plataformas como Hotmart e Eduzz.
Fonte

Vendas, comissões, participantes e assinaturas da plataforma

Regra

Parcela, tipo de compra, status e canal por referência

Resultado

Nova x renovação, reembolso, canal e previsão de renovação

Ativação

Painel de receitas, agente de IA e previsão do mês

O que resolve

  • Venda nova, renovação e parcela seguinte separadas, sem contar a mesma compra várias vezes.
  • Reembolso, afiliado e vendedor de cada venda decididos por uma regra única, que o time inteiro usa.
  • Uma previsão de renovação do mês que não soma cancelados nem confunde atraso reagendado com inadimplência.

Perguntas de negócio que responde

Faça estas perguntas ao seu agente quando o caso estiver pronto.

Quanto o curso faturou neste mês até ontem, e quantas vendas foram?
Quanto foi venda nova e quanto foi renovação no mês passado?
Qual o ticket médio do último lançamento e quantos reembolsos ele já teve?
Quanto vendeu o comercial, quanto os afiliados e quanto o marketing?
Quanto está previsto entrar de renovação no próximo mês, por curso?
Quanto de renovação perdemos neste mês por cancelamento?

O que você precisa

  • Hotmart ou Eduzz conectado na Nekt, incluindo comissões, participantes e assinaturas de todas as contas
  • Tabela de referência de produtos (curso e tipo de compra) e de vendedores e afiliados (código, conta e canal)
  • Definição de qual valor vale como receita: bruto com imposto ou líquido do produtor

O que você recebe

  • Uma tabela de compras com classificação, fase, canal, vendedor e valores em real
  • A previsão de renovação por assinatura, com flag de considerar e moeda da assinatura
  • Painel de receitas por curso, com reembolso na data da venda
  • Um agente de IA que responde vendas e renovação com as regras aplicadas

Onde ativar

Painel de receitas por curso

Vendas, faturamento, reembolso, nova x renovação e canal, com o mês fechado batendo ao centavo.

Agente de IA

O responsável pela renovação pergunta pela previsão e pelo churn agendado do mês.

Forecast do mês

Realizado até ontem mais o projetado restante pela taxa de conversão, contra a meta.

Quer construir?

As fontes são padrão, mas cada conta da plataforma é uma fonte e as tabelas de referência precisam de dono. O detalhado traz as regras de negócio, as armadilhas e o teste de aceitação. Ou mande tudo direto para o seu agente com o MCP da Nekt.

Ver detalhado
O problema

A plataforma devolve uma linha por parcela ou cobrança, com status em várias grafias e sem data do reembolso. Quem soma as linhas conta a mesma compra várias vezes, mistura renovação com venda nova e leva para a receita até venda cancelada. A previsão de renovação, vinda de um export manual, soma assinaturas canceladas e trata como real a moeda de quem paga em euro.

Como costuma ser feito, e a regra

Cada linha é um erro que já aconteceu na prática.

O jeito comumA regra
01
Contar linhas do histórico de vendas como vendas.
Venda é a primeira parcela, contada por transação

O grão é a parcela ou cobrança. Venda = código de transação distinto com a primeira parcela aprovada (`purchase.recurrency_number` vazio ou 1). As parcelas seguintes são continuação: entram no recebido do mês, nunca como venda nova. Vendas, clientes e reembolsos são contagens distintas e não se somam entre meses, cursos ou canais: recalcule no recorte pedido.

02
Filtrar só COMPLETE e perder as vendas ainda na garantia.
Status válido aceita aprovado e completo

Venda válida = `purchase.status` APPROVED ou COMPLETE: a plataforma passa de APPROVED para COMPLETE ao fim da garantia. Reembolso = REFUNDED e CHARGEBACK. Quando os status chegam em grafias mistas (português e inglês), use flags calculadas uma vez e nunca filtre por literal. A consulta de histórico sem filtro de status devolve só aprovadas e completas: peça os demais status explicitamente para enxergar reembolso e cancelamento. Nunca some valor sem filtro de status.

03
Chamar de cliente novo toda primeira compra de um produto.
Nova, renovação e continuação pela referência de produtos

A classificação vem da tabela de referência de produtos (tipo de compra de cada id de produto) e do número da parcela: parcela seguinte = continuação; primeira parcela de produto de renovação = renovação; produto de taxa inicial = taxa inicial; o resto = compra nova. Primeira compra é a primeira vez daquela pessoa naquele produto, não cliente novo na escola. Um curso pode ter vários ids de produto (à vista, assinatura, 6 e 12 meses): não deduplique por nome.

04
Comparar o reembolso do mês passado com o de seis meses atrás como se os dois estivessem fechados.
Reembolso fica no dia da venda

A plataforma não grava a data do reembolso: o estorno vira status na linha da venda original. Reembolso é contado no mês da venda, e o número de um mês continua crescendo por semanas depois que ele acaba. Compare meses com a mesma idade e diga isso. Para acompanhar a maturação, use fases: aprovada, garantia da plataforma cumprida (`warranty_expire_date`), consolidada pela regra da casa (por exemplo, 30 dias da aprovação) e reembolsada.

05
Decidir o vendedor por texto do sck, cada relatório com uma regra.
Canal: o afiliado vence o código do link

Ordem de decisão: 1) afiliado da venda (o cookie, em `hotmart_sales_participants` com papel AFFILIATE) se a conta estiver na referência como comercial, ex-vendedor ou afiliado externo; 2) código de vendedor encontrado no `tracking.source_sck`; 3) senão, marketing, inclusive venda sem sck. Grave o motivo (afiliado, sck, os dois, cookie contra sck) e o vendedor que decidiu. A lista de códigos e contas mora na tabela de referência, nunca no código da transformação. Afiliado fora da lista conta como marketing.

06
Atribuir ao comercial toda venda de lançamento que passou por um vendedor, e ao lançamento o canal.
Canal não é oferta

O comercial também vende lançamento e renovação. A oferta de origem (perpétuo, lançamento, webinário, live, renovação, orgânico) é outra coluna, derivada do padrão do sck. No funil, resuma em direta (oferta do próprio funil), indireta (lançamento e eventos), renovação e não identificada. Quando a venda indireta aparece num funil, o custo do lançamento não está na conta desse funil: diga isso.

07
Somar valor na moeda de origem com valor em real.
Receita bruta ou líquida, declarada

Bruto = preço da transação convertido para real: BRL direto, EUR pela PTAX do dia, outras moedas pela taxa da plataforma para dólar vezes a PTAX do dólar. Líquido = comissão do produtor (`hotmart_sales_commission`, fonte PRODUCER), o que fica para a escola. Escolha uma régua para faturamento e ROAS e declare. Contratado (preço x parcelas na primeira parcela do parcelamento) é diferente de recebido no mês, e parcelas futuras não estão na base.

08
Somar a tabela inteira de assinaturas como previsão do mês.
Previsão de renovação só com o que pode entrar

Grão: uma linha por assinatura, de todas as contas. Considerar = status ACTIVE, DELAYED ou OVERDUE e produto marcado para considerar. Projetado = soma de `price.value` das assinaturas consideradas por mês de `date_next_charge`, na moeda da assinatura (`price.currency_code`), nunca na moeda da última transação. Churn agendado = não considerar. Declare o denominador: só ativas ou ativas mais atraso. Atraso não é fila de cobrança: DELAYED já tem a próxima cobrança reagendada; a fila real é a próxima cobrança até hoje.

09
Juntar fotos de vários dias e multiplicar o projetado.
Previsão é uma foto do dia

A tabela de previsão é sobrescrita a cada execução: grave a data da foto em coluna. Para série histórica, grave em modo append com a data da foto, e nunca some fotos diferentes. Forecast do mês = realizado até ontem + projetado restante x taxa de conversão (realizado / projetado até ontem). No começo do mês, a taxa de 3 ou 4 dias é instável: use a taxa fechada do mês anterior até por volta do dia 10. Repasse contratado que entra como assinatura fica fora da taxa.

10
Contar como churn tudo que tem data de cancelamento.
Cancelamento por status, segmentado por quem cancelou

Cancelamento = status CANCELLED_BY_CUSTOMER, CANCELLED_BY_SELLER ou CANCELLED_BY_ADMIN, com a data em `end_accession_date`. Filtre pelo status, nunca por ter data: assinaturas reativadas também trazem a data. Segmente por quem cancelou: um lote cancelado pelo admin é evento operacional, não churn. Contas lidas por duas fontes geram a mesma assinatura e a mesma transação duas vezes: deduplique por código.

Status da assinatura e previsão de renovação

Status da plataforma e onde cada um entra.

ACTIVEEm dia: entra no projetadoconsiderar = true
DELAYEDAtraso com cobrança reagendadaconsiderar = true; fora da fila de cobrança
OVERDUEVenceu e não pagouconsiderar = true; fila de cobrança
CANCELLED_BY_CUSTOMERCancelado pelo assinantechurn agendado
CANCELLED_BY_SELLERCancelado pelo produtorchurn agendado
CANCELLED_BY_ADMINCancelado pela plataformaseparar: pode ser evento operacional
STARTED, INACTIVEFora do escopoconsiderar = false

Definições

Vendas
transações distintas com a primeira parcela em status válido (APPROVED ou COMPLETE), pela data da venda em America/Sao_Paulo
Faturamento
soma do valor em real das transações válidas do período, na régua declarada (bruto com imposto ou líquido do produtor)
Ticket médio
faturamento / vendas do mesmo recorte, agregando antes de dividir
Reembolsos
transações distintas com status REFUNDED ou CHARGEBACK, no mês da venda; valor complementar
Clientes compradores
e-mails distintos com transação válida no período; não se somam entre meses
Venda nova x renovação
classificação da primeira parcela pelo tipo de compra do produto na referência; parcelas seguintes são continuação
Projetado de renovação
soma de price.value das assinaturas com considerar = true e próxima cobrança no mês, na moeda da assinatura
Churn agendado
valor das assinaturas com considerar = false cuja cobrança cairia no mês; diferente dos cancelamentos registrados no mês
Coorte de compra
das pessoas que entraram num funil ou pediram contato no mês, quantas compraram em até 7, 30, 60 e 90 dias, sem quem já tinha comprado antes, com flag de janela completa

Armadilhas que já aconteceram

Venda cancelada de valor absurdo

Uma medida de faturamento do painel não filtrava status e somava uma transação cancelada com valor na casa dos trilhões, além de vendas estornadas.

Todo valor passa pelo filtro de status válido, inclusive em medidas derivadas.

Moeda chutada como real

A moeda vinha da última transação da assinatura. O cruzamento falhava em mais da metade das linhas e o padrão BRL transformava assinaturas em euro e dólar em real.

Use a moeda da própria assinatura (price.currency_code), sempre preenchida.

A mesma conta lida duas vezes

Duas fontes apontavam para a mesma conta da plataforma e cerca de 15% das linhas da previsão eram duplicata exata.

Deduplique por código da transação e da assinatura depois de unir as contas.

Export manual acima do real

O relatório de previsão exportado à mão ficava 33% a 56% acima do que a API mostrava, e era tratado como a verdade.

Automatize pela API e, onde divergir, investigue o export antes de ajustar o número.

Atraso inflando a cobrança

Contar todo atraso como fila de cobrança superestimou a fila em 3,7 vezes: a maior parte já tinha a próxima cobrança reagendada para o futuro.

Fila = OVERDUE ou próxima cobrança até hoje; DELAYED reagendado fica separado.

Valor quebrado na origem

Numa conta, várias assinaturas vinham com valor de R$ 1,00 e a previsão daquele curso por valor não fazia sentido.

Liste cursos com valor de assinatura fora da faixa do preço e use contagem até corrigir na origem.

Teste de aceitação

O caso está pronto quando todos os itens passam.

Pacote para o agente

Cole no Claude, ChatGPT ou outro cliente com o MCP da Nekt conectado.

Markdown completo
Infoprodutos e renovação
- Grão: transação (parcela). Venda = transação distinta da primeira parcela (recurrency_number vazio ou 1) com status APPROVED ou COMPLETE. Parcelas seguintes = continuação.
- Reembolso = REFUNDED ou CHARGEBACK, contado no mês da venda. A data do reembolso não existe. O reembolso de meses recentes ainda vai crescer: comparar meses na mesma idade.
- Classificação pela referência de produtos <tabela>: continuação, renovação, taxa inicial ou compra nova. Primeira compra = primeira vez naquele produto, não cliente novo.
- Canal: 1) afiliado da venda na referência de vendedores; 2) código de vendedor no sck; 3) marketing. Usar a coluna canal_venda; não recalcular pelo sck. Canal não é oferta de origem.
- Valor: <régua oficial: bruto com imposto ou líquido do produtor>, em real. EUR pela PTAX do dia; outras moedas pela taxa da plataforma para USD x PTAX USD.
- Não somar valor sem filtro de status. Vendas, clientes e reembolsos não se somam entre linhas.
- Previsão de renovação: só considerar = true (ACTIVE, DELAYED, OVERDUE e produto marcado). Valor = price.value; moeda = price.currency_code da assinatura; eixo = date_next_charge. Churn agendado = considerar = false.
- Declarar o denominador do forecast (só ativas ou ativas + atraso). Fila de cobrança = próxima cobrança até hoje.
- A previsão é uma foto diária: usar uma foto por consulta e declarar a data dela.
- Cancelamento = status CANCELLED_*, data em end_accession_date, separado por quem cancelou.
- Responder com totais. Dados de comprador só dentro da consulta.
Exceções por cliente:
- <cliente>: a previsão de renovação é liberada só para <responsável>.
- <cliente>: o curso <curso> tem valor de assinatura quebrado na origem; usar contagem, não valor.
- <cliente>: pagamentos por <meio fora da plataforma> não estão na base.

Variações

Ingressos de evento

Produtos do tipo ticket; evento pelo nome antes do separador, com de-para de grafias; cortesia x pago pelo tipo de pagamento; fora de receita recorrente.

Escada de produtos

Sequência de programas comprados por quem entrou nos funis, da isca até o programa principal.

Calls e compra

Quantos compram depois da sessão estratégica, em quanto tempo e com que ticket, casando agenda e comprador por e-mail.