O relatório semanal do cliente, escrito por um agente toda segunda antes de você acordar

Monte um relatório semanal que um agente compila a partir do Shager: o que saiu, o que falhou, cliques por conta e por post e como cruzar com os leads do CRM.

Um agente consegue escrever o relatório semanal de distribuição de um cliente puxando três coisas do Shager: os posts publicados na semana e o resultado de cada um por conta, os cliques por conta e por post vindos de get_analytics e a lista de tudo o que falhou. Depois, ele cruza esses cliques com os leads do CRM do cliente usando o valor de utm_content que identifica cada conta. Rode isso de forma agendada, com uma chave só de leitura, e o relatório estará esperando numa pasta na segunda de manhã.

A parte que exige reflexão não é o código. É decidir o que o cliente realmente precisa ver e ser honesto sobre o que os números medem.

O que um relatório semanal de distribuição deve conter?

Quatro seções bastam. O resto fica para a revisão mensal.

  1. Entrega. Quantos posts saíram, para quantas contas e quais contas falharam. Os clientes raramente perguntam sobre isso até algo sumir, e aí é a única coisa que perguntam.
  2. Cliques por conta. Quais páginas, filiais ou canais mandaram gente para o site. É a seção que muda orçamentos.
  3. Cliques por post. Qual conteúdo funcionou, somando todas as contas.
  4. Ações. O que o cliente precisa fazer: reconectar uma conta, aprovar os rascunhos da próxima semana, enviar materiais que faltam.

Repare no que ficou de fora: alcance, impressões, curtidas. O Shager mede os cliques nos próprios links rastreáveis, por conta e por post. Ele não se apresenta como uma suíte de analytics de redes sociais, e o relatório não deve fingir que é.

Gráfico de barras: cliques nos links rastreáveis do Shager por conta, mostrando qual página trouxe tráfego.
O que o agente recebe de get_analytics. (Ilustração, não são dados reais)

As chamadas de dados

Para o workspace de um cliente, o agente roda esta sequência. Os nomes são das ferramentas MCP reais; os equivalentes REST estão no documento OpenAPI.

  1. list_workspaces para encontrar o workspace do cliente pelo nome.
  2. list_posts com status igual a PUBLISHED, e depois de novo com PARTIALLY_PUBLISHED e FAILED. O limit vai até 100.
  3. get_post para cada post da semana, para obter o estado por conta, as URLs publicadas e as mensagens de erro.
  4. get_analytics com from e to cobrindo a semana.
  5. list_channels, para associar os IDs dos canais a nomes de conta legíveis e identificar contas cujo status de conexão mudou.

A chamada de analytics via REST:

curl -s "https://app.shager.ai/api/v1/workspaces/ws_example/analytics?from=2026-09-14T00:00:00%2B03:00&to=2026-09-20T23:59:59%2B03:00" \
  -H "Authorization: Bearer $SHAGER_READ_KEY"

Dois detalhes dessa URL pegam muita gente. O + do offset precisa ser codificado como %2B numa query string, senão o servidor lê como espaço. E os limites da semana devem ser calculados no fuso horário do cliente, não no do servidor. Se from for omitido, get_analytics usa por padrão os últimos 30 dias, o que não é o que um relatório semanal quer.

Cliques não são leads, então cruze os dados

O Shager dá a cada conta o próprio link curto e as próprias tags UTM, com utm_content identificando a conta. É isso que torna o cruzamento possível. O CRM registra os leads com os valores de UTM capturados no formulário da landing page; o agente os associa às contagens de cliques por conta do Shager pelo mesmo utm_content.

A tabela resultante é o coração do relatório:

Conta Posts Cliques (Shager) Leads (CRM) Observação
Aurora Downtown 4 ... ...
Aurora Northside 4 ... ... precisa reconectar

As diferenças entre as colunas já são informação. Muitos cliques e nenhum lead é um problema de landing page ou de oferta, e não de distribuição. Nosso guia sobre atribuição de leads por conta cobre os campos do formulário e o mapeamento no CRM que tornam a coluna de leads confiável, e como medir os leads do conteúdo feito por agentes cobre o lado do agente.

Se você não tem acesso ao CRM, o relatório funciona mesmo só com os cliques. Deixe isso claro no cabeçalho do relatório. Um relatório que chama cliques de "resultados" é o jeito como as agências perdem a confiança do cliente um trimestre depois.

Rodando sem supervisão com o Claude Code

O Claude Code pode rodar de forma não interativa com claude -p, como descrito na documentação do modo headless. Isso transforma o relatório semanal num job do cron.

Primeiro, uma pasta de projeto para os relatórios, com um .mcp.json que lê a chave do ambiente. A documentação de MCP do Claude Code aceita expansão de ${VAR} nos cabeçalhos:

