← Voltar para o blog

Por que (não) construir mais um app de finanças - Parte 1

Parte 1 de 7Série: Por que (não) construir mais um app de finanças
0 · Manifesto1 · Open Finance2 · Assinaturas3 · Categorização4 · Cartão de crédito5 · Família6 · Privacidade
Pássaro roxo pensativo, com a mão no queixo, ao lado de uma pilha de livros, um notebook e grandes pontos de interrogação
Open Finance, ou "é só conectar o banco".

O Open Finance brasileiro é uma das coisas mais legais que aconteceram no setor. Você autoriza, o banco libera, as transações aparecem.

Na nossa cabeça, era plugar uma API e partir para a próxima feature.

jan/2026
primeira conexão bancária funcionando
57
commits com "Pluggy" no nome desde então
0
deles se chama "plugar a API"

A Pluggy, nossa parceira, faz o trabalho pesado de conversar com dezenas de instituições. O que sobrou para a gente foi todo o resto. Esta é a Parte 1 do diário que começamos na Parte 0.

O que a gente achou que era

O plano original
  1. O usuário autoriza no app do banco
  2. O banco libera os dados
  3. As transações aparecem no app

O que realmente era

Duplicata é um problema sem resposta certa

Quando você sincroniza o mesmo extrato várias vezes, precisa saber o que já tem. A regra óbvia é: mesma conta, mesmo dia, mesma descrição, mesmo valor, então é a mesma transação.

conta + dia + descrição + valor = mesma transação?

Até o dia em que alguém comprou duas coisas de R$ 41 na mesma loja, no mesmo dia. A segunda compra sumiu. Pela nossa regra, ela era uma cópia da primeira.

A correção foi usar o horário da transação quando o banco manda o horário, sem quebrar as transações antigas, que não têm horário nenhum.

O problema oposto também acontece. Em um banco, o mesmo PIX pode chegar com descrições diferentes em sincronizações diferentes. Aí a regra precisa ser mais frouxa para não duplicar.

Regra frouxa demais duplica. Regra rígida demais apaga compra de verdade.

Toda correção de um lado abre risco do outro.

snabber-fin
$ git log --oneline | grep -iE "duplic|dedup"
db0f7bc9 Include Pluggy transaction time in sync deduplication
57bf9e45 sync duplicados
b2e210d5 serious dedup issue with pluggy
139e5656 investimentos duplicando quando reconecta a conta
58d7e3df melhorias nas transacoes duplicadas e logging

Alguns dos commits sobre duplicatas, de fevereiro a agosto de 2026. E a lista continua.

Conexão nova parece quebrada sem estar

Logo depois que alguém conecta o banco, a instituição pode levar um tempo para liberar os dados. Durante esse tempo, a sincronização volta vazia. E a gente mostrava, todo orgulhoso: "Sincronização falhou".

Imagina conectar o banco pela primeira vez, num app novo, e ver "falhou". Pior: em alguns casos, uma sincronização que tinha dado certo aparecia como "interrompida", porque um passo de segurança do código sobrescrevia o status correto.

Antes
Sincronização falhou
para quem tinha acabado de conectar
Agora
Conectando — a instituição ainda não liberou os dados
e o app tenta de novo sozinho, no máximo duas vezes por dia

A mensagem de falha ficou só para quando ela é notícia de verdade.

Reconectar é o momento mais frágil

E reconectar não é exceção, é rotina. O custo da integração com Open Finance é por conexão: cada banco conectado de cada usuário entra na conta. Para o negócio fechar, a gente precisa ter a liberdade de remover conexões que não estão mais em uso, como a de quem voltou para o plano grátis. Quando essa pessoa volta, conecta tudo de novo.

Quando alguém remove e conecta o banco de novo, muita coisa volta com identificadores novos. Já vimos investimentos duplicados, contas criadas de novo ao lado das antigas e, num caso que vai ganhar a própria história na Parte 4, faturas de cartão que ficaram em branco.

Cada banco é um caso, e cada usuário também

38
chamados abertos
com a Pluggy

Uma instituição que devolve zero contas logo depois de a pessoa conectar. Um banco que manda o mesmo PIX com descrições diferentes. Uma conta que muda de nome de uma sincronização para outra. Para casos assim, de um banco específico ou de um usuário específico, abrimos um chamado com a Pluggy e investigamos junto com eles.

Não existe "o Open Finance" funcionando de um jeito só. Existem dezenas de instituições, cada uma com suas particularidades, e um integrador no meio fazendo o possível para que elas pareçam iguais.

Desconectar também não é simples

Quando alguém remove uma conexão, o que fazer com dois anos de transações importadas? Apagar tudo assusta quem só queria trocar de banco. Manter tudo frustra quem queria sair.

Durante meses, a gente decidiu pelo usuário. Agora a gente pergunta, e mostra exatamente quantas transações, contas e registros de investimento vão embora antes de confirmar.

O que fizemos

  • ✓Duplicatas checadas com horário, quando o banco manda horário.
  • ✓Regras específicas para bancos que mudam a descrição da mesma transação.
  • ✓Mensagem neutra na primeira conexão e nova tentativa automática.
  • ✓Contas antigas reaproveitadas quando a conexão é recriada.
  • ✓Escolha explícita na hora de remover: só a conexão, ou a conexão e os dados.

O que ainda não resolvemos

A gente não controla quando cada instituição libera os dados, nem como ela descreve cada transação. Quando algo foge do padrão, o caminho ainda é abrir mais um chamado e esperar.

O consentimento do Open Finance tem prazo e precisa ser renovado. Todo fluxo que depende de o usuário voltar ao app do banco perde gente no caminho.

E dedup continua sendo uma aposta: a gente só descobre a regra errada quando alguém reclama de uma compra que sumiu ou apareceu duas vezes.

Se você está construindo com Open Finance

Trate a primeira sincronização, a reconexão e a remoção como três produtos diferentes. Foi aí que a gente gastou mais tempo.

Quer ver como ficou na prática? Crie sua conta no Snabber e conecte o seu banco.

Na próxima parte: cobrar pelo app, ou como a Apple não te conta que o usuário cancelou.