Lucratividade

Lucratividade: visão geral

Quanto custa adquirir um cliente, quanto ele retorna e quando o investimento se paga: métricas de lucratividade, séries temporais e coortes de retenção.

O que esta análise responde

A API de Lucratividade cruza o faturamento da sua loja com o investimento em mídia paga (Meta Ads e Google Ads) para mostrar se a aquisição e a retenção de clientes dão lucro. Todos os valores derivados de receita podem ser convertidos em margem de contribuição, de acordo com a margem configurada pela organização na plataforma V4MOS.AI.

Perguntas que você consegue responder:

  • Quanto custa adquirir um cliente novo (CAC)? E quanto custa cada venda (CPV)?
  • O valor que um cliente gera ao longo da vida (LTV) paga o custo de adquiri-lo (LTV/CAC)?
  • Qual é o retorno do investimento em mídia (ROI) e em quantos meses ele se paga (payback)?
  • Quantos clientes compram pela primeira vez e quantos voltam a comprar?
  • Quanto da receita de cada safra de clientes volta nos meses seguintes?
  • Quais produtos, canais, campanhas ou cupons de entrada trazem os clientes que mais recompram?
  • Quanto o custo real das mercadorias (CMV) consome da receita?

Qual endpoint usar

PerguntaEndpoint
Quais são os indicadores consolidados do período e como eles se comparam ao período anterior?GET /v1/profitability/cards
Quantos clientes novos e recorrentes compraram em cada dia ou mês?GET /v1/profitability/new-vs-recurring
Como CAC, LTV, CPV, receita e investimento evoluíram mês a mês?GET /v1/profitability/metrics-evolution
Quanto foi o CMV e o ticket médio em cada dia?GET /v1/profitability/cmv-evolution
Quantos clientes (ou quanta receita) de cada safra voltam nos meses seguintes?GET /v1/profitability/cohort

Endpoints disponíveis

Autenticação

Envie os headers x-client-id e x-client-secret em toda requisição, junto com o query parameter organizationId. Veja Autenticação.

Parâmetros comuns

Todos os endpoints usam a base URL https://data.v4mos.ai e aceitam os parâmetros abaixo.

ParâmetroObrigatórioFormatoDescrição
organizationIdSimtextoIdentificador da organização. Sem ele a API responde 400.
startDateNãoYYYY-MM-DDPrimeiro dia do período (inclusivo).
endDateNãoYYYY-MM-DDÚltimo dia do período (inclusivo).

O endpoint /cohort aceita ainda view, groupBy e breakBy (veja Coortes).

startDate e endDate só são aplicados quando enviados juntos. Se um deles faltar, a API considera todo o histórico da organização. Envie sempre datas de calendário puras (2025-01-31), sem horário.

  • Parâmetros desconhecidos na query resultam em 400.
  • Valores fora da lista permitida em view, groupBy ou breakBy também resultam em 400.

Exemplos

# Indicadores consolidados de janeiro a março de 2025
curl "https://data.v4mos.ai/v1/profitability/cards?organizationId=SUA_ORG&startDate=2025-01-01&endDate=2025-03-31" \
  -H "x-client-id: SEU_CLIENT_ID" \
  -H "x-client-secret: SEU_CLIENT_SECRET"

# Evolução mensal das métricas em 2025
curl "https://data.v4mos.ai/v1/profitability/metrics-evolution?organizationId=SUA_ORG&startDate=2025-01-01&endDate=2025-12-31" \
  -H "x-client-id: SEU_CLIENT_ID" \
  -H "x-client-secret: SEU_CLIENT_SECRET"

# Retenção de receita por safra, com colunas trimestrais
curl "https://data.v4mos.ai/v1/profitability/cohort?organizationId=SUA_ORG&startDate=2024-01-01&endDate=2024-12-31&view=revenue&groupBy=quarter" \
  -H "x-client-id: SEU_CLIENT_ID" \
  -H "x-client-secret: SEU_CLIENT_SECRET"

Métricas

Valores monetários estão na moeda da loja, arredondados em 2 casas decimais. "× margem" significa multiplicar por marginPercent / 100 (veja Margem de contribuição).

Indicadores gerais (/cards, /metrics-evolution)

