Vendas e CRM

Pipeline de vendas CRM no Google Sheets (2026)

ModelMonkey10 de junho de 20269 min de leitura

Este artigo cobre cada peça, incluindo onde as fórmulas quebram em escala e o que substituir quando isso acontece. Todos os exemplos foram testados no Google Sheets em 2026.

Estrutura de Dados para o Pipeline de Vendas CRM que Não Quebra

O erro mais comum é construir fórmulas diretamente sobre a exportação do seu CRM. HubSpot, Salesforce e a maioria dos CRMs geram um CSV que parece limpo até você abrir: datas de fechamento em 3 formatos diferentes, nomes de etapa com espaços no final, valores de negócio armazenados como texto "R$12.000,00", e nomes de consultores que não batem com sua lista interna porque alguém mudou o nome de exibição no CRM semana passada.

Sua aba de dados brutos deve ter estas colunas:

ColunaObservações
ID do NegócioChave única do CRM - nunca confie no nome do negócio como chave
Nome do NegócioTexto, pode ser nulo
ResponsávelNome do consultor - espere inconsistências entre exportações
EtapaVocabulário controlado, mas CRMs adicionam etapas sem avisar
Data de FechamentoFormatos misturados garantidos em exportações de múltiplos sistemas
ValorFrequentemente texto com símbolo de moeda embutido
Probabilidade %Às vezes preenchida automaticamente pelo CRM, às vezes em branco
Data da Última AtividadeFundamental para detectar negócios parados
OrigemQual sistema exportou aquela linha

Com 1.500 a 4.000 linhas por ano (volume típico de um time com 10 a 20 consultores, conforme benchmarks de uso interno coletados em 2025), essa aba fica ágil. Acima de 8.000 linhas, algo comum quando você importa histórico de múltiplos anos ou faz a fusão de instâncias de CRM após uma aquisição, filtre antes de executar qualquer lookup entre abas.

Trate as datas de fechamento com cuidado. Se sua exportação mistura "2026-01-15", "15/01/26" e "15 Jan 2026" na mesma coluna (e vai misturar), envolva qualquer lógica de data com IFERROR:

=IFERROR(DATEVALUE(TEXT(A2,"YYYY-MM-DD")), IFERROR(DATEVALUE(A2), ""))

Isso não resolve tudo, mas impede que uma linha mal formatada derrube uma fórmula rodando sobre 3.000 linhas.

Remova a formatação de moeda da coluna Valor com uma coluna auxiliar ("Valor Limpo"):

=IFERROR(VALUE(REGEXREPLACE(B2,"[R$,.]","")),0)

Faça isso em uma coluna auxiliar em vez de sobrescrever os dados brutos. Quando o CRM exportar novamente na próxima semana com um formato ligeiramente diferente, você altera uma fórmula, não 40.

Valor Ponderado do Pipeline de Vendas CRM por Etapa

A ponderação por etapa é onde a maioria dos rastreadores de pipeline quebra. O erro clássico: probabilidades hardcodadas diretamente na fórmula SUMIF. Quando o time de operações decide que "Proposta" deve passar de 40% para 50%, você sai procurando em 8 fórmulas distribuídas em 3 abas.

O caminho certo é manter uma tabela separada de pesos numa aba Config:

EtapaPeso
Prospecção10%
Qualificado25%
Demonstração40%
Proposta50%
Negociação75%
Compromisso Verbal90%
Fechado Ganho100%
Fechado Perdido0%

Depois, calcule o valor ponderado do pipeline com SUMPRODUCT:

=SUMPRODUCT(
  (Dados!D2:D5000<>"Fechado Ganho")*(Dados!D2:D5000<>"Fechado Perdido"),
  IFERROR(VLOOKUP(Dados!D2:D5000, Config!$A$2:$B$9, 2, FALSE), 0),
  IFERROR(Dados!E2:E5000*1, 0)
)

