Trabalho, Peakx · 2025

Criação de uma pipeline de dados usando a medallion architecture

Toda reunião começava igual: exportar dois ou três CSVs, cruzar na mão e torcer para o filtro estar certo. O trabalho foi trocar isso por um pipeline que roda sozinho e termina em três tabelas confiáveis.

  • PostgreSQL
  • Airflow
  • Airbyte
  • dbt
  • Python
  • VPS

A dor

A Peakx atende clientes cujos dados de campanha e de CRM viviam cada um no seu canto. Nada conversava. Cada reunião nova começava com a mesma coleta manual: dois ou três CSVs exportados na hora, Meta Ads, Google Ads, o CRM do cliente, e às vezes uma planilha de vendas solta que podia ou não entrar na conta.

Precisávamos criar um sistema que centralizasse esses dados e nos desse análises prontas.

O custo não era só baixar e juntar. Era refazer isso toda semana para comparar com a semana anterior, e conviver com o fato de que um filtro errado na exportação mudava o resultado final sem avisar ninguém. O número saía diferente e não dava para saber se o negócio tinha mudado ou se a extração é que estava torta.

As três fontes

Na versão 1.0 o pipeline cobre três origens. Duas são da própria agência; a terceira muda a cada cliente.

Conta da agência

Google Ads

Métricas de campanha, conjunto e anúncio, dia a dia.

Conta da agência

Meta Ads

A mesma estrutura de campanha e criativo, na outra plataforma.

Uma conta por cliente

Kommo CRM

Leads, contatos, tarefas, funis e etapas, o caminho da venda.

A diferença entre elas não é técnica, é de posse. Google e Meta saem de uma conta só, a da agência. O CRM é do cliente: cada um com seu token e sua conta própria, e nem todo cliente tem CRM. Isso define o desenho da coleta, para os anúncios existe um fluxo; para o CRM, um fluxo por cliente.

A coleta e a camada Bronze

As fontes de anúncios entram por conectores do Airbyte, com o Airflow decidindo quando e em que ordem cada carga roda. É uma vez ao dia, de madrugada, quando a plataforma já fechou o dia anterior.

O Kommo não entra pelo mesmo caminho: são scripts Python consultando a API, com uma DAG por cliente que traz leads, contatos, tarefas, funis e etapas. Quatro execuções por dia, porque CRM muda durante o expediente e o dado de ontem não acompanha a semana em curso.

Como cada fonte é coletada e com que frequência
Fonte Método Frequência Destino
Google Ads Conector Airbyte, orquestrado pelo Airflow 1× ao dia, de madrugada medallion_bronze
Meta Ads Conector Airbyte, orquestrado pelo Airflow 1× ao dia, de madrugada medallion_bronze
Kommo CRM Script Python contra a API, uma DAG por cliente 4× ao dia medallion_bronze

Na Bronze nada é tratado. O dado chega e é gravado como veio, inclusive as colunas JSONB que as APIs devolvem inteiras. É essa regra que dá valor à camada: se uma transformação estiver errada lá na frente, o original continua aqui para refazer.

O ETL, camada por camada

Todo o tratamento é dbt, e o PostgreSQL sustenta as três camadas. Cada uma tem um compromisso só.

  1. Bronze

    PostgreSQL · medallion_bronze

    Dado cru, exatamente como saiu da origem. Nenhuma transformação, nenhum filtro. É o ponto de retorno quando uma regra da frente precisa mudar.

  2. Silver

    dbt · um modelo por tabela de origem

    Aqui o JSONB é aberto: o que vinha empacotado dentro de uma coluna vira coluna tipada. Meta e Google são tratados individualmente, cada tabela no seu modelo. No Kommo há uma regra a mais, a Silver guarda só o estado mais recente de cada registro, porque quatro coletas por dia trazem a mesma entidade várias vezes.

  3. Gold

    dbt · três tabelas de consumo

    A Gold é JOIN. Uma tabela reúne o Kommo inteiro, leads, contatos, funis e etapas numa linha só. Outras duas entregam as métricas de Meta e de Google agrupadas por cliente, anúncio, conjunto e data. Três tabelas, e é sobre elas que qualquer pergunta é feita.

A estrutura final

Da conta de anúncios até o painel, o caminho é sempre o mesmo. Aperte o botão para ver o dado andar.

Fluxo do pipeline Google Ads, Meta Ads e Kommo CRM convergem para uma camada de ingestão, que grava na camada Bronze. Da Bronze o dado segue para Silver, depois Gold e, por fim, para o painel de B.I. Google Ads Meta Ads Kommo CRM Ingestão Airflow · Airbyte · Python Dado cru, sem transformação Bronze Registro como veio Silver Colunas tipadas, dbt Gold Três tabelas de consumo B.I. Painel e análise Fluxo do pipeline Google Ads, Meta Ads e Kommo CRM convergem para uma camada de ingestão, que grava na camada Bronze. Da Bronze o dado segue para Silver, depois Gold e, por fim, para o painel de B.I. Google Ads Meta Ads Kommo CRM Ingestão Airflow · Airbyte · Python Dado cru, sem transformação Bronze Registro como veio Silver Colunas tipadas, dbt Gold Três tabelas de consumo B.I. Painel e análise
As três fontes entram por um ponto só, é a centralização, desenhada. Da Bronze em diante o dado só anda para a frente, e cada camada tem um compromisso.
  1. Google Ads, Meta Ads e Kommo CRM entregam seus dados a um mesmo ponto de coleta.
  2. A camada de ingestão, com Airflow, Airbyte e scripts Python, grava tudo na camada Bronze sem transformar nada.
  3. Da Bronze o dado passa para a Silver, onde o dbt abre as colunas JSONB e tipa os campos.
  4. Da Silver passa para a Gold, que junta tudo em três tabelas de consumo.
  5. A Gold alimenta o painel de B.I., onde a análise acontece.

Resultados

Dois ganhos sustentam o projeto: tempo e confiança.

Tabelas Gold

3

Todo o pipeline termina em três tabelas consultáveis.

Coleta de anúncios

1×/dia

De madrugada, sem ninguém abrir plataforma.

Coleta de CRM

4×/dia

O funil acompanhado dentro do próprio expediente.

Planilhas por reunião

0

Eram de duas a três, exportadas na hora.

O tempo veio do painel: com a camada Gold pronta, o time de B.I. montou um relatório que se atualiza sozinho, e o resto do time deixou de produzir o relatório semanal na mão.

A confiança veio de todo mundo passar a olhar para o mesmo número. Sem filtro exportado errado, sem cálculo refeito de forma diferente em cada planilha, a discussão passou a ser sobre a decisão, não sobre qual versão do dado está certa.

E há o efeito que não cabe em métrica: a Peakx não tinha nada de dados centralizados. O projeto começou do zero e começou junto uma cultura, armazenar no longo prazo e decidir com base no que está armazenado.

Meus aprendizados

Praticamente tudo aqui foi novo para mim. Eu era analista de dados; construir um pipeline me obrigou a aprender engenharia de dados do zero, a parte de ETL e também o que não aparece em curso nenhum: instalar e manter os sistemas de automação num servidor.

Fui atrás de entender arquiteturas de dados e em que cenário cada uma faz sentido, de como colocar CI/CD nesses pipelines, de noções de segurança de dados e de como documentar o que foi feito para que a próxima pessoa consiga mexer.

Aprendi a maior parte sozinho, com vídeo no YouTube, dúvida tirada com IA e engenheiro respondendo no LinkedIn. Foi o projeto que me tirou de analista e me colocou em engenharia.

Voltar para a home