CampoO que significaComo é calculadoUnidade
revenue / totalRevenueFaturamento brutoSoma da receita dos pedidosmoeda
investment / totalInvestmentInvestimento em mídia pagaSoma do gasto em Meta Ads e Google Adsmoeda
orders / totalOrdersPedidosQuantidade de pedidoscontagem
newCustomersClientes novosClientes cuja primeira compra caiu no períodocontagem
recurringCustomersClientes recorrentesClientes que compraram no período e já tinham comprado antes delecontagem
customersClientes ativosnewCustomers + recurringCustomerscontagem
recurringOrdersPedidos de recompraPedidos de clientes que já tinham comprado antes daquele pedidocontagem
averageTicketTicket médiorevenue ÷ ordersmoeda
contributionMargem de contribuiçãorevenue × margemmoeda
contributionProfitLucro de contribuiçãocontribution − investmentmoeda
cpvCusto por vendainvestment ÷ ordersmoeda
cprCusto por recomprainvestment ÷ recurringOrdersmoeda
cacCusto de aquisição de cliente (médio)investment ÷ clientes novosmoeda
ltvValor do cliente ao longo da vida, para clientes adquiridos no períodoMédia da receita total por cliente × margemmoeda
ltvLifetimeLTV de toda a base de clientes, sem filtro de períodoMédia da receita total por cliente × margemmoeda
retentionLtvParte do LTV que vem das recomprasMédia da receita após o mês da primeira compra × margemmoeda
ltvCacRatioQuantas vezes o LTV paga o CACltv ÷ cacrazão (ex.: 5.43 = 5,43×)
roiRetorno sobre o investimento em mídia(contribution − investment) ÷ investmentrazão (ex.: 1.19 = 119%)
clvValor líquido por cliente após o custo de aquisiçãoltv − cac (pode ser negativo)moeda
paybackMeses até a margem acumulada de uma safra pagar o custo de aquisiçãoMédia ponderada pelo número de clientes das safras que já se pagarammeses
conversionRateConversão da etapa Interesse para a etapa Decisão do funil configuradoDecisão ÷ Interesse × 100% (0–100)

Indicadores por estratégia de campanha (/cards)

Dependem da classificação de campanhas feita na plataforma V4MOS.AI (aquisição, marca, monetização).

CampoO que significaComo é calculadoUnidade
campaignCacCAC considerando só o investimento em campanhas de aquisiçãoInvestimento de aquisição ÷ todos os clientes novosmoeda
acquisitionInvestmentInvestimento em campanhas classificadas como aquisiçãoSoma do gastomoeda
acquisitionNewCustomersClientes novos trazidos pelas campanhas de aquisiçãoContagem por atribuição (UTM) da primeira compracontagem
acquisitionCacCAC das campanhas de aquisiçãoacquisitionInvestment ÷ acquisitionNewCustomersmoeda
acquisitionContributionMargem gerada pelos clientes dessas campanhasReceita desses clientes × margemmoeda
acquisitionLtvLTV médio dos clientes dessas campanhasMédia da receita total por cliente × margemmoeda
acquisitionLtvCacRatioLTV/CAC das campanhas de aquisiçãoacquisitionLtv ÷ acquisitionCacrazão
acquisitionRoiROI das campanhas de aquisição(acquisitionContribution − investimento) ÷ investimentorazão
brandInvestmentInvestimento em campanhas de marcaSoma do gastomoeda
brandImpressionsImpressões das campanhas de marcaSoma das impressõescontagem
brandNewCustomersClientes novos atribuídos a campanhas de marcaContagem por atribuição da primeira compracontagem
brandContributionMargem gerada por esses clientesReceita desses clientes × margemmoeda
brandRoiROI das campanhas de marca(brandContribution − investimento) ÷ investimentorazão
monetizationInvestmentInvestimento em campanhas de monetização (venda para a base)Soma do gastomoeda
monetizationContributionMargem dos pedidos atribuídos a campanhas de monetizaçãoReceita desses pedidos × margemmoeda
monetizationRoiROI das campanhas de monetização(monetizationContribution − monetizationInvestment) ÷ monetizationInvestmentrazão
monetizationRecurringCustomersClientes recorrentes com pedido atribuído a campanha de monetizaçãoContagem de clientes distintoscontagem
monetizationCprCusto por recompra das campanhas de monetizaçãomonetizationInvestment ÷ recompras atribuídas a elasmoeda
unclassifiedInvestmentInvestimento em campanhas sem classificaçãoSoma do gastomoeda
hasAcquisitionClassificationSe a organização já classificou alguma campanha como aquisição (em qualquer período)—booleano

Custo das mercadorias (/cards, /metrics-evolution, /cmv-evolution)

CampoO que significaComo é calculadoUnidade
cogsCusto real das mercadorias vendidas (CMV)Soma do custo informado pela plataforma de e-commerce, só nos pedidos que têm customoeda
revenueWithCmvReceita dos pedidos que têm CMV realSoma da receitamoeda
revenueWithoutCmvReceita dos pedidos sem CMV realrevenue − revenueWithCmvmoeda
marginBasisDe onde veio a margem do períodocmv_real, mixed, configured_percent ou no_basistexto
blendedContributionMargem de contribuição usando o CMV real onde existe e a margem configurada no restanteVeja Regras importantesmoeda

Coortes (/cohort)

