Como automatizar relatórios com Claude e Supabase: o banco calcula, a IA narra (com o prompt completo)

Avatar de Lucas Cunegatto
11 min de leitura
Fluxo de relatório automático com Claude e Supabase: agenda no n8n, função SQL devolve JSON, checagem de dados completos, Claude narra, entrega no WhatsApp, rastro guardado

Resposta direta: automatizar relatórios com Claude e Supabase é fazer o banco calcular e a IA narrar. O n8n dispara no horário (Schedule Trigger), chama uma função SQL no Supabase que devolve os números já fechados (total, variação contra o período anterior, top e bottom), manda esse JSON ao Claude com um prompt que proíbe recalcular e pede um texto curto com o que mudou, por que importa e o que fazer, e entrega no WhatsApp ou por e-mail. A IA nunca soma linha; ela lê totais. É essa divisão que faz o relatório sair todo dia sem erro de conta. Custa centavos por relatório em API e o prompt está no fim deste texto.

Este guia é para quem abre planilha toda segunda para montar o mesmo relatório, ou paga alguém para isso. Ele cobre o princípio que evita o erro clássico (IA fazendo conta), a arquitetura, o passo a passo no n8n, dois relatórios que rodam na WW Mídia, o prompt completo e onde esse tipo de automação quebra.

O princípio: o banco calcula, a IA narra

Modelo de linguagem é bom em ler números e escrever sobre eles, e ruim em produzir números a partir de linhas cruas: soma errado, arredonda diferente, inventa uma variação plausível. Uma vez mandamos ao ChatGPT uma página com os cases da agência e ele refez as contas e achou dois furos nossos; foi útil como revisão e mostra o ponto: modelo confere aritmética, mas você não quer que ele seja a fonte dela.

Então a regra do projeto é uma só: todo número que aparece no relatório vem de uma consulta SQL, e o prompt proíbe a IA de calcular. O Supabase é PostgreSQL; uma função SQL devolve um JSON pronto (totais, variações, listas ordenadas), o n8n chama essa função e entrega o JSON ao Claude. O Claude recebe fatos e escreve três parágrafos. Se um número estiver errado, o erro está na função, que é testável, e não numa frase.

Arquitetura em cinco peças

  1. Dados no Supabase. Tabelas alimentadas pelos sistemas de origem (CRM, planilha, API de anúncios, WhatsApp). O que não está no banco não entra no relatório.
  2. Função SQL por relatório. Uma função relatorio_semanal(data_inicio, data_fim) que devolve JSON: totais do período, mesmos totais do período anterior, variação percentual calculada no SQL, top 5 e bottom 5 de alguma dimensão, contagem de registros considerados.
  3. n8n. Schedule Trigger no horário, nó Supabase ou HTTP chamando a função (via RPC do PostgREST), nó do Claude, nó de envio.
  4. Claude. Prompt de sistema fixo (abaixo) mais o JSON do período. Saída em texto para WhatsApp ou, quando o relatório vai por e-mail com tabela, saída estruturada em campos (resumo, destaques, alertas, ações) que o n8n formata.
  5. Entrega. Evolution API para grupo de WhatsApp da equipe (sendText em um JID de grupo), e-mail, ou linha nova numa planilha que o time já abre.

Passo a passo no n8n

1. Escreva o relatório à mão uma vez

Antes de automatizar, escreva o relatório da semana passada como você gostaria de receber: quais números, em que ordem, o que você faria com eles. Esse texto vira o gabarito do prompt e a lista de campos da função SQL. Relatório automatizado sem um exemplo manual vira despejo de métricas.

2. Crie a função SQL que devolve tudo fechado

Uma função por relatório, com período como parâmetro, devolvendo um único JSON. Inclua sempre: período, período anterior, contagem de registros, e uma flag dados_completos (por exemplo, falso se a última carga do CRM tem mais de 24 horas). Teste a função direto no SQL Editor do Supabase com três períodos diferentes antes de ligar o fluxo.

3. Agende e chame

Schedule Trigger (segunda 7h, ou diário 8h). Nó HTTP Request chamando POST /rest/v1/rpc/relatorio_semanal com as datas calculadas num nó de código (semana passada, de segunda a domingo). Se dados_completos vier falso, o fluxo manda um aviso em vez do relatório: “relatório de hoje adiado, última carga do CRM foi às 14h de ontem”. Relatório com dado incompleto é pior que nenhum, porque alguém decide em cima dele.

