Como calculamos CAC, ROI, ROAS e LTV do El Misti

Versão 1.0 — 09/ago/2026 · Dados: jan a ago/2026 · 5 propriedades · Brasil e Argentina

Painel ao vivo: https://unit-economics.elmistihostels.com

Este documento existe para uma pessoa poder discordar dos números. Cada decisão está escrita com o motivo, e cada premissa vive num arquivo que você pode editar (premissas.json) — mude um valor lá, rode de novo, e tudo se refaz.


1. A pergunta que estamos respondendo

Três perguntas, na verdade, e é útil separá-las porque respondem a decisões diferentes:

Pergunta Métrica Serve para decidir
Quanto custa trazer uma reserva direta? CAC Se vale investir em mídia, e quanto
Cada real de anúncio volta em quanto de venda? ROAS Onde realocar verba entre campanhas
O investimento se paga? ROI Se o canal direto é melhor que a OTA
Quanto vale um hóspede ao longo do tempo? LTV Quanto podemos pagar para conquistá-lo

Escopo: reservas do El Misti, com foco no canal direto — que é onde temos controle. A OTA entra como comparação, não como alvo.

Uma correção de rota que vale registrar

O pedido original falava em ROE (Retorno sobre Patrimônio Líquido). ROE mede o lucro contra o dinheiro que os sócios têm investido na empresa — exigiria o balanço patrimonial, que não está nos insumos e é outro projeto. O que responde à pergunta real ("o investimento se paga?") é o ROI. Decisão tomada com o Pedro em 09/ago.


2. De onde vem cada número

Só usamos fonte primária. Onde não havia, está marcado.

Dado Fonte Como chega
Reservas, receita, canal API Cloudbeds + banco D1 57.007 reservas baixadas
Data em que a reserva foi feita API Cloudbeds (dateCreated) 23.118 reservas de 2026
Gasto de mídia diário Planilha viva Meta + Google por dia, por anúncio
Estrutura de custo (Argentina) DRE dos 3 hotéis mês a mês, em dólar
Repeat rate (quem volta) D1 audience_profiles 102.728 perfis
Comissões e gateway Estudo de paridade, validado com Dani —

Sem fonte ainda: DRE do Brasil · investimento em TikTok · moeda das contas de anúncio.


3. As sete decisões que moldam o resultado

Decisão 1 — A moeda vem da propriedade, não do banco

O banco marca BRL para as cinco propriedades, inclusive as três de Buenos Aires, que faturam em dólar. Quem somasse por essa coluna teria um total que fecha bonito e mistura real com dólar.

Regra: a moeda é derivada do property_id. Ipanema e Copa em BRL; BA Centro, Obelisco e Suites BA em USD. Conversão para dólar a US$ 1 = R$ 5,40 (mesma taxa do estudo de paridade, editável em premissas.json).

Decisão 2 — Cancelada não é venda

Em 2026, as reservas canceladas somam R$ 10,05 milhões — mais do que as concluídas (R$ 7,25 milhões). Três reservas canceladas carregam R$ 6,6 milhões sozinhas, e a maior delas é um tipo de quarto fictício ("Voluntarios (Last Minute Non-Refundable)", R$ 4,6 milhões) usado como lançamento interno.

Sem esse corte, o ROAS de fevereiro no Brasil aparecia como 59x. Um número desses manda triplicar a verba de anúncio em cima de reserva que nunca existiu.

Regra: entram checked_out, checked_in, confirmed e no_show (o no-show costuma ter a primeira noite cobrada, então há receita real). Saem canceled, not_confirmed e created. Total descartado: 10.553 reservas, R$ 10,36 milhões.

Decisão 3 — Nem toda reserva "direta" foi comprada com anúncio

O denominador do CAC é a decisão mais consequente do cálculo inteiro. As 91 fontes de reserva do Cloudbeds foram classificadas em seis baldes:

Balde Exemplos Entra no CAC? Por quê
Site Website/Booking Engine ✅ alvo direto da mídia
Central de vendas Central 9, MSR Central, Recovery 1 ✅ o lead costuma vir da mídia
OTA Booking.com, Expedia, Hostelworld ❌ a plataforma gerou, não nosso anúncio
Recepção / walk-in Recepción Francisco, Walk-In ❌ captação física, mídia não alcança
Extensão Extensión Francisco, EXT Direta ❌ hóspede já hospedado prorrogando
Interno HOUSE USE, DAY USE ❌ não é venda

