Nimblewit user guide
How accounts, imports, DRIP, trades, prices and the numbers work.
Getting started and accounts
Nimblewit keeps one ledger of everything you do in your brokerage accounts, then works out positions, cost, income and returns from it. Everything you see is calculated from the transactions in that ledger, so the quality of the ledger is the quality of every number.
The dashboard has seven tabs:
| Tab | What it answers |
|---|---|
| Overview | What is it worth, how has it grown, how do accounts compare |
| Holdings | What do I own, at what average cost |
| Performance | How did my money do (money-weighted and simple return), where did the gain come from |
| Income | What has been paid, what is coming, yield on cost |
| Allocation | Mix by region, sector and fund type |
| Trades | Record, edit and import transactions, set cash balances |
| Observations | Plain-language notes about concentration and fees |
The avatar menu (top right) holds Accounts, Import data, Export data and Settings.
Add an account
- Open the avatar menu, choose Accounts, then + Add account. The same button appears on the dashboard. You can also create an account while importing (see below).
- Fill in the details. Only Type matters for the maths; the rest is labelling.
- Save, then add transactions by hand or import them.
| Field | What it does |
|---|---|
| Institution, Nickname | Labels. With no nickname the account is named "Institution Type", for example "Fidelity RRSP". |
| Type | RRSP, Spousal RRSP, TFSA, FHSA, RESP, Family RESP, LIRA, RRIF, LIF, Non-registered or Other. It decides whether estimated US dividends have 15% withholding taken off (none in RRSP, Spousal RRSP, LIRA, RRIF and LIF; 15% in the rest). |
| Currency, Owner | Labels (CAD or USD; Me or Spouse / partner). |
| Paper account | A test account. It is left out of the "All accounts" totals unless you select it. |
| Cash balance and As of | What the account held in cash on that date. Later transactions adjust it. Transactions dated before the As of date are treated as history and leave cash alone. |
| Statements from | The first date your records cover completely. It changes how your return is calculated (see Metric definitions). |
| Estimate distributions automatically | On by default. Nimblewit adds estimated dividends from market data. Turn it off if you import every dividend from your statements. |
| Note | Free text, such as an account number. Import uses a four-digit-or-longer number here to match statement accounts to this account. |
To hide an account without losing its history, choose Archive from the ⋯ menu. Delete removes the account and everything in it, and asks you to type the account name first. Export it first if you might want it back.
Importing your history
Open Import data from the avatar menu, or Import a statement on the Trades tab. You choose a file, Nimblewit lists every transaction it found, and nothing is saved until you review the rows and press Import.
What you can upload
| File | How it is read | Limits |
|---|---|---|
| CSV, TSV, Excel (.xlsx, .xls, .xlsm, .ods) | Nimblewit matches column headings (date, action, symbol, quantity, price, amount, currency, account, commission) to a known list, in your browser. No AI is involved. | 20 MB per file, 5,000 rows per import |
| PDF statement | Sent to Claude (Anthropic) to read, then shown for review. | 3 MB per PDF |
| Screenshots or photos | Sent to Claude to read. You can paste them onto the page with Ctrl/Cmd+V. | 10 images at once |
| Nimblewit .json export | Restores a backup: accounts, transactions, prices, value history and settings. Tick Replace my current data only if you want existing data wiped first. |
If a spreadsheet's columns are not recognised, Nimblewit falls back to having Claude read the file text. The page says when it does this. PDFs, screenshots and these fallbacks share a limit of 20 reads per hour.
The review screen
- Which account. Each account number found in the file gets a drop-down. Nimblewit pre-selects an existing account when the number matches the account's name or note. Choose an account, create a new one, or choose "Don't import these".
- Tick boxes. Rows Nimblewit is confident about are ticked. Rows it could not classify, or that are missing a symbol, share count or price, are left out and explained in the Notes column. Use Show left-out rows to see them.
- Duplicates. A row is unticked as "Already in this account" when the ledger has a transaction with the same date, type and symbol and the same share count (for trades) or amount (for cash). This is what makes overlapping exports safe. Tick the row if it really is a second identical transaction.
- Undo. Every statement import is listed under Trades, Imports. Undo import deletes exactly the transactions it added.
After you import, Nimblewit adds any new securities, queues their prices and distribution history, and builds estimated distributions. Prices usually fill in within minutes; a long history can take longer because providers have daily limits.
Which transactions matter
Your positions, cost and returns are only as good as the history behind them. In order of importance:
| Transaction | Why it matters |
|---|---|
| Buys and sells, from the very first | They build each position and its average cost. One missing buy makes the cost too low and the gain too high. |
| Contributions, grants (CESG, CLB), transfers in, withdrawals, transfers out | This is the money that crossed the account boundary. It drives your money-weighted return and the cash balance. |
| Dividends and distributions | They feed Income and cash. You can skip them if the account estimates distributions automatically. |
| Interest, rebates, fees | They move cash and show in "How you got to" on Performance. |
| Stock splits | They add shares at no cost. Nimblewit adds them itself from market data; a statement's split line is recognised too. |
| Currency conversions | Not imported. Nimblewit converts USD itself, so these lines are deliberately left out. |
| Holdings summaries, balances, totals | Not transactions. Leave them out. |
Full CSV or statements?
Use one full-history CSV or Excel export whenever your broker offers it. It is the fastest route and needs the least checking.
| Full CSV or Excel export | Statements (PDF or screenshots) | |
|---|---|---|
| Speed | Seconds, one upload | Each file is read separately and can take up to a minute |
| Accuracy | Figures come straight from your broker's columns | Read by AI, so check figures against the statement |
| Privacy | Read in your browser when the columns are recognised. If they are not, the file text is sent to Claude. | Sent to Anthropic's Claude to read. Not kept unless the read fails (see below). |
| History | As far back as the broker's export goes | One period per file |
| Best for | Everything, when available | Brokers with no export, old accounts, workplace plans |
If your broker limits how far back one export goes, download several and import them one after another. Overlapping rows are caught as duplicates. The exporting guide lists where to look for 12 brokers.
What happens to your files
CSV and Excel files with recognised columns are read in your browser and are not sent anywhere. PDFs, screenshots, and spreadsheets whose columns Nimblewit does not recognise are sent to Anthropic's Claude API to read the transactions, and Anthropic does not use them to train its models. You review every row before anything is saved.
A file that is read successfully is not kept. If a read fails or finds no transactions, Nimblewit keeps a copy of that file in private storage so the problem can be fixed, and you can ask us to delete it at any time.
Turning statements into one CSV with the prompt
The Import page has a section called Or convert it yourself, in your own AI. Use it when you would rather not send statements to Nimblewit, when you want to combine a year of monthly statements into one import, or when a statement is a scan or a workplace-plan summary.
- Click Copy prompt (or Download prompt (.md)).
- Open Claude or another AI assistant, attach your statements (one or many), and paste the prompt.
- Ask for the result as a downloadable CSV file.
- Upload that CSV on the Import page and review it like any other file.
The prompt asks for these columns, in this order: Date, Action, Symbol, Description, Quantity, Price, Amount, Currency, Account, Commission, Notes. Its key rules:
- Dates as YYYY-MM-DD, using the trade date rather than the settlement date.
- Action is one of Buy, Sell, Dividend, Contribution, Withdrawal, Transfer In, Transfer Out, Grant, Interest, Fee, Rebate.
- Symbol has no exchange suffix (XIC, not XIC.TO). Canadian mutual funds use the fund code as printed (for example RBF554) with the full fund name in Description.
- Quantity and Price only for buys and sells, and only if the statement prints them. Nothing is calculated or guessed.
- Amount is always positive; the Action carries the direction.
- A DRIP purchase is a Buy. A stock split is a Buy at price 0 noted "stock split". Currency conversion lines are left out.
- A dollars-only fund purchase (common on group RRSP statements) is a Buy with Amount and no Quantity or Price.
Dollars-only rows. Nimblewit leaves these unticked and offers Fill in N rows. It works out shares as the dollar amount divided by the security's month-end closing price for the purchase month, where the purchase date is the statement date plus the number of days you set (default 2), moved to the next weekday. This is an estimate, not the price you actually paid. Rows it fills are marked as estimates. If a fund has never been priced it asks you to refresh prices and try again.
DRIP (dividend reinvestment)
Every holding starts as Paid as cash: distributions are credited to the account's cash. If your broker reinvests a holding's distributions, tell Nimblewit so the extra shares show up in your share count and cost.
How to set it
- Open the Income tab and scroll to the Dividend handling card.
- Find the account and symbol. The setting is per holding, so the same fund can be DRIP in a TFSA and cash in a non-registered account.
- Choose from the Distributions drop-down: - Paid as cash: no shares are bought. - DRIP, fractional shares: each distribution buys shares, including fractions, down to 4 decimal places. - DRIP, whole shares only: each distribution buys as many whole shares as it covers. The remainder stays in cash and is noted on the row.
- The holding's estimates are recalculated as soon as you choose. There is no Save button.
If the account's Estimate distributions automatically box is off (Accounts, edit), the drop-down is replaced by "From statements only" and DRIP does nothing. Nimblewit will not invent distributions or reinvestments for that account.
What Nimblewit does when DRIP is on
For each distribution in the security's published history, after your first purchase, Nimblewit adds two linked rows marked est. on the Trades tab: a Distribution, and a Buy for the reinvested shares.
- Shares eligible are the shares you held before the ex-dividend date, counting earlier DRIP purchases, so reinvestment compounds.
- Purchase price is that month's closing price, or the latest price if the payment falls in the current month. It is not the price on the payment day, so estimated DRIP share counts are close but not exact.
- Cost of the new shares is added to the holding's book cost.
- US securities have 15% withholding taken off the estimated distribution in every account type except RRSP, Spousal RRSP, LIRA, RRIF and LIF. USD amounts are converted at that month's USD/CAD close.
- Toronto-listed securities only publish monthly totals, so their payments are dated to the last trading day of the month and noted as approximate.
Real records beat estimates
- If you import a real distribution paid within 12 days of an estimated one, the estimate and its DRIP buy are dropped.
- You can edit an estimated row. Once edited it is kept exactly as you set it, and its partner row is kept too.
- Deleting an estimated row deletes its partner and remembers the deletion, so it is not recreated.
- To correct a whole holding, use Recalculate holding in the ⋯ menu beside its symbol on the Holdings tab. It rebuilds the estimates from scratch and never changes trades you entered or imported.
When Nimblewit thinks DRIP should be on
If DRIP is off but a real purchase with no commission lands within days of a distribution, the status bar shows an item to review: Check whether DRIP should be on. Choose This is right if the purchase was unrelated, or turn DRIP on for that holding on the Income tab.
If you import your broker's own reinvestment rows, import the matching dividend rows as well, or turn off automatic estimates for that account. Otherwise Nimblewit can estimate a distribution and a reinvestment that your statement already shows as a bare purchase.
Adding, editing and correcting trades
Everything here happens on the Trades tab. Whatever you change, positions, cash, income and returns recalculate straight away.
Add a trade by hand
- In Record a transaction, choose the Account and the Type.
- Set the Date.
- For a Buy or Sell, enter the Symbol (ticker only, like XIC or VFV), Shares and Price / share, and Commission if you paid one. The preview shows the value in CAD.
- For a distribution, contribution, grant, transfer, withdrawal, interest, rebate or fee, enter the Amount (CAD) instead. Give a Distribution a symbol so it counts toward that holding's income.
- Press Record it. The form keeps the account, type and date so you can enter the next one.
Things to know:
- Enter the price in the security's own currency. For a symbol you already hold, the currency is set for you. For a new symbol, pick CAD or USD. USD trades are converted to CAD when calculating cost.
- A Sell cannot be larger than what the account holds on record.
- Enter a trade as it actually happened: the shares and price on the day, before any later split.
- Transfer in and Transfer out move cash only. They do not move shares between accounts. To move a holding between accounts, record a Sell in one and a Buy in the other, or use an import.
- Set each account's cash balance once under Cash balances on the same tab. After that, every transaction adjusts it.
Edit or delete a trade
- Click any row in the Ledger, or open its ⋯ menu and choose Edit. A drawer opens. Change what you need and press Save changes.
- Delete is in the same menu and at the bottom of the drawer.
- Tick several rows to delete them together or Move them to another account.
- Filter by symbol, type, date range or source: Entered by hand, Imported or Estimated.
What editing does to related figures:
- Changing a trade's type, symbol, shares, price or commission clears the broker's settled CAD amount that came with an import. The cost is then recalculated as shares × price × exchange rate, plus commission. Changing only the date or account keeps it.
- Editing an estimated (est.) row keeps it exactly as you set it from then on.
- Deleting an estimated distribution also deletes its DRIP buy and remembers the deletion.
Change a transaction with the wrong split
Stock splits add shares and leave your total cost unchanged. Nimblewit adds splits itself, from market data, for every holding bought before the split date. A split row shows as Split with its label, such as 10-for-1, and est. when automatic. Pick the case that matches:
| What is wrong | What to do |
|---|---|
| The ratio is wrong | Click the Split row, change Split ratio, and save. Type it as new shares : old shares: 10:1 for a 10-for-1 split, 1:10 for a reverse split (3:2 and 10-for-1 also work). The added shares are recalculated from what you held just before that date. |
| The split never happened, or is a duplicate | Delete the Split row. It is remembered and will not come back. |
| A split is missing | Record a transaction of type Stock split with the symbol, date and ratio. |
| You entered the purchase already adjusted for a later split | Edit the Buy to the shares and price you actually traded at, before the split. Nimblewit adds the split itself. Leaving both gives you the split twice. |
| The share count still looks stale after a fix | On Holdings, open the ⋯ menu beside the symbol and choose Recalculate holding. |
A ratio very close to 1 (for example 0.987) is never treated as a split. Canadian ETF issuers report year-end unit consolidations that way, and they change nothing for you.
A split line in a broker statement is imported as extra shares at no cost. A split already in your ledger within 7 days of a statement split is not added a second time.
Verify the original purchase
Your cost and gain depend on the first purchase being right. For any holding you doubt:
- Filter the Ledger by the symbol.
- Compare each Buy with your broker's trade confirmation or statement line for that day: date, shares, price, commission and total.
- The shares and price must be the ones on the day, before any split. Prices copied from a chart or finance site are often restated after splits, which makes both shares and price wrong by the same multiple while the total still looks right.
- On Holdings, check that Avg cost CAD × shares matches your broker's book cost.
Nimblewit also watches for common problems and lists them under items to review in the top bar. Each has This is right and Not sure, flag it. A confirmed item stays quiet until the holding changes.
| Item | Trigger |
|---|---|
| Possible missed split | Market value is under 20% of what you paid |
| Check the price you recorded | A recorded price is more than 2.5 times, or under 0.4 times, that month's closing price |
| Check for a missing currency conversion | A USD security with a trade booked as if it were CAD |
| Check whether DRIP should be on | A no-commission purchase lands near a distribution |
| Confirm which listing this is | A symbol that trades on both the TSX and a US exchange (banks, energy names). You can switch it between CAD and USD. |
When prices update
Nimblewit shows end-of-day closing prices, not live quotes. Prices update once a day after the market closes, so they change at most once per trading day. The status pill in the top bar says where you stand, for example "Up to date · Sep 29 close".
The schedule
| What | When |
|---|---|
| Daily price update | Every day at 6 pm Eastern in winter and 7 pm in summer (23:00 UTC), after the 4 pm close. Every symbol you hold is queued once, and each symbol is fetched once for all users. |
| Background queue | A worker runs every 5 minutes and fetches whatever is queued, within each data provider's daily limits. Anything that does not fit waits for the next run, so a large import can finish over a day or more. |
| After an import | New symbols are queued at once and the worker starts straight away. Prices usually fill in within minutes. |
| Distributions and splits | Not re-checked daily. Nimblewit learns each security's rhythm (monthly, quarterly, twice a year, yearly) and checks about 10 days before the next expected ex-date, then weekly until it appears. It never waits more than 90 days. Toronto ETFs only publish a monthly total after the month ends, so their payments show a few days after month-end. |
| Daily value snapshot | Saved each evening after prices, which feeds the 1-month and 3-month chart views. Until enough days exist, those views start from the last month-end. |
| Open queued items | While prices or distributions are queued, the dashboard checks back every minute, up to 15 times, so they appear without a reload. |
The pill turns amber when prices are 2 or more trading days behind or items are still waiting, and red when a refresh failed or prices are 5 or more trading days old. Click it to see which symbols are waiting and why.
Retrying a refresh
Prices update by themselves every evening, so there is normally nothing to press. If the status pill turns amber or red, click it. The panel lists the symbols that are waiting or failed, and why, and offers Refresh prices now.
- It is limited to once every 3 minutes. Pressing it sooner says "Just refreshed, try in N min".
- It skips any symbol whose stored price is already the latest expected close (today after 4:30 pm Eastern on a weekday, otherwise the previous weekday), and any symbol already checked since the 6 pm close, by you or anyone else.
- For the rest it asks the price providers in order: EODHD, then Marketstack. USD symbols neither of them can price go to Twelve Data. Anything still unpriced, and all mutual funds and London listings, go on the background queue.
- It fills in missing month-end values for accounts without history, saves today's value snapshot, and makes sure the benchmark funds are current.
- It reports the outcome: "Updated 6 · 2 queued", "Prices are current" or "No newer prices".
A new price that is more than 20% away from a live price fetched in the last 7 days is rejected as suspect, and so is a price whose currency does not match the security's.
Metric definitions
All figures are in Canadian dollars. A US holding's price is shown in USD, and everything else about it is converted to CAD, so it can move on the exchange rate alone.
Value and cost
| Metric | Definition |
|---|---|
| Market value | Shares × latest closing price × exchange rate (USD/CAD for US securities). |
| Cash | The balance you set plus every transaction dated after the As of date. If you never set one, it is estimated from your activity and never shown below zero. |
| Portfolio value | Market value of holdings plus cash. |
| Book cost (ACB) | What you paid, on an average-cost basis. Each Buy adds what it settled for in CAD, commission and exchange rate included. A Sell removes cost at the current average. A split adds shares and no cost. The settled CAD amount from your broker is used when known; otherwise shares × price × exchange rate, plus commission. |
| Avg cost | Book cost ÷ shares. |
| Unrealised gain | Market value − book cost, for what you still hold. |
| Realised gain | Sale proceeds − the average cost of the shares sold. It stays on the record after a position is closed. |
| Simple return | Unrealised gain ÷ book cost. It ignores when money went in. |
| Day change | Shares × (latest price − previous close). |
Income
| Metric | Definition |
|---|---|
| Received (income) | Every Distribution on the ledger, real or estimated, in the period. The tile says how many were estimated. |
| Projected annual income | For each holding: shares now × the security's distributions per share over the last 12 months. It assumes the same payments continue. It is not a forecast, and a holding with no payment history shows nothing. |
| Income per month | Projected annual income ÷ 12. |
| Yield on market value | Projected annual income ÷ market value. What the portfolio yields at today's prices. |
| Yield on cost | Projected annual income ÷ book cost. What the same income yields on what you paid. It rises as distributions grow or as you hold while prices climb. |
Yield on cost = (shares now × distributions per share over the last 12 months) ÷ book cost
The Income tab's Yield on cost card compares this with what the same book cost would yield if bought today, and shows distributions received in the last 12 months against the 12 before.
Returns
| Metric | Definition |
|---|---|
| Your return, All time (money-weighted, XIRR) | The annual rate that makes all your cash flows worth today's portfolio value, counting each dollar for how long it was invested. Inflows are the contributions, grants and transfers in on or after the account's Statements from date, and outflows are withdrawals and transfers out. Before that date, or with no date set, each Buy stands in as money in and each Sell as money out. The end value is holdings plus cash. |
| Your return, a chosen period | Modified Dietz on the invested holdings (cash left out): gain after money added ÷ opening value plus time-weighted flows. Shown as a yearly rate only for periods over about a year. |
| Growth, All time | Unrealised gain + realised gain + distributions received. |
| Growth, a period | Change in holdings value over the period, after the money you added. |
| Money you put in | Contributions, grants and transfers in (plus Buys before the statement start). |
| vs benchmark | The same dated buys, sells and distributions replayed into the benchmark fund, with its distributions reinvested, compared with your return. |
0 = Σ CFᵢ ÷ (1 + r)^((tᵢ − t₀) ÷ 365.25)
The rate is found between −95% and +500% a year. Outside that range, or with only inflows or only outflows, the tile shows a dash.
The How you got to $X card on Performance adds up every source: money in, money out, unrealised and realised gains, distributions, interest and rebates, fees. Anything your records do not explain is shown as Not explained by your records instead of being hidden. That line is usually a missing early transfer, withdrawal or fee, or a cash balance set by hand.
Found a bug, have an idea, or stuck? Email hello@nimblewit.app and we will get back to you.