MRR e ARR normalizados
Semanal, mensal, trimestral, semestral e anual comparados depois de normalizar. Trocar 99/mês por 1.800/ano é expansão de 51, não de 1.701.
O DuckLedger é a camada de métricas de receita que também conhece o outro lado da conta. MRR normalizado, cascata de movimentos, coortes, churn e retenção; nuvem, APIs de IA, despesas e fornecedores. E a resposta que só existe quando os dois lados fecham: margem por produto, por cliente e por usuário.
Multi-produto · RBAC · Segredos criptografados · Sem arqueologia de planilha
Exemplo · mês corrente
MRR
R$ 248,4k
Margem bruta
63,3%
Custo / usuário
R$ 3,12
LTV:CAC
4,1×
Métricas de receita completas
MRR, ARR, cascata, NRR, GRR, coortes e funil de conversão.
Custo com dono
Nuvem, IA e despesas rateadas até o produto que as gerou.
Margem por usuário
Receita menos custo direto, no nível da pessoa e da sessão.
Uma ferramenta de receita sabe quanto entrou. Uma ferramenta de FinOps sabe quanto saiu. Nenhuma das duas fecha a conta de um cliente específico. Estas são as perguntas do DuckLedger.
Ferramentas de receita param na etapa 3. Ferramentas de custo de nuvem começam na 4 e nunca conhecem a receita. A pergunta “este cliente dá lucro?” mora exatamente na junta — e exige receita e custo do mesmo produto, no mesmo período, na mesma moeda.
Cobrança
Assinatura
Analytics
Custo
Rateio
Lucro
MRR, churn, coorte
custo de nuvem por tag
atravessa a junta
A gateway move o dinheiro na etapa 1. O DuckLedger explica as cinco seguintes.
Não é um painel de MRR bonito por cima de um CSV. É um ledger de movimentos, snapshots diários e desfechos gravados quando acontecem — porque uma assinatura cancelada não lembra mais quanto valia.
Semanal, mensal, trimestral, semestral e anual comparados depois de normalizar. Trocar 99/mês por 1.800/ano é expansão de 51, não de 1.701.
Novo, expansão, reativação, contração e churn — com churn voluntário separado do involuntário pelo status de onde a assinatura saiu.
Retenção por coorte, ARPU, tempo de vida e NRR/GRR ancorados no snapshot que abriu o mês.
Desfecho escrito uma vez e nunca recalculado. Taxa sobre resolvidos, com a população em aberto sempre visível ao lado.
RevenueCat resolve Apple, Google e web de uma vez; App Store e Play também conectam direto. Comissão e estorno separados do bruto.
Asaas nativo: Pix, boleto, cartão e assinaturas, com webhook idempotente e conciliação por conta de gateway.
Atributos de cliente, segmentos salvos e previsão de receita a partir dos movimentos observados.
Cada pagamento resolvido até o produto que o gerou — e não “em algum lugar da gateway”.
Custo sem produto não vira margem. O DuckLedger importa o gasto onde ele nasce, atribui ao workspace e obriga uma pergunta que a contabilidade não faz: isto serve o cliente, compra o cliente, ou nenhum dos dois?
Sincronização automática do gasto por serviço, com despesa criada por competência e rateio por produto.
OpenAI, Anthropic, OpenRouter, Gemini e mais, com sync diário e atribuição por projeto, chave e workspace.
Manuais, recorrentes e importadas por CSV, com fornecedor, categoria e data de competência.
Custo de receita, aquisição ou overhead. Toda categoria nasce overhead, para que nada infle margem ou CAC no silêncio.
Custo compartilhado fica na organização; o P&L de cada workspace continua limpo e comparável.
Motor de fórmula auditável: custo total sobre usuários ativos, operações ou requisições — a métrica que você define.
Um LTV de receita diz quanto o cliente vai pagar. Só o LTV sobre margem diz quanto disso você fica — e é a única versão comparável com o que custou trazê-lo. Quatro números que nenhuma ferramenta só de receita consegue produzir.
margem bruta = (receita − custo de receita) / receita CAC = investimento de aquisição / novos clientes LTV (margem) = ARPU × meses de vida × margem bruta LTV:CAC = LTV (margem) / CAC payback = CAC / (ARPU × margem bruta)
Um mês que não trouxe ninguém não tem CAC zero: não tem CAC. Uma margem negativa não tem payback. O número volta nulo em vez de mentir.