4. Chame o Claude com o JSON

Prompt de sistema fixo e, na mensagem, o JSON inteiro. Peça no máximo 150 palavras para WhatsApp. Se o destino for e-mail com tabela, peça a saída em campos fixos (a API aceita um formato de resposta definido por esquema) e deixe a tabela ser montada pelo n8n a partir do JSON original, não pelo texto do modelo.

5. Envie e guarde

Envio pelo canal. Grave o texto gerado e o JSON de origem numa tabela relatorios_enviados, com data. Quando alguém perguntar “de onde saiu esse 12%”, a resposta está lá, com o JSON que gerou a frase.

Dois relatórios que rodam na WW Mídia

Origem dos leads, diário

O n8n cruza três fontes: a primeira mensagem de cada contato novo no WhatsApp (Evolution API), que traz um carimbo de origem no fim do texto quando o lead clicou num botão do site; o evento de clique no GA4; e o log do servidor, onde o ChatGPT chega com ?utm_source=chatgpt.com. O relatório diz quantos leads chegaram, de onde, e quais estão sem resposta há mais de um dia útil. Foi ele que mostrou que 10 dos 12 leads de sete semanas vinham do ChatGPT e que metade dos de agosto tinha ficado sem resposta. Sem o relatório, a hipótese era “indicação”; o log desmentiu. O detalhe está na página da WW e no post sobre o SDR autônomo que nasceu desse dado.

Campanhas, semanal, para um cliente de software

Para uma empresa de software de gestão, o relatório cruza gasto e resultados do Meta Ads, estágio dos contatos no HubSpot e sessões do GA4, tudo por utm_campaign. O número que decide é custo por lead qualificado (SQL), não custo por oportunidade, porque a oportunidade chega ao CRM de 5 a 10 dias depois do clique e um relatório de 7 dias sempre parece pior do que é. A função SQL calcula as duas janelas; o prompt explica ao leitor por que a de 7 dias está incompleta. Isso evita a decisão precipitada de pausar campanha boa.

O prompt de sistema (o que a busca pede)

Você escreve o relatório semanal de [área] da [empresa] para [quem lê: sócio, gerente comercial].

Você recebe um JSON com números já calculados pelo banco de dados. Regras:
1. Use somente os números do JSON. Não calcule, não some, não estime, não arredonde diferente do que veio.
2. Se um número necessário não estiver no JSON, escreva "não disponível" em vez de inferir.
3. Se "dados_completos" for falso, comece avisando e não conclua nada.
4. Estrutura, no máximo 150 palavras:
   - Linha 1: o número principal do período e a variação contra o período anterior, como vieram.
   - Parágrafo 2: as duas mudanças que mais importam (maior alta e maior queda), com o número de cada.
   - Parágrafo 3: uma ação recomendada, ligada a um número do JSON, ou "nenhuma ação esta semana" se nada saiu da faixa normal.
5. Tom direto, sem adjetivos, sem "excelente resultado", sem emoji. Números com separador brasileiro (1.250; 12,5%).
6. Não repita o nome de todas as métricas do JSON. Cite só as que entram nas regras 4.
7. Termine com a linha "Período: [data_inicio] a [data_fim]. Registros: [n]."

Troque os colchetes, cole no nó do Claude como prompt de sistema e mande o JSON na mensagem do usuário. O prompt é curto de propósito: o trabalho pesado ficou no SQL.

Quanto custa

Um relatório com JSON de 800 tokens, prompt de 300 e resposta de 200 consome cerca de 1.100 tokens de entrada e 200 de saída. Pelos preços da API da Anthropic em setembro de 2026 (tabela oficial: Claude Sonnet 5 a US$ 2 por milhão de tokens de entrada e US$ 10 de saída), isso dá menos de meio centavo de dólar por relatório. Um relatório diário o ano inteiro custa menos de US$ 2 em API. O Supabase tem plano gratuito que cobre tabelas desse tamanho e o n8n roda no seu servidor. O custo é escrever a função SQL certa, uma vez.

