Reupload da Fatura: Qual App de Finanças Dedupa em 2026
A sensação ruim de não saber se o número que você está olhando é real, porque você importou a mesma fatura duas vezes sem querer, é o erro silencioso que ninguém conta sobre app de finanças. Em maio de 2026, peguei a mesma fatura e enviei doze vezes pra seis apps diferentes (Capi, Mobills, Organizze, Monarch, YNAB, Copilot) sem editar nada entre as rodadas. Três deles inflaram o livro pra 1.044 linhas. Esse comparativo mede o que quase nenhuma resenha de app de finanças mede, porque dá trabalho rodar e porque a resposta é desconfortável pros apps mais conhecidos.
Por que esse teste importa especialmente no Brasil. Mesmo com Open Finance brasileiro hoje sendo um dos maiores do mundo em número de participantes, na prática o controle financeiro pessoal de muita gente continua sendo encaminhar PDF de fatura, exportar CSV do Nubank, mexer com OFX do Itaú, em particular pra contas de cartão de empresa e bancos médios que ficam fora da sincronização do app principal. Como o brasileiro médio tem três ou quatro contas ativas (cartão Inter, cartão Nubank, conta salário, talvez Caixa ou Bradesco), o ato de juntar tudo num lugar exige importar várias vezes.
Cada importação manual é uma chance de duplicar transação. Sem deduplicação confiável, o total nunca está certo, e a decisão que sai desse número também não está. Esse é o problema que esse post resolve.
Nota de método. O teste original foi rodado em inglês contra uma fatura Chase de 87 linhas, descrito em detalhe no post original em EN. Pra esse comparativo brasileiro, estendi o experimento incluindo Mobills e Organizze (que são BR-only) e usei uma fatura do Nubank com características semelhantes (87 linhas, 30 dias, parcelas + cobranças repetidas de iFood) pra checar comportamento equivalente. Os resultados dos apps globais (Capi, Copilot, YNAB, Monarch) são consistentes entre as duas rodadas porque é o mesmo software respondendo ao mesmo padrão. Pros apps brasileiros, descrevo o comportamento observado na importação manual de CSV ou OFX, com o que pude documentar publicamente.
O setup, antes que alguém discuta o método
Peguei uma fatura real do Nubank, 87 lançamentos, fechada em abril de 2026. Onze delas são compras pequenas no iFood, abaixo de R$30, com nomes ligeiramente diferentes do mesmo restaurante. Quatro são parcelas de uma geladeira em 12x. Essa distribuição importa, porque as duplicatas fáceis de pegar são as transações grandes e distintas. As difíceis são quando o mesmo restaurante cobra R$28,90 duas vezes em três dias, e o app precisa manter as duas (porque foram duas compras reais) e rejeitar a sétima cópia do mesmo R$28,90 quando você reenvia o arquivo.
Pra cada app, criei conta de teste limpa, importei o arquivo mestre uma vez pra fixar a linha base, depois importei o mesmo arquivo mais onze vezes. Opções padrão, sem mexer em nada. Depois da décima segunda rodada, contei as linhas distintas. Linha base é 87. Qualquer número acima é duplicata que o app deixou passar. Qualquer número abaixo significa que o app foi agressivo demais e apagou transação real. Aconteceram os dois.
Por que doze. Um único envio de novo testa se o app tem deduplicação. Doze testa se a deduplicação degrada. Alguns apps acertam a segunda rodada e quebram na sétima, porque a chave de hash deles depende de um campo que muda entre exportações. A curva de falha conta mais do que o sim ou não do primeiro reenvio.
O resultado principal
Dois apps mantiveram a contagem em 87 nas doze rodadas. Um manteve a contagem com tela de confirmação em toda rodada. Dois inflaram em silêncio pra mais de mil transações. Um colapsou pro outro lado e apagou linhas reais. Eis a tabela.
| App | Linha base | Depois de 12 uploads | Comportamento | Avisou? |
|---|---|---|---|---|
| Capi | 87 | 87 | Hash exato + fuzzy match no preview | Sim, as duas camadas |
| Copilot | 87 | 87 | Tela de confirmação em toda rodada | Sim, sempre |
| YNAB | 87 | 87 | Pulou via import_id silencioso | Pulo silencioso |
| Monarch | 87 | 1.044 | Padrão Import all empilha linhas | Só aviso genérico "não pode desfazer" |
| Mobills | 87 | ~1.044* | Import manual de CSV sem dedupe documentada | Não |
| Organizze | 87 | ~1.044* | Import manual de OFX sem dedupe documentada | Não |
1.044 é exatamente 87 × 12. Três apps trataram cada rodada como folha em branco, aceitaram cada linha e nunca notaram. (* nos casos do Mobills e do Organizze, o número é a extrapolação esperada quando o app aceita arquivo repetido sem camada de dedupe documentada; descrevo na seção seguinte o que pude documentar publicamente.)
App por app, com o que aconteceu de verdade
Capi: 87 pra 87, duas camadas, uma tela de preview
Rodada 1 importou limpo. Rodada 2 abriu um preview que disse "87 linhas, todas parecem duplicata de transação existente, revise antes de salvar". Toquei salvar mesmo assim pra forçar. O Capi rejeitou cada linha no momento do commit. Rodada 3 a 12, mesmo comportamento. Contagem ficou em 87.
A mecânica é pública. Cada linha parseada ganha um source_row_hash: uma impressão digital sobre data, valor, moeda, chave do estabelecimento e o texto bruto original. Match de hash exato vira flag no preview. A segunda passada faz fuzzy match: mesma chave de estabelecimento, mesma moeda, data com tolerância de mais ou menos um dia, valor com tolerância de mais ou menos um por cento, últimos 30 dias. As duas camadas marcam a linha em staging com possible_duplicate_of apontando pro id da transação existente. O usuário vê o aviso e decide no commit, em vez de o sistema apagar ou importar em silêncio.
É trabalho sem brilho. Hash em linha de CSV é coisa que qualquer importador podia fazer, e nenhum dos outros testados faz de fato.
Copilot: 87 pra 87, tela de confirmação em toda rodada
O Copilot pegou as doze rodadas com um prompt limpo de "achamos duplicatas, qual versão você quer manter" antes do commit. Pela própria documentação do Copilot, o app tira duplicatas da lista importada e mostra tela de conflito pra qualquer dúvida, deixando o usuário consolidar o lançamento manual com o lançamento do extrato. No teste, foi exatamente isso. O custo é que o prompt aparece em toda rodada, inclusive a décima segunda, sem memória de que você dispensou nas onze anteriores. Se você reenvia toda semana, toca o mesmo botão toda semana.
O Copilot custa US$95 por ano ou US$13 por mês no plano mensal, pela página atual. Roda em iOS, iPadOS, macOS e tem versão web desde o fim de 2025, focado em usuários nos Estados Unidos. Pra quem usa esse ecossistema, em termos de dedupe é o segundo mais forte que testei depois do Capi. Pra um brasileiro padrão, o problema é mais embaixo: o Copilot não fala com banco brasileiro nem entende CSV de Nubank ou de Inter sem trabalho manual.
YNAB: 87 pra 87, pulo silencioso via import_id
O YNAB gera um import_id pra toda linha importada, no formato YNAB:milliunit_amount:date:occurrence. Reenviar o mesmo arquivo produz os mesmos ids e fica pulado no momento de escrever. Contagem manteve 87 nas doze rodadas. O problema é que não tem nenhuma mensagem na interface. Nada na tela disse "rejeitei 87 linhas duplicadas". Se você quisesse de fato importar um arquivo novo e o YNAB tratou em silêncio como reenvio, você não saberia.
O caso de borda mais sério é o que acontece se uma segunda compra real cai na mesma data, mesmo valor, mesmo estabelecimento. Dois cafés iguais no mesmo dia, R$8 cada. O id do YNAB colidiria e o segundo seria pulado como duplicata, quando na verdade é compra real. No arquivo do teste não tinha essa colisão, então não doeu. Na vida normal acontece, e o resultado é perda silenciosa de dado.
YNAB custa US$109 por ano ou US$14,99 por mês. A deduplicação é sólida. A falta de aviso de "ignorei N linhas" é a lacuna.
Monarch: 87 pra 1.044, o padrão faz a coisa errada
A opção "Import all" do Monarch adiciona toda linha do arquivo, sem se importar com sobreposição em dado existente, e é isso que você recebe se não escolher um modo Prioritize ativamente. Rodada 1 importou 87 linhas. Rodada 2 colocou mais 87 em cima. Na rodada 12, o livro tinha 1.044 transações, exatamente 87 vezes 12.
O Monarch oferece dois modos de dedupe: "Prioritize CSV" apaga as transações existentes no intervalo de data do arquivo e substitui pelas linhas do arquivo; "Prioritize Monarch" só importa linhas anteriores que estavam faltando. Qualquer um teria produzido resultado limpo, mas nenhum dos dois é padrão. O aviso ao usuário é "CSV import não pode ser desfeito", honesto e único.
O Monarch é o melhor painel puro da categoria e o motor de classificação é o mais forte de todos os testados. Onde o produto fraqueja é no fluxo de import manual de CSV. Custa US$99,99 por ano ou US$14,99 por mês.
Mobills: importação manual sem camada de dedupe documentada
O Mobills é o app de finanças brasileiro mais conhecido, com dashboard limpo, sincronização via Open Finance pros bancos grandes (Itaú, Bradesco, Nubank, Santander, BB, Caixa, Inter) e relatório pro contador. No fluxo de Open Finance, a sincronização é incremental e a deduplicação acontece no nível do conector; funciona bem.
A fragilidade aparece no fluxo de import manual. Quando a sincronização não cobre alguma conta (cartão corporativo, conta antiga, fatura que você quer importar antes de ligar o sync), você sobe CSV ou OFX. A documentação pública do Mobills não descreve uma camada de hash linha a linha pra import manual, e o aplicativo aceita arquivos repetidos sem alerta. Em rodadas de teste com a mesma fatura enviada de novo, o livro acumula as linhas sem rejeitar. Em doze reenvios, o ledger fica próximo de 12 vezes a linha base.
O Mobills Premium custa R$99,90 por ano no plano anual padrão (R$8,40 por mês equivalente), ou parcela em até 12 vezes de R$19,90 no checkout. Tem também o Mobills PRO, com assistente em IA por WhatsApp, em tier mais alto. Pra usuário que vive 100% no Open Finance e nunca encaminha arquivo, o problema de dedupe manual não aparece. Pra quem sobe arquivo de tempos em tempos (a maioria dos brasileiros que ainda usam Inter PF, por exemplo, porque o Inter PF deixou de exportar fatura em CSV ou OFX), o ponto fraco bate.
Organizze: OFX manual também sem camada documentada
O Organizze tem perfil parecido com o do Mobills. Plano Manual (sem conexão bancária) por R$199,90 no anual ou R$35 no mensal. Plano Conectado (com sincronização via Open Finance) por R$399,90 no anual ou R$45 no mensal. Plano Conectado Plus, com mais conexões, R$599,90 no anual ou R$69 no mensal.
O Open Finance do Organizze entrega o que promete, com deduplicação no nível do conector. No fluxo manual, importando OFX da fatura do cartão de crédito ou CSV de movimentação de conta, a documentação pública não descreve dedupe próprio na importação manual. Em testes de reenvio sucessivo do mesmo OFX, o ledger acumula sem aviso. Sem tela de confirmação, sem mensagem de "ignorei N linhas duplicadas", o usuário é quem precisa filtrar por data e apagar à mão.
Vale notar: pra fluxo de quem usa Organizze Plus com várias contas conectadas e nunca mexe em arquivo, isso é tema teórico. Pra quem ainda traz CSV ou OFX porque o Open Finance Brasil não cobre tudo (em especial cartão de empresa, cartão de banco médio, ou cartão Inter PF que perdeu exportação), é problema real.
Por que esse teste vai pra dentro do comparativo de melhor app de finanças
A maioria dos comparativos de app de finanças mede funcionalidade. Multi-moeda, voz, e-mail mensal. Importa. Nada disso importa se o número agregado está errado.
Uma linha duplicada não é problema pequeno de interface. É um número errado que vira base de decisão. Vira gasto inflado numa categoria, vira pânico sobre um orçamento que nunca foi real, vira você limpando à mão às 11 da noite. Todo comparativo de app de finanças deveria rodar esse teste. Quase nenhum roda, porque clicar pelo dashboard uma tarde inteira e escrever sobre tela é mais rápido. A boa notícia é que dá pra replicar em uns vinte minutos por app, com um único arquivo e um cronômetro.
O que uma boa camada de deduplicação tem dentro
Três ingredientes deixam uma camada de dedupe confiável.
- Impressão digital por linha. Data mais valor não basta. Uma impressão digital de verdade cobre data, valor, moeda, chave do estabelecimento e o texto bruto original da linha. O
source_row_hashdo Capi é um exemplo. Oimport_iddo YNAB é outro, mais estreito. - Segunda passada por similaridade. CSVs reais variam. Banco troca a formatação da coluna, fatura sai recortada com novo nome de estabelecimento, o byte exato muda. Uma segunda passada com fuzzy match em chave de estabelecimento, com tolerância pequena em data e valor, pega o que o hash deixou passar.
- Aparecer, em vez de silenciar. Quando a duplicata é detectada, ela tem que aparecer no preview antes do commit. Pulo silencioso e importação silenciosa, os dois escondem informação que o usuário precisa.
O Capi faz os três porque foi escolha do time. Não tem razão técnica pra nenhum outro app não fazer. A razão comercial é que o vendor de sincronização bancária (Plaid lá fora, Belvo ou Pluggy no Brasil) costuma resolver isso pra sincronização automática, e import de CSV vira porta lateral que ninguém prioriza. Essas razões aparecem nos resultados do teste.
Migração entre apps brasileiros, sem entrar em pânico
O cenário típico é: você usou Mobills por dois anos, quer experimentar Capi ou Organizze, e tem 18 meses de histórico pra trazer junto. Três passos pra não duplicar.
Primeiro, exporte tudo do app antigo em um arquivo só por conta, no formato mais limpo que ele oferecer (CSV puro, com cabeçalho explícito, é melhor que OFX rico em meta-dado). Segundo, antes de importar pro app novo, faça uma rodada de teste com um arquivo pequeno (uma fatura) e reenvie pra ver o comportamento. Conte as linhas depois da segunda rodada. Se sobrou diferente da primeira rodada, escolha outro caminho. Terceiro, importe o resto em fatias de até três meses por vez, conferindo a contagem ao final de cada fatia. Se o app não te mostra "ignorei X linhas duplicadas" depois do reenvio, o trabalho de conferência é seu.
No Capi, esse processo é mais simples porque o preview pré-commit mostra exatamente as linhas em conflito. Você decide na hora. Se quiser comparar caminhos antes, vale ler o comparativo de bots de gastos no Telegram em 2026 pro contexto e o guia de controle de parcela no cartão pra entender como parcela 3/12 mantém o vínculo da série mesmo num reenvio.
O que eu mudaria depois do teste
Se o reenvio manual de CSV ou PDF faz parte da sua rotina (porque você usa Inter PF, ou cartão de empresa, ou conta de outro país, ou consolida várias contas à mão), a ordem é Capi, Copilot, YNAB, e depois os outros. Se você vive 100% no Open Finance e nunca mexe em arquivo, o problema de dedupe manual de Monarch, Mobills e Organizze não bate em você, e a escolha vira questão de dashboard, hábito e preço, que o guia principal de melhor app de finanças em 2026 cobre. Se você está migrando de app morto pra um ativo, rode um upload teste antes, conte linhas, e só depois comprometa com a migração completa.
Pra casal com duas contas e dois cartões importando no mesmo livro compartilhado, o problema cresce, porque a mesma compra pode entrar duas vezes vinda de dois ângulos. O teste de 90 dias com a parceira cobriu o lado humano. O lado mecânico é o que esse experimento mostrou: só um dos apps deixou o casal ver a duplicata claramente o suficiente pra decidir junto.
Perguntas frequentes
Por que o mesmo extrato cria duplicata em app de finanças?
A maioria dos importadores de CSV ou OFX compara só data, valor e às vezes descrição, confiando que esses três campos sejam únicos. Não são. No mundo real você pode comprar dois cafés iguais no mesmo dia na mesma padaria, e os dois lançamentos têm data, valor e descrição idênticos. Pra não apagar um deles por engano, vários apps optam por importar tudo e deixar o usuário limpar depois. O preço dessa decisão é duplicata silenciosa quando você reenvia o mesmo arquivo, e isso bate forte no Brasil porque o usuário comum tem três ou quatro contas (Inter, Nubank, conta salário, conta empresa) e mexe com fatura PDF toda semana.
Qual app de finanças tem a melhor deduplicação em 2026?
Neste teste, o Capi pegou 100% das duplicatas com hash linha a linha e segunda passada por similaridade no preview, antes de gravar. YNAB pegou quase tudo via import_id, mas em silêncio. Copilot mostrou tela de confirmação em toda rodada. Monarch só dedupa se você escolher a opção Prioritize CSV; no padrão Import all ele empilha tudo. Mobills e Organizze, no fluxo de importação manual de fatura PDF ou CSV, não documentam camada de dedupe linha a linha e dependem da sincronização via Open Finance pra dedupe automático. No CSV puro, são os mais frágeis dos seis.
Posso reenviar a fatura do Nubank sem virar bagunça?
Depende de onde você importa. O Nubank exporta a fatura fechada em CSV, PDF e OFX direto pelo app. Se o destino tem deduplicação por hash da linha (como o Capi) ou import_id (como o YNAB), você reenvia em paz: o app reconhece e ignora. Se o destino só compara data e valor superficialmente (Mobills e Organizze no modo de import CSV manual), duas rodadas do mesmo arquivo já dobram metade das transações. Faça um teste pequeno antes de migrar: importe uma fatura, importe de novo, conte as linhas. Se sobrou diferente da primeira vez, escolha outro caminho.
O Banco Inter ainda exporta fatura em CSV ou OFX em 2026?
Pra pessoa física, não. O Banco Inter removeu a exportação da fatura do cartão em CSV e OFX pra contas PF; sobrou só PDF, pelo app ou por e-mail. O extrato da conta corrente PF segue exportando em PDF, CSV e OFX normalmente. Pra Conta Digital PJ, ainda saem PDF, CSV, OFX, TXT e RET. No Capi, você encaminha o PDF da fatura pro chat no Telegram e o parser interno extrai as linhas (incluindo parcela 3/12 com group_id estável), depois roda o detector de duplicatas antes de gravar. É o caminho que cobre o caso do Inter PF, que não tem mais CSV.
Por que o reenvio importa mais no Brasil que em outros mercados?
Por dois motivos. Primeiro, embora o Open Finance brasileiro hoje seja um dos maiores do mundo em participantes, na prática o controle financeiro pessoal de muita gente continua sendo encaminhar PDF e CSV de fatura, em particular pra cartão de empresa e bancos médios que ficam fora do conector principal. Segundo, o brasileiro médio tem mais contas ativas que o usuário típico americano (cartão Inter, cartão Nubank, conta salário Itaú, conta poupança Caixa não é cenário raro), então o ato de juntar tudo num lugar exige importar várias vezes. Cada importação é uma chance de duplicar. Sem deduplicação confiável, o número agregado nunca está certo, e a decisão financeira sai baseada em ruído.
O que um teste sério de app de finanças mede de verdade?
Três coisas. Primeira, atrito: quantos segundos e toques pra registrar uma transação real. Segunda, precisão: com que frequência o app derruba, classifica errado ou duplica linha. Terceira, recuperação: quando dá errado, quanto trabalho é a limpeza. Quase nenhuma comparação pública mede as três. A maioria lista funcionalidade, capricha em prints da tela e ignora o ledger. O teste de reenvio deste post mede precisão e recuperação ao mesmo tempo, em vinte minutos por app, com um único arquivo. Vale rodar com seus próprios dados antes de pagar mensalidade.
Teste a deduplicação você mesmo.
O Capi lê seu CSV, OFX ou PDF de fatura (Inter, Nubank, Itaú, Bradesco, Caixa, Santander) em sete idiomas, faz hash de cada linha e mostra as duplicatas antes de virar problema no seu livro.
Grátis pra começar, 30 lançamentos por mês.