CampoO que significaComo é calculadoUnidade
cohortMonthSafra: mês da primeira compra dos clientes da linha—data (YYYY-MM-01)
initialValueTamanho da safra no mês 0Clientes (view=logo) ou receita × margem (view=revenue)contagem ou moeda
months.{n}.pctRetenção no período n em relação ao mês 0valor no período n ÷ valor no mês 0decimal (0.52 = 52%)
months.{n}.absoluteValor retido no período nClientes ou receita × margemcontagem ou moeda
months.{n}.complementaryA métrica da outra visão para a mesma célulaReceita × margem na visão logo; clientes na visão revenuemoeda ou contagem
months.{n}.repurchaseRevenueReceita bruta de recompra no período nSoma da receita, sem margem (nula no mês 0)moeda
acquisitionInvestmentInvestimento em mídia do mês da safraSoma do gastomoeda
roi (linha)Retorno da safra no mês de entrada(receita do mês 0 × margem − acquisitionInvestment) ÷ acquisitionInvestmentrazão
directRevenue / directMarginReceita da primeira compra (bruta / × margem)Soma no mês 0moeda
totalRevenue / totalMarginReceita total da safra até hoje (bruta / × margem)Soma de todos os períodosmoeda
additionalRevenue / additionalMarginReceita das recompras (bruta / × margem)total − directmoeda
firstPurchaseCustomersClientes que entraram pela linha (produto, canal, campanha ou cupom)Contagemcontagem
repurchaseCustomersDesses, quantos voltaram a comprarContagemcontagem
repurchasePctTaxa de recomprarepurchaseCustomers ÷ firstPurchaseCustomers × 100% (0–100)
investment, cac, ltv, payback, roiEconomia da linha em breakBy=origem (e ltv em todas as quebras por dimensão e por produto)Veja a página do endpointvariadas

Regras importantes

Margem de contribuição

A organização pode configurar na plataforma a margem de contribuição, isto é, o percentual da receita que sobra depois dos custos variáveis (produto, impostos, frete, meios de pagamento). Toda resposta que usa essa margem informa:

  • marginPercent: o percentual aplicado (0–100).
  • marginConfigured: true se a organização configurou uma margem; false se não configurou.
  • marginCompleteness: complete, partial ou none. Indica se a margem foi montada item a item (gateway, imposto, frete e CMV) e se todos os itens estão resolvidos. none quando não há composição por item.
  • marginItemStatus: status de cada item (synced = vem dos pedidos, configured = informado pelo usuário, pending = não configurado ou sem dados). null quando não há composição por item.

Sem margem configurada, a API usa marginPercent = 100 e marginConfigured = false. Nesse caso, campos como contribution, ltv e roi refletem a receita bruta, não a margem real. Verifique marginConfigured antes de apresentar esses números como lucro.

Multiplicados pela margemNão usam a margem
contribution, contributionProfit, ltv, ltvLifetime, retentionLtv, ltvCacRatio, roi, clv, acquisitionContribution, acquisitionLtv, acquisitionLtvCacRatio, acquisitionRoi, brandContribution, brandRoi, monetizationContribution, monetizationRoi, valores de receita das coortes (absolute em view=revenue, initialValue, *Margin, ltv, roi)revenue, investment, orders, contagens de clientes, averageTicket, cpv, cpr, cac, campaignCac, acquisitionCac, monetizationCpr, conversionRate, *Revenue das coortes, repurchaseRevenue, percentuais de retenção (pct)

O percentual de retenção (pct) não muda com a margem, porque ela se cancela na divisão.

null não é 0

Muitos campos podem vir null. null significa "não foi possível calcular" (não há base, a divisão não está definida ou o dado não está disponível), enquanto 0 é um valor medido. Mostre um traço ou "N/D" para null e nunca o converta em 0.

Exceção: nos indicadores gerais de /cards (cac, cpv, cpr, roi, ltvCacRatio, campaignCac, averageTicket), uma divisão por zero retorna 0. Por exemplo, cac = 0 com newCustomers = 0 significa que não houve cliente novo, não que o custo foi zero. Já acquisitionCac, acquisitionRoi, brandRoi, monetizationRoi e monetizationCpr retornam null nessas situações.

Comparação com o período anterior

Em /cards, quando startDate e endDate são enviados, a resposta inclui:

  • previousPeriod: os mesmos indicadores calculados para o período imediatamente anterior, com o mesmo número de dias. Exemplo: para 01/03 a 31/03 (31 dias), o período anterior é 29/01 a 28/02.
  • changes: a variação percentual de cada indicador: (atual − anterior) ÷ anterior × 100. Cada campo é null quando o valor anterior é 0 ou null.

