Métricas que importam pra clínica de odontologia (e que o site precisa medir)
Um dentista em Curitiba me chamou com frustração. “Investi R$ 3 mil em site + Local SEO e não vejo pacientes novos vindo”. Eu perguntei: “Quantos agendamentos você recebeu pelo site?”.
Ele não sabia. Ele tinha um site, mas zero tracking.
Gastou R$ 3 mil, não sabia se tava gerando leads ou não.
Essa é a realidade de 90% das clínicas. Site funciona (teoricamente), mas ninguém acompanha números. Ninguém sabe:
- Quantas pessoas visitam
- Quantas clicam em “agendar”
- Quantas de verdade agendam
- Quantas dessas consultas viram pacientes reais
Sem esses números, você tá navegando no escuro.
Vou te mostrar quais métricas realmente importam, benchmarks reais de clínicas, e como setup um dashboard simples em 2 horas.
As 5 métricas que importam
Não precisa de 50 KPIs. Precisa de 5 que você acompanha religiosamente:
1. Custo Por Lead (CPL)
Quanto você gasta (em marketing, site, etc) pra conseguir um contato de paciente potencial.
Fórmula: (Investimento total em marketing) / (Total de leads gerados no mês)
Exemplo: você investiu R$ 2.500 em site + Local SEO. Esse mês recebeu 10 agendamentos via site. CPL = R$ 2.500 / 10 = R$ 250 por agendamento.
Benchmark realista:
- Clínica pequena (startup): CPL R$ 150-400
- Clínica média: CPL R$ 100-200
- Clínica grande (marca consolidada): CPL R$ 50-100
Se seu CPL tá acima de R$ 400, algo tá errado (site mal feito, Local SEO ruim, ou mercado muito competitivo).
2. Ticket Médio
Quanto você fatura por paciente em média.
Fórmula: (Total faturado no mês) / (Total de pacientes atendidos)
Exemplo: você faturou R$ 36 mil, atendeu 40 pacientes. Ticket médio = R$ 36k / 40 = R$ 900 por paciente.
Benchmark realista:
- Clínica só limpeza/check-up: R$ 200-400
- Clínica geral (limpeza + restaurações + clareamento): R$ 600-1.200
- Clínica estética (implante, prótese, lente): R$ 1.500-4.000+
Dica: paciente novo geralmente é só consulta inicial (R$ 100-300). O ticket médio sobe quando faz tratamento. Então não espere R$ 1.500 de ticket pra paciente novo. Espere R$ 400 (consulta + radiografia + pequena restauração).
3. Taxa de Comparecimento (Show-up Rate)
Porcentagem de pacientes que efetivamente comparecem na consulta agendada.
Fórmula: (Total de consultados agendadas que tiveram paciente) / (Total de agendamentos marcados)
Exemplo: você marcou 25 agendamentos. 22 pacientes compareceram. 3 faltaram. Taxa de comparecimento = 22/25 = 88%.
Benchmark realista:
- Sem automação (só agenda papel): 70-80%
- Com lembretes via WhatsApp/SMS: 85-92%
- Com agendamento online + confirmação automática: 90-95%
Se sua taxa tá abaixo de 85%, faz automação de lembretes. Cada falta é dinheiro que você deixa de ganhar.
4. Taxa de Conversão: Site → Agendamento
Quantos visitantes do site viram agendamentos efetivos.
Fórmula: (Total de agendamentos criados via site) / (Total de visitantes do site no mês)
Exemplo: seu site recebeu 500 visitantes no mês. 18 agendaram. Taxa = 18/500 = 3,6%.
Benchmark realista:
- Site ruim (sem CTA claro, lento, feio): 0,5-1%
- Site mediano (tá bom, mas sem otimização local): 2-3%
- Site bem otimizado (Local SEO, mobile-first, CTA bom): 4-7%
Se sua taxa tá abaixo de 1%, algo tá muito errado com o site. Se tá acima de 5%, parabéns, você tá acima da média.
5. Taxa de Conversão: Agendamento → Consulta → Paciente Recorrente
Quantos de quem agendou virou paciente que voltou.
Essa é difícil de medir, mas é a mais importante.
Fórmula: (Total de pacientes que voltaram 2+ vezes) / (Total de pacientes novos)
Exemplo: você ganhou 20 pacientes novos. Desses, 15 voltaram. 5 sumiram. Taxa = 15/20 = 75%.
Benchmark realista:
- Clínica com atendimento ruim: 30-50%
- Clínica com atendimento bom: 60-80%
- Clínica com atendimento excelente + programa de retenção: 80-95%
Todo paciente que não volta é dinheiro deixado na mesa. Um paciente recorrente rende 3-5x mais que paciente novo (menos custo de aquisição, já conhece, recomenda amigos).
Tabela: Benchmarks por tipo de clínica
| Métrica | Clínica Pequena | Clínica Média | Clínica Grande |
|---|---|---|---|
| CPL | R$ 200-400 | R$ 100-200 | R$ 50-100 |
| Ticket médio | R$ 400-800 | R$ 800-1.500 | R$ 1.200-2.500+ |
| Taxa de comparecimento | 80-85% | 85-90% | 90-95% |
| Taxa de conversão (site → agendamento) | 2-3% | 3-5% | 5-8% |
| Retenção de pacientes | 60-70% | 70-85% | 85-95% |
Como medir com ferramentas leves
Não precisa de Google Analytics (pesado, pede consentimento). Tem alternativas que são:
- Lightweight (não trava o site)
- Privacy-first (sem LGPD headache)
- Baratas
Opção 1: Plausible
Plausible é analytics focado em privacidade.
Custo: R$ 80-150/mês Setup: 2 minutos (copia 1 linha de JS) Dados: pageviews, origem, conversões, tempo no site
<script defer data-domain="clinica.com" src="https://plausible.io/js/script.js"></script>
Pronto. Começa a registrar visitantes.
Vantagem: relatório bonito, dados em tempo real, Brasilnope completo. Desvantagem: não mostra dados de clientes específicos (privacidade, mesmo).
Opção 2: Umami
Umami é open-source, você roda no próprio servidor.
Custo: R$ 0 (self-hosted) ou R$ 50/mês (cloud) Setup: 5 minutos (rodar Docker container ou acoplar JS) Dados: pageviews, origem, eventos customizados, funis
<script async src="https://seu-umami.com/script.js" data-website-id="XXXXX"></script>
Vantagem: barato, dados seus, customizável, eventos. Desvantagem: setup técnico (se self-hosted), menos intuitivo que Plausible.
Opção 3: Supabase + evento custom
Se você já usa Supabase, é grátis usar Supabase como banco de dados de eventos.
// src/lib/tracking.ts
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(URL, KEY);
export async function trackEvent(
eventName: string,
metadata: Record<string, any>
) {
await supabase.from('events').insert({
event_name: eventName,
metadata,
timestamp: new Date().toISOString(),
user_agent: navigator.userAgent
});
}
No site, rastreia eventos:
// Quando paciente clica em "agendar"
trackEvent('click_booking_button', {
procedureType: 'implante',
source: 'homepage'
});
// Quando paciente enche formulário
trackEvent('form_submitted', {
patientName: 'João',
procedureType: 'limpeza'
});
// Quando agendamento é criado
trackEvent('appointment_created', {
procedureType: 'protese',
appointmentDate: new Date()
});
Depois cria dashboard em Supabase:
-- Visualizar agendamentos por semana
SELECT
date_trunc('week', (metadata->>'appointmentDate')::timestamp) as week,
count(*) as agendamentos
FROM events
WHERE event_name = 'appointment_created'
GROUP BY week
ORDER BY week DESC;
-- Taxa de conversão: cliques → agendamentos
WITH cliques AS (
SELECT count(*) as total FROM events
WHERE event_name = 'click_booking_button'
),
agendamentos AS (
SELECT count(*) as total FROM events
WHERE event_name = 'appointment_created'
)
SELECT
(agendamentos.total::float / cliques.total * 100)::int as taxa_conversao_pct
FROM cliques, agendamentos;
Vantagem: grátis, dados teus, insights detalhados. Desvantagem: requer SQL básico, sem UI visual pronta.
Minha recomendação: Plausible + Supabase
Plausible pra métricas gerais de tráfego (visitantes, origem, tempo no site).
Supabase pra eventos específicos de conversão (cliques em agendamento, formulários submetidos, agendamentos criados).
Combinado: você tá vendo tudo que importa.
Custo: R$ 150/mês (Plausible) + R$ 0 (Supabase free tier).
Exemplo prático: Acompanhando ROI de um site
Você investiu R$ 2.500 em site + Local SEO em maio.
Agosto (3 meses depois):
- Visitantes/mês: 250
- Taxa de conversão: 4% (10 agendamentos)
- Taxa de comparecimento: 90% (9 consultas)
- Ticket médio: R$ 800
- Receita gerada: 9 x R$ 800 = R$ 7.200/mês
ROI:
- Investimento: R$ 2.500 (uma vez)
- Receita em 3 meses: R$ 7.200 x 3 = R$ 21.600
- Lucro: R$ 21.600 - R$ 2.500 = R$ 19.100
- ROI: 760%
Claro, isso é cenário otimista. Mais realista:
- Visitantes/mês: 150
- Taxa de conversão: 2,5% (3-4 agendamentos)
- Taxa de comparecimento: 85% (3 consultas)
- Ticket médio: R$ 600
- Receita gerada: 3 x R$ 600 = R$ 1.800/mês
ROI:
- Investimento: R$ 2.500
- Receita em 3 meses: R$ 1.800 x 3 = R$ 5.400
- Lucro: R$ 5.400 - R$ 2.500 = R$ 2.900
- ROI: 116%
Ainda tá excelente (a maioria dos investimentos pra clínica não retorna 100%).
Dashboard simples em Supabase
Se quer algo pronto, cria uma view no Supabase que mostra o mês atual:
CREATE VIEW dashboard_clinica AS
SELECT
date_trunc('month', created_at)::date as mes,
count(CASE WHEN status = 'attended' THEN 1 END) as pacientes_atendidos,
count(CASE WHEN status = 'no_show' THEN 1 END) as faltas,
count(CASE WHEN status = 'attended' THEN 1 END)::float / count(*) as taxa_comparecimento,
avg((amount)::numeric) as ticket_medio,
sum(amount) as receita_total,
count(DISTINCT patient_id) as pacientes_unicos
FROM appointments
WHERE created_at >= date_trunc('month', current_date)
GROUP BY mes;
Depois cria uma página Astro que lê esse view:
---
// src/pages/dashboard.astro
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
import.meta.env.PUBLIC_SUPABASE_URL,
import.meta.env.SUPABASE_SERVICE_ROLE_KEY
);
const { data: dashboard } = await supabase
.from('dashboard_clinica')
.select('*')
.single();
---
<html>
<body>
<div class="dashboard">
<h1>Dashboard Clínica - {dashboard.mes}</h1>
<div class="card">
<h3>Pacientes Atendidos</h3>
<p class="number">{dashboard.pacientes_atendidos}</p>
</div>
<div class="card">
<h3>Taxa de Comparecimento</h3>
<p class="number">{(dashboard.taxa_comparecimento * 100).toFixed(1)}%</p>
</div>
<div class="card">
<h3>Ticket Médio</h3>
<p class="number">R$ {dashboard.ticket_medio.toFixed(2)}</p>
</div>
<div class="card">
<h3>Receita Total</h3>
<p class="number">R$ {dashboard.receita_total.toFixed(2)}</p>
</div>
</div>
</body>
</html>
<style>
.dashboard {
padding: 2rem;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 2rem;
}
.card {
background: white;
border: 1px solid #eee;
padding: 1.5rem;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.number {
font-size: 2rem;
font-weight: bold;
color: #2563eb;
margin: 0.5rem 0;
}
</style>
Resultado: dashboard que mostra números atualizados em tempo real.
Checklist: implementar tracking em 2 horas
- Escolher ferramenta: Plausible ou Umami
- Copiar snippet JS no site
- Criar tabela
eventsno Supabase (eventName, metadata, timestamp) - Rastrear 3 eventos: click_booking, form_submit, appointment_created
- Teste: clicar botão agendamento, ver evento no dashboard
- Criar SQL query pro CPL, taxa de conversão, ticket médio
- Setup página protegida com dashboard
- Acompanhar números semana que vem
Leia também: Agendamento online pra clínica em Astro + Supabase | Local SEO pra clínica | Quanto custa um sistema web
Conclusão
Métricas não são pra MBA, são pra você ganhar mais dinheiro.
Se você sabe que tem CPL de R$ 250 e ticket médio de R$ 800, sabe que cada paciente novo que vem pelo site lucra R$ 550 (após amortizar o site em 6 meses).
Se você sabe que taxa de comparecimento tá em 85%, sabe que precisa automação de lembretes (pode ganhar 5% de comparecimento = 10-20 pacientes/ano).
Se você sabe que taxa de conversão (site → agendamento) é 1%, sabe que site precisa melhorar urgente.
Acompanha essas 5 métricas. Semana que vem você tá vendo padrões. Mês que vem você tá tomando decisão baseada em data, não chute.
Comece agora. Instala Plausible, liga tracking. Segunda-feira que vem você tá com números na mão.