Marketing e Growth
Funil completo: da mídia paga ao LTV do cliente
Contexto
E-commerce de moda com investimento mensal de R$ 1,2 milhão em mídia distribuído em cinco canais. Cada plataforma reportava suas próprias conversões, e a soma das conversões declaradas era 2,3 vezes maior que o número real de pedidos. O objetivo é uma fonte única baseada no pedido real, com atribuição consistente, CAC por canal e LTV por coorte.
Perguntas que o painel deve responder
- Qual canal traz clientes que continuam comprando, e não apenas o primeiro pedido?
- Onde o funil perde mais gente: tráfego, produto, carrinho ou pagamento?
- Qual o CAC real por canal, considerando o pedido efetivado e não a conversão declarada?
- Quanto uma coorte de clientes gera em 3, 6 e 12 meses?
- Que campanhas estão queimando verba sem gerar cliente novo?
Indicadores e metas
| Indicador | Meta | Por que importa |
|---|---|---|
| ROAS (Retorno sobre Investimento em Mídia) | ≥ 4,5x | Eficiência imediata da mídia paga |
| CAC (Custo de Aquisição) | ≤ R$ 78 | Quanto custa trazer um cliente novo, não um pedido |
| LTV | ≥ R$ 320 | Sem LTV, o CAC não tem referência de julgamento |
| Razão LTV/CAC | ≥ 3,0 | Abaixo de 3, o crescimento consome caixa |
| Taxa de Conversão do Funil | ≥ 2,4% | Aponta onde o visitante desiste |
| Ticket Médio | R$ 264 | Alavanca mais barata de crescimento de receita |
| Taxa de Recompra 90d | ≥ 28% | Retenção é o que separa negócio sustentável de queima de caixa |
| Participação de Receita Orgânica | ≥ 35% | Dependência de mídia paga é risco estratégico |
Modelo de dados
A regra de ouro do marketing analytics: a fonte da verdade é o pedido do seu sistema, nunca a conversão declarada pela plataforma de mídia. As plataformas entram no modelo apenas como custo e como origem atribuída.
| Tabela | Origem | Granularidade |
|---|---|---|
| fPedidos | E-commerce (fonte da verdade) | Pedido, com UTM de origem |
| fInvestimento | APIs das plataformas | Dia × Campanha × Canal |
| fSessoes | Analytics | Dia × Canal × Dispositivo |
| fFunil | Analytics (eventos) | Dia × Etapa × Canal |
| dCliente | E-commerce | Cliente, com data da primeira compra |
| dCampanha | Plataformas | Campanha, canal, público, criativo |
| dCalendario | Gerada | Dia |
let Origem = Sql.Database("servidor", "ecommerce"), Pedidos = Origem{[Schema="dbo", Item="Pedidos"]}[Data], // UTMs chegam sujos: maiúsculas, espaços, variações de nome LimpaSource = Table.TransformColumns(Pedidos, {{"utm_source", each Text.Lower(Text.Trim(_ ?? "direto")), type text}}), LimpaMedium = Table.TransformColumns(LimpaSource, {{"utm_medium", each Text.Lower(Text.Trim(_ ?? "none")), type text}}), // Agrupa variações conhecidas em um canal padronizado Canal = Table.AddColumn(LimpaMedium, "Canal", each if List.Contains({"google","googleads","adwords"}, [utm_source]) and [utm_medium] = "cpc" then "Google Ads" else if List.Contains({"facebook","instagram","meta","fb","ig"}, [utm_source]) then "Meta Ads" else if [utm_medium] = "email" then "E-mail" else if [utm_medium] = "organic" then "Orgânico" else if [utm_source] = "direto" then "Direto" else "Outros", type text)in CanalMedidas DAX
Investimento, ROAS e CPA
Investimento = SUM( fInvestimento[Custo] ) Receita = SUM( fPedidos[ValorTotal] ) ROAS = DIVIDE( [Receita], [Investimento] ) CPA = DIVIDE( [Investimento], [Qtd Pedidos] ) Margem de Contribuição após Mídia =[Receita] * [Margem Bruta %] - [Investimento]ROAS ignora a margem. Um ROAS de 4x em um produto de 20% de margem destrói valor. A última medida é a que realmente importa.
CAC real (cliente novo, não pedido)
Clientes Novos =CALCULATE( DISTINCTCOUNT( fPedidos[IdCliente] ), FILTER( fPedidos, fPedidos[DataPedido] = RELATED( dCliente[DataPrimeiraCompra] ) )) CAC = DIVIDE( [Investimento], [Clientes Novos] ) Participação de Clientes Novos % =DIVIDE( [Clientes Novos], DISTINCTCOUNT( fPedidos[IdCliente] ) )A diferença entre CPA e CAC é a mais cara de ignorar: você pode estar pagando caro para trazer de volta quem já compraria de qualquer jeito.
LTV por coorte
Coorte = FORMAT( MAX( dCliente[DataPrimeiraCompra] ), "yyyy-mm" ) Receita Acumulada da Coorte =VAR MesesDesdePrimeira = SELECTEDVALUE( dMesesDesde[Meses] )RETURNCALCULATE( [Receita], FILTER( fPedidos, DATEDIFF( RELATED( dCliente[DataPrimeiraCompra] ), fPedidos[DataPedido], MONTH ) <= MesesDesdePrimeira )) LTV por Cliente =DIVIDE( [Receita Acumulada da Coorte], [Clientes da Coorte] ) Razão LTV/CAC = DIVIDE( [LTV por Cliente], [CAC] ) LTV Preditivo =-- Modelo simples e defensável: frequência x ticket x margem x horizonteVAR ComprasPorAno = DIVIDE( [Qtd Pedidos], [Clientes Ativos] ) * 12 / [Meses do Período]VAR Ticket = [Ticket Médio]VAR MargemPct = [Margem Bruta %]VAR VidaMediaAnos = 2.5RETURN ComprasPorAno * Ticket * MargemPct * VidaMediaAnosA matriz de coorte (linhas = mês de aquisição, colunas = meses desde a primeira compra) é o visual mais valioso de marketing: revela se a qualidade do cliente adquirido está melhorando ou piorando.
Funil e taxas de conversão
Sessões = SUM( fSessoes[Sessoes] )Visualizações = CALCULATE( SUM( fFunil[Eventos] ), fFunil[Etapa] = "Produto" )Carrinhos = CALCULATE( SUM( fFunil[Eventos] ), fFunil[Etapa] = "Carrinho" )Checkouts = CALCULATE( SUM( fFunil[Eventos] ), fFunil[Etapa] = "Checkout" ) Conversão Geral % = DIVIDE( [Qtd Pedidos], [Sessões] )Conv. Sessão→Produto % = DIVIDE( [Visualizações], [Sessões] )Conv. Produto→Carrinho % = DIVIDE( [Carrinhos], [Visualizações] )Conv. Carrinho→Checkout %= DIVIDE( [Checkouts], [Carrinhos] )Conv. Checkout→Pedido % = DIVIDE( [Qtd Pedidos], [Checkouts] ) Maior Gargalo do Funil =VAR Etapas = DATATABLE( "Etapa", STRING, "Ordem", INTEGER, { { "Sessão→Produto", 1 }, { "Produto→Carrinho", 2 }, { "Carrinho→Checkout", 3 }, { "Checkout→Pedido", 4 } } )VAR ComTaxa = ADDCOLUMNS( Etapas, "@Taxa", SWITCH( [Ordem], 1, [Conv. Sessão→Produto %], 2, [Conv. Produto→Carrinho %], 3, [Conv. Carrinho→Checkout %], 4, [Conv. Checkout→Pedido %] ) )RETURNCONCATENATEX( TOPN( 1, ComTaxa, [@Taxa], ASC ), [Etapa] )Abandono de checkout acima de 30% quase sempre é frete, prazo ou meio de pagamento — não é problema de mídia.
Atribuição multicanal
Receita Last Click =CALCULATE( [Receita], USERELATIONSHIP( fPedidos[CanalUltimoClique], dCampanha[Canal] ) ) Receita First Click =CALCULATE( [Receita], USERELATIONSHIP( fPedidos[CanalPrimeiroClique], dCampanha[Canal] ) ) Diferença de Atribuição % =DIVIDE( [Receita Last Click] - [Receita First Click], [Receita First Click] )Canais de descoberta (social, display) brilham em first click; canais de captura (busca de marca, e-mail) brilham em last click. Mostrar os dois lado a lado encerra a disputa interna por orçamento.
Recompra e retenção
Taxa de Recompra d =VAR ClientesBase = CALCULATE( VALUES( fPedidos[IdCliente] ), DATESINPERIOD( dCalendario[Date], TODAY() - 90, -90, DAY ) )VAR Recompraram = CALCULATE( DISTINCTCOUNT( fPedidos[IdCliente] ), DATESINPERIOD( dCalendario[Date], TODAY(), -90, DAY ), ClientesBase )RETURN DIVIDE( Recompraram, COUNTROWS( ClientesBase ) )Recompra é o indicador que a mídia paga não consegue comprar. É a prova de que o produto e a experiência funcionam.
Layout do painel
- 1Página 1 — Visão de Growth: cartões de Receita, Investimento, ROAS, CAC, LTV/CAC e Clientes Novos; linha de receita e investimento em eixo duplo justificado (ambos em reais); barras de ROAS por canal ordenadas.
- 2Página 2 — Funil: visual de funil com as 5 etapas e taxas entre elas; comparação de funil por dispositivo (mobile x desktop, quase sempre reveladora); caixa de texto com a medida Maior Gargalo do Funil.
- 3Página 3 — Coortes: matriz de coorte com cor de fundo por medida (mapa de calor de retenção); curva de LTV acumulado por coorte em linhas sobrepostas; LTV/CAC por canal de aquisição.
- 4Página 4 — Campanhas: tabela detalhada com investimento, pedidos, CAC, ROAS e margem após mídia, ordenada por margem; destaque em vermelho para campanhas com margem negativa.
- 5Página 5 — Atribuição: comparação first click x last click por canal, em barras opostas.
- 6Rodapé em todas as páginas: 'Fonte da verdade: pedidos do e-commerce. Conversões declaradas pelas plataformas não são somadas.'
Desafio final
Monte a matriz de coorte com mapa de calor de retenção e responda: a qualidade dos clientes adquiridos nos últimos 6 meses está melhor ou pior que a do ano anterior? Depois calcule o LTV/CAC por canal e defina para qual canal você realocaria 20% do orçamento.