No fim destes seis passos você tem uma planilha que responde, cliente por cliente, quanto custou atender aquele contrato no mês passado e qual linha comeu a margem. A contagem de artigos publicados vem do próprio WordPress de cada cliente, sem ninguém contar à mão, e o resto sai de um registro de quatro campos que a equipe preenche numa linha. As fórmulas abaixo estão na grafia do Google Sheets em português; no Excel e no LibreOffice mudam só os nomes.
Conte contas conectadas, não clientes
A primeira aba tem uma linha por conta de rede social conectada, não por cliente. Um cliente com um perfil comercial do Instagram, uma Página do Facebook e um canal do Telegram ocupa três linhas, e é essa multiplicação que a planilha precisa ver desde o começo. O trabalho recorrente de uma agência não gruda no contrato: gruda na conexão, porque é a conexão que expira, que pede reautorização e que volta a exigir atenção depois de meses funcionando sozinha.
Quatro colunas bastam nessa aba: o cliente, a conta conectada, a plataforma e o valor mensal que o contrato daquele cliente paga. O valor se repete nas três linhas do mesmo cliente, e isso é de propósito: você vai dividir a mensalidade pelas conexões mais adiante, e a repetição deixa a divisão visível em vez de escondida dentro de uma fórmula.
Ninguém precisa economizar linha aqui. O Google documenta o teto de uma planilha em 20 milhões de células ou 100 MB para arquivos criados no Sheets ou convertidos para ele, então uma carteira de cem clientes com cinco conexões cada não encosta no limite da ferramenta em cenário nenhum. O gargalo é a digitação, e é por isso que o passo seguinte existe.
Se a sua planilha atual é um .xlsx que você vai converter, olhe antes as células de texto longo: na conversão de Excel para Sheets, o Google descarta qualquer célula com mais de 50 mil caracteres. Quem tem histórico de atendimento colado dentro de uma única célula perde exatamente esse histórico, em silêncio, e descobre semanas depois.
Puxe o volume publicado direto do WordPress
Para saber quantos artigos um cliente publicou em agosto, você não precisa abrir o painel dele nem pedir o número para a redação. A REST API do WordPress devolve essa contagem em um cabeçalho de resposta, e uma requisição resolve:
curl -sI "https://siteDoCliente.com.br/wp-json/wp/v2/posts?per_page=1&after=2026-08-01T00:00:00&before=2026-09-01T00:00:00"
A resposta traz x-wp-total com o total de registros da coleção e x-wp-totalpages com o total de páginas. Rodando isso agora contra este blog, com o intervalo de setembro, o cabeçalho volta com x-wp-total: 24. O corpo da resposta não interessa: você pediu um post por página só para o WordPress ter que contar a coleção inteira e devolver o resultado no cabeçalho.
Existe um caminho errado que parece óbvio, que é listar todos os posts e contar as linhas. Ele bate no teto de paginação: per_page aceita de 1 a 100, e pedir mais devolve 400 com a mensagem per_page precisa estar entre 1 (inclusivo) e 100 (inclusivo). Uma carteira de vinte clientes com dois anos de arquivo viraria centenas de requisições paginadas para chegar a um número que o cabeçalho entrega de graça.
Quando esse passo falha, falha de dois jeitos. O primeiro é tentar apontar uma célula da planilha direto para o endereço: a função IMPORTDATA aceita apenas arquivos em formato .csv ou .tsv, então um endpoint que devolve JSON não entra por ali, e nenhuma fórmula nativa lê cabeçalho HTTP. Rode o curl por fora e cole os números, ou peça ao seu dev um script que gere um CSV com uma linha por cliente.
O segundo é o cabeçalho voltar vazio em ferramentas que rodam no navegador. Esse caso tem história documentada: o pedido para expor os cabeçalhos de paginação em requisições de outra origem foi aberto como bug no repositório da WP REST API em 29 de outubro de 2014, porque sem Access-Control-Expose-Headers o navegador esconde X-WP-Total do código JavaScript. Hoje o núcleo do WordPress expõe X-WP-Total, X-WP-TotalPages e Link por padrão. Se o cabeçalho não chega, a suspeita cai num plugin de segurança, num proxy ou num CDN reescrevendo a resposta no caminho.
Registre a ocorrência no dia em que ela acontece
A segunda aba é um diário, e é a parte da planilha que decide se ela vale algo. Cada vez que alguém precisa voltar a uma conta que já estava funcionando, entra uma linha com quatro campos:
- a data, no formato que a sua planilha reconhece como data
- a conta conectada, escrita exatamente como aparece na primeira aba
- o motivo em três palavras, nunca mais que isso
- o tempo gasto, em minutos
As três palavras do motivo existem para a coluna virar somável. “Reautorizar Instagram cliente” repetido ao longo do ano é um padrão que aparece em qualquer soma condicional; “tive que entrar na conta porque o acesso caiu de novo” é relato, e relato não agrupa.
Boa parte dessas linhas tem prazo conhecido antes de acontecer. A Meta documenta que o token de acesso de longa duração vale 60 dias, que a renovação exige um token com pelo menos 24 horas de vida e ainda válido, e que um token que passa 60 dias sem renovação expira e não pode mais ser renovado. Cada conta conectada carrega esse relógio. Quando ele vence sem que ninguém tenha renovado, a linha do diário deixa de ser de renovação e passa a ser de reconexão completa, que custa mais e às vezes depende do cliente do outro lado do telefone para autorizar.
Se ninguém na equipe registrou nada até hoje, esse passo não falha: ele demora. Comece com trinta dias de diário antes de acreditar em qualquer média, e trate a aba vazia como resultado. Carteira sem registro de ocorrência continua tendo ocorrência, só com o custo delas saindo da margem sem aparecer em lugar nenhum. É o mesmo raciocínio que sustenta a conta de custo de uma carteira de vinte clientes, e a planilha transforma aquele raciocínio em número seu.
Converta minuto em dinheiro com um valor por hora só
Na aba de fechamento, a primeira célula útil guarda um número: quanto custa uma hora da pessoa que atende essas contas. Um número, uma célula, e todas as fórmulas apontando para ela. A tentação é escrever o valor dentro de cada linha, e ela cobra o preço no dia em que o custo da equipe muda: com a célula única, você corrige um campo e a carteira inteira reprecifica.
Com o diário preenchido, o custo de ocorrência de cada conta é uma soma condicional. No Sheets em português, a função é SOMASES(intervalo_da_soma; intervalo_de_criterios1; criterio1), e a fórmula soma os minutos daquela conta antes de converter para hora:
=SOMASES(ocorrencias!D:D; ocorrencias!B:B; B2) / 60 * $B$1
O erro comum nesse passo mora no valor por hora, não na fórmula. Salário dividido por horas do mês devolve um número indefensável numa reunião, porque deixa de fora encargo, férias, ferramenta, hora de gestão e o tempo em que a pessoa está disponível sem estar produzindo. Não existe multiplicador padrão para corrigir isso: a sua contabilidade tem o número real e ele muda com o regime da empresa. A planilha exige duas coisas, que o valor esteja em uma célula só e que alguém saiba dizer de onde ele veio.
Quando o tempo não foi registrado em minutos e você só tem a contagem de ocorrências, multiplique a contagem por um tempo fixo por tipo de ocorrência e siga. O número piora e continua auditável. Pinte essa coluna de outra cor e escreva “estimado” no cabeçalho: em três meses ninguém lembra qual coluna era medida e qual era palpite, e uma planilha que mistura as duas sem marcar vira argumento contra você na hora da renovação.
Rateie o que a ferramenta não cobra por cliente
Quase toda agência paga alguma coisa mensal que atende a carteira toda: hospedagem, licença de plugin, ferramenta de agendamento, armazenamento. Esse custo não tem dono, e a decisão de como reparti-lo muda qual cliente parece dar lucro.
Divida pelo número de contas conectadas, não pelo número de clientes. A diferença aparece na hora: o cliente com uma conexão absorve uma fatia, o cliente com quatro absorve quatro, e é o segundo que de fato consome mais da ferramenta. Dividir por cliente devolve o resultado oposto ao real e favorece exatamente o contrato que mais dá trabalho.
Se a ferramenta é cobrada por usuário, e não por site ou por conta, o rateio muda de base: divida pelas pessoas que operam e distribua pela carteira de cada uma. Nos dois casos, escreva numa célula ao lado qual base você usou. Rateio é escolha, não medição, e uma planilha que apresenta escolha como medição perde a discussão no primeiro cliente que pedir para ver a conta. Na hora de virar preço, a faixa por porte de cliente parte justamente daqui.
Verifique a planilha contra algo que não seja ela mesma
Três conferências, na ordem. A primeira soma os minutos de todo o diário no mês e divide por 60: se o total passar das horas que aquela pessoa realmente trabalhou no período, o diário está contando duas vezes, em geral porque a mesma ocorrência entrou pela mão de quem tentou resolver e de quem resolveu. A segunda pega um cliente e roda o curl do passo 2 com o mesmo intervalo de datas usado na planilha. Se o x-wp-total não bater com o que a planilha diz, a diferença quase sempre é fuso horário na borda do mês, rascunho contado como publicação, ou um tipo de conteúdo que não é post.
A terceira cria a coluna de margem, com a mensalidade do cliente menos o custo de ocorrência menos o rateio, ordena do menor para o maior e lê as três primeiras linhas. Se a primeira for um cliente que a equipe considerava tranquilo, a planilha acabou de pagar o trabalho de montá-la.
Boa parte das linhas do diário existe porque alguém precisa renovar acesso na mão antes que o relógio de 60 dias vire. É o tipo de linha que dá para tirar da planilha em vez de administrar: o Post Ping renova o acesso à Meta automaticamente e conecta a conta pelo login oficial, sem ninguém gerar token nem copiar ID. Ativar mais um cliente também passa a custar alguns minutos, com o mesmo fluxo atendendo dez ou cem blogs. O diário não zera: cliente que troca de senha, Página que perde permissão e conta que muda de gestor continuam gerando linha, e é bom que continuem aparecendo. Se a sua carteira já está nesse tamanho, a página para agências mostra como o desenho fica em escala.
Feche a primeira rodada assim: escolha dois clientes, um que você acha lucrativo e um que você acha problemático, e leia as duas linhas campo por campo contra o contrato e contra o x-wp-total do mês. Se os dois números fizerem sentido para quem atende aqueles clientes no dia a dia, a planilha está pronta para rodar sozinha no fechamento do mês que vem. Se algum dos dois surpreender a equipe, não conserte a planilha: releia o diário daquele cliente linha por linha, porque o dado que surpreende costuma estar certo.
