Voltar ao blog
Negócios

Métricas que importam pra clínica de odontologia (e que o site precisa medir)

Por Flávio Emanuel · · 10 min de leitura

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étricaClínica PequenaClínica MédiaClínica Grande
CPLR$ 200-400R$ 100-200R$ 50-100
Ticket médioR$ 400-800R$ 800-1.500R$ 1.200-2.500+
Taxa de comparecimento80-85%85-90%90-95%
Taxa de conversão (site → agendamento)2-3%3-5%5-8%
Retenção de pacientes60-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 events no 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.

Próximo passo

Precisa de um dev que entrega de verdade?

Seja pra um projeto pontual, reforço no time, ou parceria de longo prazo. Vamos conversar.

Falar no WhatsApp

Respondo em até 2h durante horário comercial.