Todo mundo mostra retenção de receita por coorte. Aqui a coorte acumula lucro bruto até cobrir o que custou adquiri-la — e o mês em que isso acontece tem nome.
Perder um cliente de margem alta e um de margem negativa não é o mesmo evento. Um deles melhora a empresa.
A taxa de margem sai do P&L; a receita recorrente vive na sua própria base. Levar a taxa para o MRR é prática padrão — somar caixa com MRR é o erro que essa separação existe para impedir.
Custo médio por usuário ativo é uma divisão, não uma medição. Instrumente o que o produto realmente faz — e cada chamada de modelo, job e conversa passa a ter dono, sessão, moeda e valor.
Uma chave de ingestão e um pacote. Lote, retentativa e idempotência por ID de evento.
O uso já existe nas suas tabelas: uma view somente leitura e uma consulta agendada.
Eventos já padronizados entram direto, com host, projeto e chave pessoal.
await usage.withTrace(
{
kind: 'conversation',
name: 'Support chat',
subject: user.id,
},
async (trace) => {
trace.step('retrieveContext');
usage.track({
type: 'ai.tokens_spent',
data: {
model: 'gpt-4o',
prompt_tokens: 1200,
completion_tokens: 400,
},
});
},
);Tokens sem custo informado são precificados pela tabela pública e marcados como estimados. Passe o custo medido e ele substitui a estimativa.

Conversa, checkout ou job: cada passo, provedor e hop entre serviços em uma linha só, com duração e custo.
O que o provedor cobrou e o que a tabela de preços calculou aparecem com rótulos diferentes na mesma tela.
Um trace que gastou USD no modelo e BRL na gateway custou duas coisas. Escolher uma taxa de câmbio para fundir as duas é decisão sua, não da célula.
O ID interno do seu app vira identidade; uma conta pode pagar por vários usuários sem multiplicar a receita.
Isto não é modéstia: é o que separa um painel de decisão de um painel decorativo. Quando falta base, o DuckLedger diz que falta.
Gastar R$ 3 mil e não adquirir ninguém não é aquisição gratuita. Sem base, a resposta é nula — e a tela explica o que falta conectar.
Custo calculado por tabela de preços nunca se veste de custo medido. O mesmo vale para nomes de trace inferidos pela rota.
Sandbox e produção são arquivados pelo ambiente que o evento carrega, não pelo da conexão.
Webhooks idempotentes, aliases de loja resolvidos para um cliente só, e custo instrumentado conciliado com a fatura em vez de somado a ela.
Comparação por categoria de ferramenta, não por marca — porque a diferença não é de qualidade, é de escopo.
MRR, churn, coortes
Assinaturas Apple e Google
Pix, boleto e cobrança BR
Custo de nuvem por produto
Custo de APIs de IA
Margem e lucro por produto
LTV sobre lucro bruto
Custo e receita por usuário
Resposta no mesmo dia
Sem implantação de seis semanas. Você liga a estrutura uma vez e os números passam a compor sozinhos.
Uma organização, um workspace por produto. Custo compartilhado fica na org; o P&L de cada produto nasce comparável.
Asaas para Pix, boleto e cartão; RevenueCat ou as lojas para in-app purchase. Backfill uma vez e webhook para o resto.
AWS Cost Explorer, provedores de IA e despesas. Classifique cada categoria como custo de receita, aquisição ou overhead.
SDK, banco ou PostHog. A partir daí a pergunta “quanto este usuário custa e gera” tem resposta com nome e sessão.

Chave de ingestão vive no seu servidor e tem escopo estreito de propósito: enviar evento, ler catálogo de medidor e registrar tipo faltante. Nada além disso.
Se você opera produtos digitais e a resposta sobre receita mora em uma ferramenta, o custo em outra e a margem em nenhuma — é essa junta que o DuckLedger fecha.
Já é do time? Entre e continue de onde parou.