A extensão é a categoria que costuma passar batido. É o hóspede que já está no hotel e resolve ficar mais noites — a mídia não trouxe essa reserva, ela já estava dentro do prédio. Contar extensão no denominador barateia o CAC artificialmente.

O classificador tem 28 testes automáticos (scripts/canais.py). Rodar antes de confiar em qualquer número.

Decisão 4 — Dois calendários, porque são duas perguntas

Uma reserva feita em março para hospedagem em julho conta em qual mês?

Os dois são calculados. O dashboard alterna entre eles. O descolamento entre as duas leituras é, por si só, informação: mostra com quanta antecedência as pessoas reservam.

Isso exigiu buscar a data real da reserva na API da Cloudbeds — o banco só guarda o check-in. Armadilha: o filtro por data de criação não se chama createdFrom. Esse parâmetro existe, é aceito sem reclamar, e devolve a base inteira (78.963 em vez de 78). O certo é resultsFrom.

Decisão 4.5 — As contas de anúncio cobram na moeda trocada

O Pedro conferiu no gerenciador do Meta: as contas do Brasil gastam em dólar e as da Argentina gastam em real. O contrário do que o nome sugere — "El Misti USD" é a conta do Brasil e de fato cobra em dólar; "El Misti BA 2 Ads" é a Argentina e cobra em real.

Impacto: antes da correção, o CAC argentino aparecia como US$ 89,36 e a operação de Buenos Aires parecia ineficiente. O número real é US$ 16,55. Era erro de leitura, não de operação — 5,4x de diferença, o câmbio inteiro.

Se a moeda não estiver declarada em premissas.json, o gasto daquela conta é ignorado com aviso, em vez de somado às cegas. Faltar dado é recuperável; somar moedas diferentes produz um número que ninguém consegue rastrear depois.

Decisão 5 — Mídia é por país; propriedade recebe por rateio

As contas de anúncio são por país ("El Misti USD" = Brasil, "El Misti BA 2" = Argentina). Não existe gasto por casa na origem.

Regra: o gasto do país é rateado entre as propriedades na proporção das reservas diretas digitais de cada uma, mês a mês.

Descartado: ratear por receita favoreceria a casa de ticket alto mesmo sem mídia. Ratear igualmente ignoraria que Ipanema faz 60x o volume da Copa.

Consequência que precisa ficar clara: esse rateio faz o CAC de mídia por casa sair quase idêntico dentro do mesmo país. É matemática, não coincidência — gasto × (reservas_casa ÷ reservas_país) ÷ reservas_casa simplifica para gasto ÷ reservas_país, e a casa desaparece da conta.

Ou seja: o CAC de mídia por propriedade não carrega informação nova. O que separa de verdade uma casa da outra é o CAC com estrutura (que vem do DRE real de cada uma) e o ROAS/ROI/LTV, que dependem do ticket real. Só haveria CAC de mídia por casa se as campanhas fossem separadas por hotel na origem — hoje não são.

Decisão 6 — As fórmulas, em português

CAC = gasto de mídia do mês ÷ reservas diretas digitais do mês

ROAS = receita das reservas diretas digitais ÷ gasto de mídia (É a linguagem nativa do Meta e do Google — serve para bater o olho com o gerenciador.)

ROI = (valor da reserva − custo de trazê-la) ÷ custo de trazê-la

LTV = ticket médio da reserva × margem do canal × quantas vezes o hóspede volta

Decisão 7 — Denominador zero não vira zero

Quando não houve gasto de mídia, ou não houve reserva, a métrica fica "—", nunca zero. Zero significa "medimos e deu zero". Vazio significa "não dá para medir". Trocar um pelo outro é como um dashboard mente sem errar nenhuma conta.


4. Os resultados

2026 consolidado (jan–ago), calendário do mês da reserva

Tudo em dólar. CAC em três camadas: só anúncio · + equipe de marketing · + comissão do time. As duas últimas só existem onde há DRE — hoje, as três casas da Argentina.

