How to read your Nubank statement and find hidden charges
May's Nubank statement landed and there's a R$ 39.90 line you do not recognize. Was last week's IOF R$ 24 or R$ 42? And the budget app you tried already duplicated three charges. This guide reads the Nubank statement line by line in 2026: separates installments from revolving interest from IOF, hunts the forgotten subscription eating R$ 130 a month, and imports without duplicates.
I audited Nubank statements for six people in 2026 (family, business partners, two PJ-incorporated friends) and the pattern is always the same. There are R$ 80 to R$ 180 a month in forgotten subscriptions. Two or three installment plans nobody remembers starting. And every budgeting app they tried duplicated at least one transaction in the first month. This post is the playbook I run when someone DMs me their statement. It's the companion to my general bank-statement guide, narrowed to Nubank specifically because it is the statement that lands in my DMs most often.
How do you read a Nubank statement line by line?
Download the CSV from the app or web. Each row has date (ISO), title (description), amount (BRL, installments already divided), and category (optional). Separate installments, revolving credit interest, and IOF into distinct buckets before any analysis. Group by merchant by sorting on title; group by day by sorting on date. The statement close date is the last date listed, not the due date.
Nubank's statement is one of the cleanest in Brazil, but it has quirks. Unlike Itaú or Bradesco, Nubank lists each installment as a separate row (not the original purchase). That helps you track what leaves your pocket each month, but it complicates seeing the full purchase. Unlike Inter, Nubank does not surface transaction type (purchase, refund, adjustment) in its own column; it is all encoded in the title.
What columns does the Nubank CSV have in 2026?
The default Nubank CSV ships four columns: date in ISO yyyy-mm-dd, title with the purchase description or merchant, amount in BRL with installments already split per month, and category with Nubank's auto label. The OFX export carries additional columns including a unique identifier per transaction, which matters for any app trying to avoid duplicates on import.
date,title,amount,category
2026-05-03,Mercado Pão de Açúcar,184.50,supermercado
2026-05-04,Spotify Premium Familiar,34.90,assinatura
2026-05-05,Magazine Luiza 1/12,127.42,casa
2026-05-08,Uber* viagem,18.90,transporte
2026-05-12,Notion Labs USD,79.45,trabalho
2026-05-12,IOF Notion Labs,2.78,impostos
2026-05-15,Crédito Rotativo,142.18,encargos
2026-05-20,Disney+ Padrão,33.90,assinatura
The title field is where the intelligence lives. Physical merchants come through with their short name (Mercado Pão de Açúcar). App-based merchants come with an asterisk before the service type (Uber* viagem, iFood* restaurante). International purchases come with the merchant name in English plus the implied currency (Notion Labs USD). Installments come with a number/total suffix (Magazine Luiza 1/12, NN/12). Refunds come with a negative amount and a title that starts with "Estorno". Same pattern, month after month, which makes Nubank statements predictable for a well-built parser.
How do installments show up and how do you spot real duplicates?
Each installment is a separate line with a number/total suffix in the title, like "Magazine Luiza 3/12". The amount is that month's installment, not the total purchase. Real duplicates only happen when you re-import the same statement into an app that does not hash the row. Always check title text, date, and amount before assuming a charge was billed twice.
If you have three or four installment plans running at the same time, doing the math in your head is impossible. The shortcut: sort the CSV alphabetically by title and look at sequences. A R$ 1,529 purchase in January became 12x of R$ 127.42; by May you are on installment 5/12 with R$ 891.94 still to come. In July you opened another R$ 800 in 10x, and in October a R$ 600 in 6x. Without summing those three series, you do not know how much of your real limit is already committed.
The classic mistake with installments is treating each one as fresh spending. If you bought a phone in 12x at R$ 250 a month, your May does not have R$ 250 of electronics spending; it has one twelfth of what you already bought. For monthly budgeting, count it as a fixed obligation. For "where did the money go this month" analysis, count it under the original category. Both views are correct, but they answer different questions.
How does Nubank's revolving credit interest work in 2026?
Nubank revolving rates run between 2.75% and 19.99% per month in 2026 depending on the customer's profile. Since the Brazilian Central Bank's 2024 rule, total interest plus charges cannot exceed the original debt. In practice, if you left R$ 1,000 unpaid, the debt tops out at R$ 2,000. Revolving credit also lasts only 30 days; after that the bank must offer an installment plan.
What this looks like in real numbers. Your statement closed at R$ 3,200 and you paid only R$ 1,500 at the due date. The remaining R$ 1,700 entered revolving credit. Next cycle you will see two new lines: "Crédito Rotativo" (the carried balance) and "Juros de dívida encerrada" (the interest charged on those R$ 1,700 at your profile rate). If your rate is 15% per month, that is R$ 255 in interest. If you still cannot pay, Nubank is required to offer an installment plan, typically 12 or 24 months at lower rates (15%/month tends to become 8 to 10%/month on the installment plan). The regulatory cap traces back to the 2024 revolving credit rules and remains in force in 2026.
The cap rule. If you entered revolving credit with R$ 1,000, the total debt cannot exceed R$ 2,000 (R$ 1,000 principal plus R$ 1,000 in interest and charges). That is the regulatory ceiling. But the path to that ceiling is short at 19.99%/month: five months of compounding without payment is enough to hit it. The 30-day revolving window exists so you do not get there.
How does IOF appear on a Nubank statement and how much is it?
Brazilian IOF on international card purchases is a flat 3.5% in 2026 of the BRL-converted amount. On the Nubank statement it shows as a separate line right below the purchase, with a title starting "IOF" and its own amount. International merchants billed in BRL (Stripe Brasil, Spotify BR) do not trigger IOF; only foreign-currency charges that Nubank converts incur it.
Concrete example. You subscribed to Notion Plus at US$ 16 on May 12. Nubank's exchange rate that day was R$ 5.02 plus a small spread, so call it R$ 5.06. The purchase posts at R$ 80.96. Then Nubank posts a separate "IOF Notion Labs" line at R$ 2.83 (3.5% of R$ 80.96). One purchase, two lines on your statement: the first under "trabalho" or "assinatura", the second under "impostos". If you sum just the subscription category, you miss the R$ 2.83 in IOF; if you lump everything under subscription, you inflate the actual service cost.
The 3.5% flat IOF across all international operations (credit card, debit, prepaid, cash exchange) has been in effect since the 2022 unification and continues through 2026, as Wise documents in their updated IOF guide. Before unification the rate ranged from 1.1% to 3.38% depending on the instrument; now it is a single rate.
What recurring charges most commonly slip through unnoticed?
Most-missed on a 2026 Brazilian statement: forgotten streaming (Disney+, Apple TV, Paramount+), cloud storage (Google One, iCloud, Dropbox), legacy antivirus subscriptions, complementary card annual fees, device insurance, and productivity apps that quietly auto-renewed yearly. A 90-day audit typically surfaces R$ 80 to R$ 180 a month in forgotten subscriptions.
The hunt method. Sort the statement by amount ascending. Look at lines between R$ 5 and R$ 60 that repeat (same merchant, close to the same day of the prior month). Cross-reference three consecutive statements: anything that shows up identically in March, April and May is a candidate to cut. For each candidate, open the merchant's app and check what you still use. In 9 out of 10 audits I run, the survivors are a 2023 streaming subscription, a cloud plan nobody opens, and an antivirus that came bundled with an old laptop. Combined: roughly R$ 90/month, or R$ 1,080 a year.
The danger with micro-charges is not the unit price; it is the aggregate volume and the time horizon. A R$ 19.90/month subscription forgotten for 24 months cost R$ 478. Four of them cost almost R$ 2,000 and consume zero mental space because each individual line is "too small to bother". More detail in the bank-statement guide which covers the checking-account side; here the focus is the credit card statement only.
Why do budgeting apps duplicate transactions imported from Nubank?
Most rely on date + amount as the uniqueness key. If two charges happen on the same day, for the same amount, at different merchants, the app may merge them into one or duplicate the first when the next statement comes in. The correct approach is hashing the whole row (date + amount + normalized title) or using the OFX identifier, which Nubank generates uniquely per transaction.
Concrete scenario. You imported April's closed statement and processed everything. On May 15, May's open statement already has 18 lines and you re-import to catch what's new. If the app keys only on date + amount, it compares the 18 new lines against the old ones and flags duplicates wherever date and amount coincide (two R$ 32 iFood orders on the same day, two Ubers, two small grocery runs). The result: some transaction goes missing, another gets double-counted, and the month's balance does not reconcile. You give up on the app by week two.
| App | Imports Nubank statement? | Dedup strategy | Handles installments well? |
|---|---|---|---|
| Mobills | Yes, OFX/CSV | date+amount (fragile) | Mixes installments with new spending |
| Organizze | Yes, OFX | OFX identifier | Good, separates obligations |
| GuiaBolso | Open Finance + manual | Open Finance ID | Good on the automatic path |
| Wallet (BudgetBakers) | CSV/OFX | date+amount (fragile) | Treats installments as single spending |
| Capi | Yes, CSV/OFX/photo of statement | row hash + OFX identifier | Original purchase + payment plan |
How does Capi import a Nubank statement without duplicates?
Capi generates a source_row_hash combining date, amount, normalized title, and the OFX identifier when present. When you import the same statement twice, it detects the collision and skips already-processed rows. Installments become a single purchase with a separate payment plan, revolving interest goes into its own category, and IOF is isolated from the original purchase so per-category spending stays accurate.
Two mechanisms sit behind that. The first is what I internally call patch BD, which normalizes Nubank titles (strips the asterisk from Uber*, standardizes case, removes installment suffixes before comparison). The second is the source_row_hash itself, which combines the normalized fields with the OFX identifier and produces a 16-character key used as a unique index in the database. Import as often as you want; nothing duplicates. If you import the CSV instead of OFX (no identifier), the hash falls back to normalized fields, and the system warns when two rows produce the same hash (rare but real: two R$ 18.90 Uber rides on the same day at different times).
Pricing: Capi Core at US$ 9.90/month or US$ 69.90/year (about US$ 5.83/month annualized, roughly R$ 30 at May 2026 rates). There's a free tier up to 30 transactions per month for testing the import flow. Capi Together adds a shared couple's account at US$ 99/year. The free tier already supports Nubank CSV/OFX import with dedup; paid tiers add higher caps, unlimited photo-of-statement uploads, and the Ask Capi chat for natural-language queries over your own history.
FAQ: reading the Nubank statement
How do you read a Nubank statement line by line?
Download the CSV from the app or web. Each row has date (ISO), title (description), amount (BRL, installments already divided), and category (optional). Separate installments, revolving credit interest, and IOF into distinct buckets before any analysis. Group by merchant by sorting on title; group by day by sorting on date. The statement close date is the last date listed, not the due date.
What columns does the Nubank CSV have in 2026?
The default Nubank CSV ships four columns: date in ISO yyyy-mm-dd, title with the purchase description or merchant, amount in BRL with installments already split per month, and category with Nubank's auto label. The OFX export carries additional columns including a unique identifier per transaction, which matters for any app trying to avoid duplicates on import.
How do installments show up and how do you spot real duplicates?
Each installment is a separate line with a number/total suffix in the title, like "Magazine Luiza 3/12". The amount is that month's installment, not the total purchase. Real duplicates only happen when you re-import the same statement into an app that does not hash the row. Always check title text, date, and amount before assuming a charge was billed twice.
How does Nubank's revolving credit interest work in 2026?
Nubank revolving rates run between 2.75% and 19.99% per month in 2026 depending on the customer's profile. Since the Brazilian Central Bank's 2024 rule, total interest plus charges cannot exceed the original debt. In practice, if you left R$ 1,000 unpaid, the debt tops out at R$ 2,000. Revolving credit also lasts only 30 days; after that the bank must offer an installment plan.
How does IOF appear on a Nubank statement and how much is it?
Brazilian IOF on international card purchases is a flat 3.5% in 2026 of the BRL-converted amount. On the Nubank statement it shows as a separate line right below the purchase, with a title starting "IOF" and its own amount. International merchants billed in BRL (Stripe Brasil, Spotify BR) do not trigger IOF; only foreign-currency charges that Nubank converts incur it.
What recurring charges most commonly slip through unnoticed?
Most-missed on a 2026 Brazilian statement: forgotten streaming (Disney+, Apple TV, Paramount+), cloud storage (Google One, iCloud, Dropbox), legacy antivirus subscriptions, complementary card annual fees, device insurance, and productivity apps that quietly auto-renewed yearly. A 90-day audit typically surfaces R$ 80 to R$ 180 a month in forgotten subscriptions.
Why do budgeting apps duplicate transactions imported from Nubank?
Most rely on date + amount as the uniqueness key. If two charges happen on the same day, for the same amount, at different merchants, the app may merge them into one or duplicate the first when the next statement comes in. The correct approach is hashing the whole row (date + amount + normalized title) or using the OFX identifier, which Nubank generates uniquely per transaction.
How does Capi import a Nubank statement without duplicates?
Capi generates a source_row_hash combining date, amount, normalized title, and the OFX identifier when present. When you import the same statement twice, it detects the collision and skips already-processed rows. Installments become a single purchase with a separate payment plan, revolving interest goes into its own category, and IOF is isolated from the original purchase so per-category spending stays accurate.
Import your Nubank statement without the duplicate mess.
Send CSV or OFX into the Capi chat. It parses, separates installments from revolving from IOF, and dedups by row hash. Free up to 30 transactions per month; Core at US$ 9.90/month or US$ 69.90/year.
Try Capi free on Telegram →