{
  "mcpServers": {
    "shager": {
      "type": "http",
      "url": "https://app.shager.ai/api/mcp",
      "headers": { "Authorization": "Bearer ${SHAGER_READ_KEY}" }
    }
  }
}

Depois, as instruções, salvas como skill, para que a lógica fique num arquivo e não numa linha do crontab. O Claude Code carrega as skills do projeto a partir de .claude/skills/<name>/SKILL.md, segundo a documentação de skills:

---
name: weekly-report
description: Compile the weekly distribution report for one client workspace from Shager. Use when asked for a weekly client report.
---

The argument is the client workspace name: $ARGUMENTS

1. Resolve the workspace with list_workspaces. Read its timezone.
2. Compute last Monday 00:00 to Sunday 23:59:59 in that timezone, with offsets.
3. Collect posts with list_posts (PUBLISHED, PARTIALLY_PUBLISHED, FAILED) and
   keep those published in the window. Call get_post for each.
4. Call get_analytics for the window. Map channel ids to names with list_channels.
5. If crm/<workspace>.csv exists, join leads on utm_content.
6. Write reports/<workspace>/<YYYY-MM-DD>.md with four sections: Delivery,
   Clicks by account, Clicks by post, Actions. Use tables. No adjectives about
   performance; numbers and one plain sentence per section.
7. Never call any tool that creates, schedules or cancels anything.

E o comando agendado, que pré-aprova só as ferramentas de leitura e a gravação de arquivos:

cd ~/agency-reports && claude -p "/weekly-report Aurora" \
  --allowedTools "mcp__shager__list_*,mcp__shager__get_*,mcp__shager__whoami,Write" \
  --output-format json > logs/aurora-$(date +%F).json

A sintaxe das regras de permissão com o prefixo mcp__<server>__ e um curinga no final está documentada na referência de permissões do Claude Code. Nada que esteja fora dessa lista será aprovado automaticamente numa execução sem supervisão.

Diagrama: um post vai para várias contas, e cada conta recebe seu próprio link curto e sua tag utm_content.
Os links rastreáveis mostram os cliques por conta. Para conversões, você precisa da sua ferramenta de análise ou do seu CRM. (Ilustração)

Por que uma chave só de leitura importa aqui

A skill diz ao modelo para não escrever. A chave torna isso impossível. Crie no painel de agentes uma chave separada, só com o escopo read, para os relatórios, e não a use em mais nada. Se essa chave vazar um dia, o pior que pode acontecer é alguém ler contagens de cliques. Explicamos o modelo completo de escopos em chaves de API, escopos e auditoria.

Cada chamada que o agente de relatórios faz também aparece no registro de auditoria desse painel, um bom jeito de confirmar, nas primeiras segundas-feiras, que ele chama o que você espera e nada mais.

Escrevendo a parte em texto

Deixe o agente escrever uma ou duas frases por seção, mas com limites. Sem regras, os modelos descrevem uma variação de 4% como "um aumento significativo". Minha instrução é direta: diga o número, compare com a semana anterior se houver esse dado e não diga nada sobre a causa a menos que os dados mostrem. Se a página de uma filial não teve nenhum clique porque a conexão expirou na terça, essa é uma causa que os dados mostram. "Cansaço do público" não é.

Perguntas frequentes

O agente pode enviar o relatório direto para o cliente?

Pode, se você der a ele uma ferramenta de e-mail, mas eu não faria isso no primeiro dia. Peça que ele grave o arquivo, revise algumas semanas de resultados e só depois automatize o envio. O relatório é a forma como o cliente enxerga o seu trabalho, e um número errado enviado automaticamente custa mais do que o tempo economizado.

O get_analytics inclui leads?

Não. Ele devolve os cliques nos links rastreáveis do Shager, por conta e por post, num intervalo de datas. Os leads vêm do CRM ou da ferramenta de formulários do cliente, associados pelo utm_content. O relatório deve manter as duas fontes visivelmente separadas.

Até quando o relatório pode olhar para trás?

get_analytics aceita qualquer from e to que você enviar, com padrão dos últimos 30 dias quando from é omitido. Para comparações mês a mês, rode a mesma skill com outra janela, em vez de guardar relatórios antigos como fonte da verdade.

Próximos passos

Se você ainda não tem uma chave, a página para agentes mostra como criar uma ou deixar um agente se cadastrar sozinho. Comece com um cliente, leia você mesmo os relatórios de três segundas-feiras e só então inclua os outros.

Experimente nas suas próprias contas.

Grátis durante o lançamento, sem cartão. Conecte, escreva uma vez, e o Shager publica e mede.