Recorte Gasto mídia Reservas diretas CAC anúncio + equipe + comissão ROAS ROI direto LTV direto LTV OTA
TOTAL 103.518 3.794 US$ 27,28 — — 8,44x 574% 288,62 173,37
Brasil 68.983 1.707 US$ 40,41 — — 6,44x 440% 367,19 210,75
Argentina 34.535 2.087 US$ 16,55 48 64 12,44x 806% 236,31 150,52
BA Obelisco 16.914 1.057 16,00 — — 14,98x 934% 274,39 200,15
Suites BA 7.783 457 17,03 — — 13,13x 842% 249,35 106,97
BA Centro 9.839 573 17,17 — — 7,53x 514% 153,07 141,88
Suites Copa 1.095 28 39,11 — — 8,48x 576% 508,25 198,39
Ipanema 67.888 1.679 40,43 — — 6,41x 437% 334,11 195,35

Como ler o CAC completo da Argentina: US$ 16,55 de anúncio viram US$ 64 por reserva quando se soma a equipe de marketing e a comissão do time. Ainda assim, contra um ticket direto médio de US$ 206, isso é 31% do valor da reserva — mais caro que os 16% da comissão da OTA, mas com um ticket que já é maior no canal direto e sem comissão recorrente nas próximas estadias.

O achado que mais importa

O Brasil fez um teste de liga/desliga sem querer:

Mês Gasto Reservas diretas CAC ROAS
jan 29.003 218 133,04 2,70x
mar 7.547 242 31,19 8,89x
mai 3.880 216 17,96 12,50x
jul 4.126 327 12,62 16,34x

O investimento caiu 86% e as reservas diretas subiram 50%.

Isso é o indício mais concreto que já apareceu sobre a incrementalidade — o gap que está aberto desde junho. Sugere que boa parte da mídia brasileira não estava gerando reserva nova; estava se creditando por quem viria de qualquer jeito.

Não é prova. Julho é inverno no Rio, o mix de hóspede muda, e correlação não é causa. Mas é forte o suficiente para justificar um teste controlado de verdade.


5. No que não confiar (ainda)

Ressalva Impacto Como fechar
Incrementalidade segue em aberto O ROI do direto assume que a reserva é nova. Se a mídia só captura quem viria pela OTA, o ganho real é a comissão economizada, não o ticket inteiro Teste com/sem anúncio
DRE do Brasil não existe nos insumos As camadas "+ equipe" e "+ comissão" ficam vazias no Brasil. Os dois países não são comparáveis nessas colunas Planilha do Lulo
Mapeamento DRE → hotel deduzido pelo nome Se algum estiver trocado, o custo de estrutura está na casa errada Confirmação do Pedro
Moeda das contas de Google herdada por país O Google BR pesou US$ 4,7 mil no ano e o Google BA não teve gasto — risco pequeno, mas não conferido Ver no gerenciador
TikTok sem fonte Gasto subestimado se houver investimento lá Export do gerenciador
Câmbio fixo em R$ 5,40 Agora afeta os dois lados: a receita brasileira e o gasto argentino (que é cobrado em real) Taxa mensal em premissas.json
DRE argentino tem células não conferidas A Ede marca em fúcsia o que ainda vai revisar Conferir com ela
CAC de mídia por casa é artefato do rateio Comparar casas por essa coluna não diz nada — use ROAS, ROI e LTV Campanhas separadas por hotel

Por que meu CAC difere do estudo anterior

O estudo de jun/2026 chegou a US$ 9,38 (BR) e US$ 2,33 (AR) de mídia pura. Aqui deu US$ 40,41 e US$ 16,55. Não é contradição — é denominador e período diferentes. O estudo usou 12 meses móveis (jul/2025–jun/2026) e um denominador mais largo. Este cálculo usa 2026 corrido, só reservas válidas, e exclui extensões de estadia.

Os dois números respondem perguntas ligeiramente diferentes. Este é mais conservador, e a diferença está inteira nas decisões 2, 3 e 5 acima.


6. Como atualizar

cd "Empresas/El Misti/unit-economics"

python3 scripts/coleta_data_reserva.py 2026   # datas de reserva (API Cloudbeds)
python3 scripts/exporta_d1.py 2025            # receita e canal (D1)
python3 scripts/canais.py                     # testes do classificador
python3 scripts/calcula_metricas.py           # recalcula tudo

Para mudar uma premissa — câmbio, comissão, o que conta como reserva válida, o que entra no CAC — edite premissas.json e rode calcula_metricas.py de novo. Nenhum desses valores está escrito dentro do código.


Método construído pelo Time de TI a partir do estudo de paridade OTA vs Direto (Mesa mesa-224193d3, jun–jul/2026), do qual herda as premissas de comissão, gateway e repeat rate.