Onde esse tipo de automação quebra

  • IA fazendo conta. Mandar as linhas e pedir “resuma as vendas da semana”. O total sai diferente do dashboard e a confiança no relatório acaba na primeira semana. Função SQL, sempre.
  • Relatório em cima de carga incompleta. O CRM não sincronizou, o relatório saiu com metade das vendas e alguém pausou uma campanha. Flag dados_completos e regra de adiar.
  • Janela errada para a métrica. Métrica que chega com atraso (oportunidade, receita) medida em 7 dias sempre parece queda. Calcular a janela certa no SQL e explicar no prompt.
  • Despejo de métricas. 20 números por mensagem e ninguém lê. Um número principal, duas mudanças, uma ação.
  • Adjetivo. “Excelente semana” quando caiu 3%. O prompt proíbe adjetivo; o leitor julga.
  • Sem rastro. Ninguém sabe de onde saiu o número da mensagem de terça. Guardar JSON e texto de cada envio.

Quando não vale a pena

  • O dado não está num banco. Se o relatório é montado de prints e memória, primeiro o dado entra no Supabase; a IA não resolve coleta.
  • Ninguém age em cima. Relatório que ninguém lê não precisa de automação; precisa de um leitor ou de uma métrica que importe.
  • O relatório muda toda semana. Automação replica estrutura. Se cada semana a pergunta é outra, é análise, não relatório; aí o modelo ajuda de outro jeito, respondendo perguntas sobre o JSON, não gerando o texto fixo.

Perguntas frequentes

A IA pode calcular os números do relatório?

Não deve. Modelo de linguagem erra soma e inventa variação plausível. No desenho correto, uma função SQL no Supabase devolve totais, variações e rankings já calculados em JSON, e o prompt proíbe o Claude de calcular. A IA escreve sobre números; ela não os produz.

Qual é o prompt para automatizar relatórios com Claude?

Um prompt de sistema curto com sete regras: usar só os números do JSON, escrever “não disponível” para o que faltar, avisar se os dados estão incompletos, estrutura fixa (número principal e variação, duas mudanças, uma ação), sem adjetivo, formato brasileiro de número, e uma linha final com período e quantidade de registros. O prompt completo está neste artigo.

Como o n8n busca os dados no Supabase?

Chamando uma função SQL pela RPC do PostgREST (POST /rest/v1/rpc/nome_da_funcao) com as datas do período como parâmetros. A função devolve um único JSON com tudo fechado. Um nó de código calcula as datas (semana passada, de segunda a domingo) e o Schedule Trigger define o horário.

Quanto custa um relatório automático com Claude?

Menos de meio centavo de dólar por relatório em API, pelos preços de setembro de 2026 (Claude Sonnet 5: US$ 2 por milhão de tokens de entrada, US$ 10 de saída), porque o JSON de entrada tem algumas centenas de tokens e a resposta é curta. Um relatório diário durante um ano fica abaixo de US$ 2. O custo real é escrever a função SQL.

Como evitar que o relatório saia com dados incompletos?

A função SQL devolve uma flag dados_completos baseada na hora da última carga das fontes. Se for falsa, o fluxo envia um aviso de adiamento em vez do relatório, e o prompt tem a regra de não concluir nada quando a flag está falsa.

Dá para enviar o relatório no WhatsApp?

Sim, pela Evolution API com sendText para o JID de um grupo da equipe. Para WhatsApp, o prompt limita a 150 palavras e proíbe markdown, que não renderiza. Relatórios com tabela vão por e-mail, com a tabela montada pelo n8n a partir do JSON, não pelo texto do modelo.

Claude e Supabase servem para relatório de vendas B2B?

Sim, é o caso mais comum: pipeline, leads por origem, conversão por etapa, receita por vendedor. A regra é a mesma: as métricas com atraso (oportunidade, receita) precisam de janela própria no SQL, senão o relatório de 7 dias sempre parece queda e leva a decisão errada.

Resumo

  • O banco calcula, a IA narra. Função SQL devolve JSON fechado; o prompt proíbe conta.
  • Flag de dados completos, janela certa para métrica atrasada, rastro de cada envio.
  • Um número, duas mudanças, uma ação, sem adjetivo, 150 palavras.
  • Menos de meio centavo por relatório em API. O prompt está acima.

Leia também

Se quiser o relatório de origem dos leads ou o de campanhas rodando no seu WhatsApp, chame a WW Mídia. A conversa começa por qual decisão você toma toda semana e com qual número; o resto é SQL.

Quer isso rodando na sua empresa?

Fale comigo no WhatsApp e veja o que dá pra automatizar primeiro.

Avatar de Lucas Cunegatto

Sobre o autor

Fundador da WW Mídia. Monta automações B2B com n8n, Claude e WhatsApp: sistemas que funcionam de verdade.