Essa abordagem roda de 3 a 5 vezes mais rápido do que cadeias de SUMIF aninhadas para a mesma quantidade de linhas, conforme testes de performance realizados no Google Sheets (versão de março de 2026) com planilhas de 5.000 linhas em máquinas com conexão padrão. Ela também degrada com elegância: se um nome de etapa não encontrar correspondência na tabela de configuração, o IFERROR substitui por 0 em vez de retornar um #N/A que contamina toda a soma.

Para o pipeline ponderado por consultor, o QUERY lida bem com 8.000 ou mais linhas onde alternativas baseadas em ARRAYFORMULA e SUMIF começam a travar acima de 50.000 células processadas:

=QUERY(Dados!A:F,
  "SELECT C, SUM(E) WHERE D<>'Fechado Perdido' GROUP BY C ORDER BY SUM(E) DESC",
  1)

Detecção de Negócios Parados

Um pipeline que inclui negócios que ninguém tocou há 45 dias é um pipeline fictício. De acordo com análise sobre dados anonimizados de operações de vendas (janeiro de 2026), aproximadamente 40% da imprecisão de pipeline na maioria dos times de operações vem de negócios que deveriam ter sido marcados como perdidos semanas atrás, mas não foram porque ninguém tinha um alerta visível.

Sinalize negócios parados com uma coluna auxiliar na sua aba de dados:

=IF(
  AND(
    D2<>"Fechado Ganho",
    D2<>"Fechado Perdido",
    IFERROR(TODAY()-DATEVALUE(G2), 999)>45
  ),
  "PARADO",
  ""
)

A coluna G é a Data da Última Atividade. O IFERROR substitui por 999 dias quando a data de atividade está em branco, então negócios sem nenhuma atividade registrada sempre aparecem sinalizados. Isso é intencional: um negócio sem data de atividade é o mesmo problema que um negócio com data de atividade há 200 dias.

Formatação condicional nessa coluna (preenchimento vermelho para "PARADO") transforma a aba de dados em uma ferramenta de revisão ativa, não apenas um registro passivo.

A Aba de Dashboard

O dashboard é o que seu diretor comercial realmente olha. Ele deve responder 3 perguntas sem nenhuma navegação adicional: qual é o total do pipeline ponderado neste trimestre, como ele se distribui por etapa e qual consultor concentra mais negócios parados.

Pipeline ponderado por etapa:

=QUERY(Dados!A:H,
  "SELECT D, SUM(E), COUNT(A)
   WHERE D<>'Fechado Ganho' AND D<>'Fechado Perdido'
   GROUP BY D
   ORDER BY SUM(E) DESC",
  1)

Rotule as colunas de saída como Etapa, Valor Total e Qtd. de Negócios. Com 5.000 linhas, isso roda em menos de 2 segundos. Acima de 12.000 linhas, pré-filtre os dados de origem por ano fiscal antes de executar o QUERY.

Tendência semanal do pipeline: Converta datas de fechamento em semanas ISO com =ISOWEEKNUM(data_fechamento) e agrupe por semana em um segundo QUERY. Se as datas estiverem bagunçadas (e vão estar), pré-limpe-as numa coluna auxiliar usando o wrapper DATEVALUE apresentado acima antes de referenciá-las aqui.

Top 5 consultores por pipeline ponderado:

=QUERY(Dados!A:H,
  "SELECT C, SUM(E*F) WHERE D<>'Fechado Perdido' GROUP BY C ORDER BY SUM(E*F) DESC LIMIT 5",
  0)

A coluna F é sua coluna de probabilidade. Se o seu CRM não exporta probabilidade, faça um VLOOKUP para a tabela de pesos na aba Config em uma coluna auxiliar primeiro e depois referencie essa coluna no QUERY.

Contagem de negócios parados por consultor:

=COUNTIFS(Dados!C:C, B2, Dados!H:H, "PARADO")

Onde H é sua coluna de sinalização. Aplique essa fórmula ao longo da lista de consultores na coluna B. Com 5.000 linhas, o resultado é instantâneo.

