ReservWise gets useful the moment it has real income data to look at. Plaid and Stripe handle the going-forward stream, but if you sign up mid-quarter, your forecasts will look thin until you backfill what already happened. The CSV import is how you do that.

This walkthrough covers the expected file format, the column-mapping wizard, what to do when your bank or platform exports something funky, and how to verify the numbers landed correctly.

You'll need: a CSV export from your bank, payment processor, or accounting tool covering the last 90 days. Most banks and platforms have a one-click export — Wise, Mercury, Bluevine, Stripe, Square, PayPal, QuickBooks, and Wave all do.

Why backfill at all

Forecasting accuracy depends on history. A model that's seen one paid invoice will predict one paid invoice next month. A model that's seen 90 days of pattern — invoice cadence, fee variance, refund rate, slow weeks — will predict ranges that look like reality.

Tax reserves work the same way. If you joined in March and you're a quarterly filer, ReservWise needs January and February's income to give you a defensible Q1 estimate.

You don't have to do this on day one. Most people connect Plaid and Stripe first, use ReservWise for a couple of weeks, and then backfill once they care about the forecast.

The expected CSV format

The minimum is three columns:

  • date — when the income hit your account. Any common format works (2026-04-15, 04/15/2026, 15-Apr-26). Stick to one format per file.
  • amount — a number. Positive means money in. Currency symbols, commas, and parentheses are tolerated and stripped.
  • description — what it was. A client name, an invoice number, a platform name. Used for categorization and dedup.

Three optional columns make the import smarter:

  • category — if you already tag your income (Consulting, Product Sales, Affiliate), include it. ReservWise will preserve your taxonomy.
  • currency — three-letter ISO code (USD, EUR, GBP). Defaults to your account's base currency if missing.
  • fee — if your export breaks out processor fees. Lets ReservWise show gross vs net like the Stripe integration does.

A minimal valid CSV looks like this:

date,amount,description
2026-04-15,2500.00,Acme Co — Invoice #1042
2026-04-12,748.32,Stripe payout
2026-04-08,1200.00,Retainer — Beta LLC
2026-04-02,89.50,Gumroad payout

Run the import

  1. Open Settings → Income → Import CSV.
  2. Drop your file or click Choose file. Up to 25 MB / 10,000 rows per upload.
  3. The wizard parses the first ten rows so you can see what ReservWise sees. Confirm the delimiter (comma, semicolon, tab) is right and your headers were detected.
  4. Map the columns. ReservWise auto-detects most common headers (Date, Amount, Memo, Description, Payee) — verify and correct any it got wrong.
  5. Pick how to handle uncategorized rows: assign them all to one category, leave them uncategorized for later review, or auto-categorize from description (uses pattern rules).
  6. Click Preview import. You'll see the row count, a duplicate-check summary, and any rows the wizard couldn't parse.
  7. If everything looks right, click Run import. It commits in seconds.

Duplicate detection

The wizard compares each row to existing income on three keys: date, amount, and description fingerprint. Exact matches are flagged and skipped by default. Near-matches (same date and amount, different wording) are flagged and shown for review — you confirm whether they're duplicates or genuinely separate transactions.

This matters because most people import after Plaid is already running. Without dedup, you'd see every recent deposit twice.

If your bank export uses negative numbers for income: some accounting tools do this — money out is positive, money in is negative. Toggle Invert sign in the wizard. ReservWise handles it without you re-editing the file.

Where common platforms hide their CSV export

  • Stripe. Dashboard → Payments → Export. Use the Charges report, not Payouts, if you want individual invoices.
  • Mercury / Bluevine / Wise. Transactions → filter date range → Download CSV.
  • PayPal. Activity → Statements → Custom Statement → Comma-Delimited All Activity.
  • Square. Reports → Sales → Export.
  • QuickBooks. Reports → Profit and Loss → Run, then Export → CSV. (Heavier; the wizard will help you pick the income rows.)
  • Wave. Reports → Account Transactions → Filter "Income" → Export.

If the wizard rejects your file

  • "Date column unclear." Two date formats mixed in one file. Open the CSV and standardize, or split into two files.
  • "Amount not numeric." Currency symbols are fine, but text like "approx \$1,200" is not. Clean those rows or skip them in the wizard.
  • "Encoding error." The file is probably UTF-16 (Excel does this on Windows). Re-save as CSV UTF-8 from Excel or open in Google Sheets and download.
  • "Too many rows." Split into 90-day chunks. Imports stack — they don't replace.

After import: verify and re-categorize

Open Income → All transactions and sort by date. Spot-check the first and last rows of your import — they should match the date range you exported. Then look at Income → By category. If a third of your imports landed in Uncategorized, take five minutes to bulk-assign categories. Future imports will learn from those rules.

Forecasts and reserve baselines update within a minute of the import committing. You'll see them on the dashboard refresh.

What to do next

  • Now that you have a real baseline, read Picking your allocation order to decide how new income should flow.
  • If you import quarterly tax data, also see Taxes & Buckets for how to flag historical estimated payments.
  • Forecasting questions or weird results? Email a human with the CSV attached — we'll look.
Ninety days of real history is the difference between forecasts that hedge wildly and forecasts you can actually plan against.
Was this article helpful?
Talk to a human →
All systems operational View status page →