Exceções: ltv e retentionLtv não usam o período anterior. Eles comparam a base de clientes adquirida até o fim do período selecionado com a base adquirida até o início dele. margin é a margem configurada, que não depende do período, então sua variação é sempre 0.

Sem startDate/endDate, previousPeriod e changes vêm null.

Granularidade das séries temporais

EndpointGranularidade
/new-vs-recurringDiária para períodos de até 31 dias, respeitando exatamente as datas pedidas. Mensal para períodos maiores ou sem datas, com o período expandido para meses inteiros. O campo granularity informa qual foi usada.
/metrics-evolutionSempre mensal. O período é expandido para meses inteiros.
/cmv-evolutionSempre diária. Um ponto por dia com venda, cliente novo ou investimento.
/cohortSafras mensais. O período filtra os meses de entrada, expandido para meses inteiros.

Nas séries mensais, o campo month é o primeiro dia do mês (2025-03-01). Na série diária de /new-vs-recurring, o mesmo campo month traz o próprio dia.

Coortes

  • view: logo (padrão) mede retenção por número de clientes; revenue mede por receita × margem.
  • groupBy: month (padrão), quarter ou semester. Muda apenas o tamanho das colunas de período (M1, M2… viram T1, T2… ou S1, S2…). As linhas continuam sendo safras mensais. A coluna 0 é sempre o mês de entrada.
  • breakBy: cohort (padrão, uma linha por safra mensal), product (uma linha por produto da primeira compra), origem (canal), campanha ou cupom. Nas quebras diferentes de cohort, cada cliente começa no seu próprio mês 0, independentemente do mês do calendário.

Maturação: uma célula cujo período ainda não terminou no calendário (o mês atual ainda está acumulando) vem com maturing: true. O valor dela é parcial e tende a crescer. Na quebra cohort com groupBy=month esse campo não é enviado.

  • Com breakBy=product, as linhas se sobrepõem: um cliente cujo primeiro pedido tem vários produtos entra em várias linhas. Não some as linhas (overlappingRows: true).
  • Com breakBy=origem|campanha|cupom, cada cliente cai em exatamente uma linha, então as linhas podem ser somadas (overlappingRows: false). Clientes sem valor identificado entram na linha Sem origem, Sem campanha ou Sem cupom.
  • A atribuição de clientes a campanhas e cupons depende das UTMs e cupons registrados nos pedidos. Exiba sempre o campo coverage junto dos números para indicar quanto da base foi atribuída.
  • Com groupBy=quarter|semester e view=logo, as contagens somam clientes de cada mês. Um cliente ativo em vários meses do mesmo trimestre conta uma vez por mês, então o número é um teto de clientes distintos. As somas de receita são exatas.

CMV real e blendedContribution

Quando a plataforma de e-commerce informa o custo dos produtos, a API separa a receita em duas partes: com CMV real (revenueWithCmv) e sem CMV real (revenueWithoutCmv).

marginBasisSituaçãoblendedContribution
cmv_realTodos os pedidos do período têm CMV realrevenueWithCmv − cogs
mixedParte dos pedidos tem CMV real(revenueWithCmv − cogs) + revenueWithoutCmv × margem; null se não houver margem configurada
configured_percentNenhum pedido tem CMV real, mas há margem configuradarevenue × margem (igual a contribution)
no_basisNão há CMV real nem margem configuradanull

Se a margem foi configurada item a item e está completa (marginCompleteness = complete), cada parte desconta seus próprios custos (gateway, imposto, frete e CMV) em vez do percentual único.

contribution continua sendo sempre revenue × margem, mesmo quando há CMV real. Quando marginBasis vem null, os dados de custo não estavam disponíveis no momento da consulta, o que é diferente de no_basis. Em /cmv-evolution, essa situação é sinalizada por degraded: true com data: [].

Base de cálculo dos clientes

  • newCustomers e recurringCustomers em /cards respeitam exatamente as datas pedidas.
  • recurringCustomers (clientes que já tinham comprado antes do início do período) e recurringOrders (pedidos de quem já tinha comprado antes daquele pedido) medem coisas diferentes. Não divida um pelo outro.
  • cac usa o investimento total em mídia. campaignCac usa só campanhas de aquisição, mas divide por todos os clientes novos. acquisitionCac restringe os dois lados às campanhas de aquisição. São três CACs diferentes, de propósito.
  • As quatro fatias de investimento por estratégia (acquisitionInvestment + brandInvestment + monetizationInvestment + unclassifiedInvestment) somam o investimento das campanhas da organização, mas podem diferir ligeiramente de investment por diferença de atualização e porque ajustes de gasto zerados ou negativos entram nas fatias e não em investment.

Erros

StatusQuando acontece
400organizationId ausente, parâmetro desconhecido ou valor inválido em view, groupBy ou breakBy.
401Credenciais ausentes ou inválidas. Veja Autenticação.

Nesta página