A PagLeve (fictícia) é uma fintech de meios de pagamento pra pequenos negócios digitais. Microempreendedores que vendem por redes sociais e marketplaces e usam a plataforma pra gerar cobranças, receber vendas e gerir o caixa. O crescimento é operado por uma diretoria de Revenue com cinco frentes de aquisição e engajamento: Mídia Paga, Conteúdo e SEO, Influenciadores, Indicação (member get member) e CRM.
O funil de crescimento tem uma régua clara. Aquisição é o cadastro com a primeira cobrança gerada. Ativação é a primeira venda recebida. Cliente Qualificado, o "CQ", são duas vendas em até 7 dias contados da primeira venda, proxy de retenção futura. A north star da companhia é 1 milhão de transações por mês.
A Diretora de Revenue começava todo dia com o mesmo ritual. Abria 6 ou mais planilhas e um dashboard de BI com páginas em manutenção pra montar, de cabeça, o diagnóstico do mês. Os sintomas se repetiam todo mês.
O custo real dessa dor era de 30 a 40 minutos diários de leitura fragmentada, decisões tomadas sobre dados sem confiabilidade verificável, e nenhuma visão comparável de contribuição por frente.
Um produto de dados completo, do pipeline à interface.
Planilhas Google (custos/metas) Data Warehouse (indicadores de funil)
│ │
▼ │
n8n — extração CRUA (4 workflows, diários) │
+ auditoria via Drive API (quem/quando) │
▼ ▼
┌──────────────────── BigQuery ────────────────────────┐
│ RAW (append-only, imutável, tudo STRING) │
│ → PORTÃO DE VALIDAÇÃO (QA automático) │
│ ├─ reprova → QUARENTENA (motivo linha a linha)│
│ └─ aprova → SILVER (parse SQL versionado) │
│ → GOLD (pré-agregado, semáforos e YoY resolvidos) │
│ + auditoria · snapshots mensais · ajustes manuais │
└──────────────────────┬───────────────────────────────┘
▼
Camada de leitura (API/conector)
▼
Dashboard executivo (React) — Cloud Run + IAP
ESTRATÉGICO (diretoria) × TÁTICO (coordenações)
+
Alertas automáticos no Slack (falha, atraso, desvio)
Três entregas em um projeto só: o dashboard executivo, o pipeline governado que o alimenta e o modelo de governança (contratos de dados, auditoria, resiliência) que mantém tudo confiável.
Antes de desenhar qualquer coisa, auditei as fontes reais.
| Fonte | Estrutura encontrada | Problema |
|---|---|---|
| Planilha de orçamento anual | Matriz P&L: meses em colunas, hierarquia de frentes em linhas | Não tabular; números em formato local (vírgula decimal); subtotais misturados com detalhe |
| Planilha da frente Influenciadores | ~1 aba por visão; pacing diário em abas mensais | Cabeçalhos multi-linha; blocos "planejado" e "realizado" lado a lado |
| Planilha da frente Indicação | 1 aba de pacing nova por mês | Abas proliferam; estrutura muda sutilmente a cada mês |
| Planilha de custos do CRM | Abas mensais narrativas, por campanha | Imparseável de forma genérica, a estrutura muda por campanha |
| Warehouse (funil) | Tabelas de eventos e marcos por usuário | Confiável, mas desconectado do custo |
Mídia Paga ficou de fora dessa lista de planilhas problemáticas de propósito: o custo dela já vinha direto da API do Google e do Meta Ads, automatizado, sem planilha no meio. Os 4 workflows do n8n cobrem exatamente as 4 fontes de planilha que precisavam de extração.
O diagnóstico chegou a uma conclusão simples. O problema não era fazer um dashboard bonito. Era arquitetar a ponte entre dois mundos, planilhas vivas e warehouse, sem quebrar a rotina dos times e sem herdar a fragilidade das planilhas.
As decisões que importam, na ordem em que as tomei.
Convenção de nomes: <camada>_<fonte>_<domínio>_<grão> (brz_ / slv_ / gld_), tudo CREATE OR REPLACE idempotente e particionado por data.
| Camada | Tabelas (exemplos) | Papel |
|---|---|---|
| Raw/Bronze | brz_raw_plan_mes, brz_raw_custo_pacing_dia, brz_raw_auditoria_planilhas, brz_raw_quarentena, brz_ajustes_manuais | Fotografia crua e imutável, mais trilha de auditoria e correções controladas |
| Silver | slv_revenue_custo_dia, slv_revenue_plan_dia (meta mensal diluída em curva diária por dia da semana), slv_revenue_indicadores_dia | Parse versionado, de-para de nomenclatura, unificação custo e funil |
| Gold | gld_revenue_home_diario, gld_revenue_pacing_dia, gld_revenue_consolidado_mes (com colunas _ly e yoy_pct pré-calculadas), gld_revenue_saude_medicao | Pronto pra leitura: pacing MTD, run-rate, semáforos, shares, saúde por fonte |
O contrato de métricas que tornou as frentes comparáveis pela primeira vez. Presente em toda página de frente, na mesma ordem.
Com duas exceções conscientes, documentadas no modelo de dados, não escondidas na interface: a frente orgânica (Conteúdo e SEO) não exibe os itens 1, 7 e 8 (não tem investimento a comparar), e o CRM é tratado como reativação, então também fica de fora do CAC-Ativação e do CAC-CQ.
O erro do dashboard anterior era misturar níveis de decisão. O novo produto separa isso de forma explícita.
Construí o protótipo numa ferramenta de AI app building (Lovable), com dados mock estruturados exatamente como as tabelas gold. Isso permitiu validar telas, indicadores e leitura com a C-Level antes de investir no pipeline. Foram 5 iterações guiadas por feedback real, incluindo duas correções de rota valiosas.
Essas iterações custaram horas no protótipo. Teriam custado semanas se descobertas depois do pipeline pronto.
O que mantém a confiança no dado, mecanismo por mecanismo.
| Risco real | Mecanismo implementado |
|---|---|
| Aba nova a cada mês | Descoberta dinâmica por regex a cada execução |
| Coluna renomeada ou layout alterado | Fingerprint de cabeçalho por carga; drift gera alerta e parser SQL versionado por fingerprint |
| Erro de digitação na origem | Checks de plausibilidade levam à quarentena, mais LKG (o painel nunca quebra) |
| Planilha apagada ou movida | Acesso por fileId (imune a rename); histórico já preservado no raw |
| Alteração retroativa em mês fechado | Congelamento, mais alerta com autor e data, só entra com aprovação |
| Correção sem mexer na planilha | Tabela de ajustes manuais auditável (chave, valor, motivo, autor, vigência) |
| Falha silenciosa | Toda anomalia vira alerta no Slack, com fonte, motivo, amostra e autor da última alteração |
| PII nas planilhas | Extração restrita às colunas do contrato, dados pessoais não entram no raw |
Fechei um contrato de dados de uma página por planilha com cada coordenação: 7 pedidos mínimos (não renomear abas, não renomear colunas chave, números como número em vez de formato local com vírgula, não misturar subtotal com detalhe na mesma coluna, cabeçalho em uma linha só, SLA de preenchimento D-1, avisar antes de reestruturar) em troca de um incentivo concreto, a página tática da própria frente, alertas automáticos e o fim da cobrança manual de atualização.
--no-allow-unauthenticated, escala a zero), Identity-Aware Proxy na frente (o Google barra contas fora do domínio na infraestrutura, antes de 1 byte do app carregar), allowlist do app como segunda camada de controle fino, dados via service account com escopo mínimo (leitura no dataset), segredos no Secret Manager.Números ilustrativos, com ordens de grandeza reais.
| Antes | Depois |
|---|---|
| 30 a 40 min/dia de leitura fragmentada em 6+ planilhas | Menos de 5 min em uma tela única (desktop e mobile) |
| CAC incomparável entre frentes (régua própria em cada uma) | 1 régua, 8 indicadores, 5 frentes comparáveis no funil (custo com as duas exceções documentadas) |
| Erro de planilha contaminava o mês, sem alerta | Quarentena automática, painel sempre de pé no último dado válido |
| Dado sem dono, sem trilha | Auditoria completa: quem alterou, quando, qual carga, qual revisão |
| Histórico refém das planilhas | Raw imutável e snapshots, histórico preservado independente da origem |
| Cobrança manual de atualização | O sistema cobra sozinho (alertas de atraso em 24 a 48h no Slack) |
| Decisão de mix "no feeling" | Contribuição por frente com share de investimento × share de resultado × CAC-CQ, lado a lado |
O ganho estrutural mais importante foi outro: a pergunta da diretora mudou. Antes era "quanto gastamos?", o que exigia caça manual. Hoje é "o gasto está virando cliente qualificado no ritmo da meta, e onde eu realoco?". Essa segunda pergunta é respondida em 30 segundos, com dado auditado. Não foi a única vez que precisei transformar planilha e achismo em ferramenta de decisão: no case do Simulador de Orçamento Multicanal, o problema era outro (canal de aquisição, não custo consolidado), mas a régua foi a mesma, validar contra o número oficial antes de qualquer decisão.
As ferramentas e as competências que sustentaram o projeto de ponta a ponta.
Do lado técnico, apliquei analytics engineering (ELT raw-first, modelagem medalhão) e data governance (auditoria, contratos de dados, LGPD by design). Do lado de produto, usei product thinking (protótipo antes do pipeline, iteração com C-Level) e dataviz estratégico (hierarquia decisória, tom copiloto, visual primeiro). E do lado de infraestrutura, montei uma arquitetura cloud com custo próximo de zero e conduzi a gestão de stakeholders, com contratos com coordenações em troca de disciplina de dado.
Protótipo com mock estruturado como o modelo final é o atalho mais barato que existe. Consegui 5 iterações de produto antes de escrever uma linha de pipeline.
A decisão de UX mais valiosa foi de hierarquia, não de estilo visual. Separar o que é decisão de diretoria do que é diagnóstico de coordenação evitou o erro mais comum: dashboard que falha por misturar nível de decisão, não por gráfico feio.
Extrator burro mais SQL inteligente vence parser esperto. Planilha viva muda todo mês. SQL versionado com raw imutável absorve qualquer mudança sem perder histórico.
Tom importa. Trocar "pior movimento" por "ponto de observação mais referência" mudou a relação da C-Level com o painel, de fonte de ansiedade para copiloto.
Governança se vende com incentivo, não com imposição. Os times aceitaram o contrato de dados porque ganharam algo visível em troca.
30 minutos, de graça. Eu entro nos seus dados e mostro onde está o buraco entre custo e resultado.
Quero meu diagnóstico grátis →