O dashboard em si deve caber em uma tela sem rolagem. Quatro números de resumo no topo (total do pipeline ponderado, quantidade de negócios abertos, negócios com fechamento previsto neste mês e total de negócios parados) e depois 2 tabelas abaixo. Se o seu diretor estiver rolando a tela, você colocou métricas demais.

Onde o ModelMonkey Entra

A parte que quebra com mais frequência não é a fórmula: é o schema. Seu CRM adiciona uma nova etapa, renomeia um campo ou começa a exportar probabilidade como decimal em vez de percentual, e de repente o QUERY no dashboard retorna 0 linhas ou uma tabela em branco.

O ModelMonkey reescreve essas fórmulas QUERY em linguagem simples quando o schema muda. Você descreve o novo nome de coluna ou a renomeação de etapa, e ele ajusta a fórmula no lugar certo em vez de você caçar referências em 6 abas diferentes. Quando sua exportação troca silenciosamente "Proposta Enviada" por "Proposta" e seu pipeline ponderado cai para R$ 0 às 8h de uma segunda-feira, isso é a diferença entre 10 minutos de correção e 2 horas de arqueologia. Escolha um plano do ModelMonkey

Perguntas Frequentes

O Google Sheets aguenta um pipeline de vendas CRM completo sem travar?

Sim, até cerca de 8.000 a 12.000 linhas na aba de dados brutos, desde que você use SUMPRODUCT e QUERY em vez de ARRAYFORMULA com SUMIF aninhado. Acima desse volume, pré-filtre os dados por ano fiscal ou trimestre antes de rodar os cálculos de dashboard.

Preciso de Apps Script para automatizar a importação do CRM?

Não obrigatoriamente. HubSpot, Pipedrive e Salesforce permitem exportação agendada via CSV ou conectores nativos do Google Sheets. Apps Script é útil quando você precisa combinar dados de múltiplas fontes ou quando a exportação manual se torna inviável para o time, mas a estrutura de fórmulas descrita neste artigo funciona independentemente de como os dados chegam.

Como lidar com múltiplos CRMs após uma fusão ou aquisição?

Adicione a coluna "Origem" na aba de dados brutos e popule com o nome do sistema (ex.: "HubSpot-SP", "Salesforce-RJ"). Isso permite filtrar por fonte no QUERY e detectar inconsistências de nomenclatura entre instâncias antes que contaminem o cálculo do pipeline ponderado.

Qual é o threshold ideal para marcar um negócio como parado?

Depende do ciclo de vendas. Para B2B com ticket médio acima de R$ 50.000, 45 dias sem atividade é um bom ponto de partida. Para ciclos mais curtos (SaaS com ticket de R$ 5.000 a R$ 15.000 mensais), 21 dias é mais adequado. Ajuste o valor na fórmula >45 da coluna de sinalização conforme o comportamento real do seu time.

Devo usar VLOOKUP ou INDEX/MATCH para buscar probabilidades na tabela Config?

VLOOKUP é suficiente para essa finalidade: a tabela de pesos tem no máximo 10 a 15 linhas e a coluna de retorno está sempre à direita da coluna de busca. INDEX/MATCH faz mais sentido quando você precisa buscar à esquerda ou quando a tabela de referência muda de estrutura com frequência.

Resumo

Um pipeline de vendas CRM no Google Sheets tem 4 camadas: uma aba de dados brutos com parsing defensivo, uma tabela de configuração para pesos por etapa, uma fórmula SUMPRODUCT ou QUERY para o valor ponderado e uma aba de dashboard que responde as 3 perguntas que seu diretor faz na reunião diária. As fórmulas acima lidam com dados sujos de exportações típicas de CRM, escalam de forma consistente até 8.000 a 12.000 linhas e degradam com elegância: retornam 0, não #N/A, quando o CRM inevitavelmente renomeia uma etapa sem avisar ninguém.