v1.7.4 · September 4, 2026
🏠 Mostly about what you track by hand: a CSV from your own bank is now an import source, an asset opens the same panel as an account, and Add Transaction can record a payment from one. Alongside those, a run of fixes to what arrives from a connected bank, and two places a response we could not read was showing you too much.
New
- Import a CSV straight from your bank. The wizard offered Monarch Money only. It now takes a statement downloaded from any bank, working the columns out from their headers in English or French. You name the account on the upload step, since most bank files do not name it, and last four digits in that name match it to an account you already have. A running balance column fills in your net worth history too.
- Add Transaction can record a payment from an asset. Pick one of your manual assets instead of an account and the form becomes a payment: what you received, how much of it is capital coming back, and the rest counted as income. The capital half comes off the asset's value.
- A manual asset opens the same panel as an account. It carries a value chart with 1W, 1M, 3M, 1Y and ALL, and the change across that window. The row ends in a chevron now, rather than a three-dot menu holding two of the actions the panel already offers.
- The details on an asset read like the form you filled in. A valuation date printed as 2026-09-02T00:00:00.000 and an ownership stake as a bare 80, under labels made by chopping up the field name. They are the form's own labels now, in your language.
Improved
- One "Add manually" in place of two buttons. "Add a manual account" and "Add a manual asset" asked you where we keep the record. A single entry now asks what you are adding. Backing out returns you to that question, and back again to the search, rather than ending the whole flow.
Fixed
- The weekly email prints a bill in the currency your bank will charge. It put your own currency's symbol in front of a foreign amount, so a bill charged in US dollars read as a Canadian one.
- Connecting a bank mid-sync no longer costs you a recurring scan. Two scans for one person could overlap, and the losing one threw its whole pass away at the first collision. Nothing said so.
- The dashboard shows what your bank just sent. New transactions, balances, holdings and liabilities were stored and then not shown until the cache aged out. The day's net worth kept its pre-sync figure for the rest of the day.
- A first history pull is no longer cancelled with nothing waiting for it. The two-year backfill was cut off after ten minutes either way, and a bank does not send that one again, so the rest waited for the nightly sync. It is cut short now only when something is queued behind it, or after an hour.
- Investment transactions no longer wait for the nightly pass. An update pushed for one of those accounts re-walked two years of history, ran out of time, and threw away every page it had fetched. Those pushed updates read the recent window now.
- A connections check we cannot read says so. The accounts page fell back to the screen a brand new user sees, hiding a bank that needed reconnecting behind an invitation to connect your first. It now says it could not check, with Try again, and asks you to reload when the answer is one this version cannot read.
- An asset is no longer shown as worth nothing over a missing field. A missing value became a zero on the asset's row and in your manual-assets total, a missing currency became Canadian dollars, and a deactivated asset came back. That zero also prefilled the edit dialog, so saving wrote it over the asset's real value.
- The trial emails stop contradicting each other. On day three one said you had not connected an account and the next, two hours later, said you had. On days thirteen and fourteen an empty dashboard was asked for a card, then told its connections had stopped refreshing. Each matches what your dashboard holds now, and day fourteen ends with one message rather than two.
Security
- What you typed to find your bank is not kept. The diagnostics we record about a connection attempt stored our provider's whole event record, search box text included. They are cut back to a fixed list of fields that carries nothing you type, and the rows already stored are cleared.
- A response we cannot read no longer puts a value from it on screen. In the browser build the message carried the offending value with it, so a money figure retyped on the server side would have reached the screen. You get a plain "some data appears corrupted" message now, and the field name goes only into the report we send ourselves.
v1.7.3 · September 2, 2026
🏦 Mostly about getting past the bank connection: a warning before you try a bank that will not work for you, and a way out of the step when none of them do. Alongside them, a spreadsheet of your recurring bills, and a run of fixes to what happens once a connection is made: accounts that never arrived, transactions that stopped, and a notifications panel that would not open.
New
- The Recurring page exports to a spreadsheet. Export CSV downloads the month you are looking at, one row per item: the account it belongs to, the name it goes by, whether it is paid, upcoming or overdue, and the amount.
Improved
- RBC carries a warning in the bank picker. The row says the connection usually fails when 2-step verification is on at RBC. Our connection provider cannot answer the check that bank sends, so those attempts cannot succeed however many times they are retried. The row still works, since an account without 2-step verification connects fine.
- Setting up no longer traps you on the bank step. If nothing will connect, "I'll do this later" moves you on, and the request stays on the Getting started checklist rather than being spent at the worst possible moment.
- Every connection choice names the provider serving it. Where a bank can be reached two ways, the step used to describe each route, and the descriptions were wrong. Measured against one Wealthsimple account held both ways, the route labelled "Cash and spending" returns the investments and their holdings, and the one labelled "Investments and holdings" returns the chequing accounts. Both rows carry the bank's name now, with a badge naming the provider, and the old labels are gone from every bank rather than the one we measured.
- The connection choices line up. On the step that exists to compare two ways of reaching the same bank, the provider badges sat at different edges of the row, and each was coloured by provider. That striped the list along a distinction that is our plumbing rather than anything about your bank, and it spent the two colours that carry meaning in that window on rows where they meant nothing. Every badge is neutral now and sits on the same edge, so colour there is back to marking what we recommend.
- One row for TD Direct Investing. It sat beside "TD Canada Trust - WebBroker", a dead end under a more precise sounding name: our connection provider does not list that one with the transactions we ask for, so it cannot open at all. It is withheld now, even from a search for its own name.
- The email about your trial ending stops asking for a card when there is nothing to pay for. If your dashboard is empty it points you at adding an account instead. If it holds something, it opens with what is actually in it before it asks.
Fixed
- The notifications panel opens again. A single notification we could no longer read took the whole panel down with it: the list would not load at any point, and there was no way to reach the row causing it and dismiss it. A row we cannot read now appears in place, holding a note saying so, and can be cleared like any other. The rest of the list loads around it.
- Two cash balances in one account no longer break a bank's holdings update. Both arrive under the same name, the write refused the pair, and that took down the holdings for every account on the connection. They are added together now. One connection had gone without a holdings update since the day it first happened.
- A brokerage that connects before its accounts exist is asked again. SnapTrade announces the connection ahead of its own account list, we asked once about a second later, and an empty answer was taken as final. Nothing came back to fill it until the next day's sync, while the page told you the import had failed. It now asks again three times across the following half minute.
- Transactions that stopped arriving get unstuck. The nightly attempt to restart a connection whose transactions had stalled gave up after ten seconds, which is less time than that request usually takes. It had not once completed since it started running. It now waits long enough to finish, and one connection is retried per run so the request cannot crowd out the rest of a sync.
- Starting a bank connection over no longer discards the one you finish. If you backed out and began again, the abandoned attempt could take the result belonging to the new one, so a connection you completed at your bank was thrown away without a word. Each attempt now keeps its own result, and the app hears from your bank as it happens rather than checking twice a second for an answer.
- The Recurring page adds up one currency. A month holding accounts in more than one currency was added together as though all of it were in yours. It showed on the page, and since the export shipped it reached the spreadsheet too, where nothing marked the amounts as unconverted. Every amount is converted to your base currency before it is added now, and the total names the currency it is in.
- A truncated link no longer costs you the rest of it. When a link arrives cut short, by a mail client folding it or a shortener, one damaged character used to take everything else on the address down with it: your language, a promo code, and the referral crediting whoever invited you. On the link that verifies your email address it was worse, and the app rendered nothing at all for the rest of the session. The unreadable piece is dropped now and the rest is read.
- Asset types are translated. The chips naming what an asset is stayed English inside an otherwise translated window, and on the asset card.
Security
- Your account names and balances are no longer written to our logs. Every net worth calculation recorded both. It records an identifier, the currency and whether the account is active.
v1.7.2 · August 31, 2026
🔎 Mostly about finding your bank: one row per brand instead of two, a search that matches the way people type, and no country to pick first. Alongside them, a mortgage counted twice, a transactions page showing a single row, and accounts that connected but never showed a transaction.
New
- One row per bank in the picker. A bank you can connect two ways used to show up twice, under names that did not look related. It is one row now, and we ask which connection only where there is a real choice.
Improved
- The bank search finds what you meant. "rbc bank" and "amex" used to return nothing.
- No country switch when adding an account. Canadian and American banks are both listed from the start.
- The subscription page is translated. The plan cards, the loading screen and the pricing error were in English for everyone.
- The subscription page stops listing a connection we do not offer. It describes repairing a connection instead.
- The pricing page shows both plans. The free plan has its own card, its own price and its own button, beside the paid one.
- Deleting your account asks why. The question comes after you have chosen how to leave, and a reason is needed to confirm.
- "Sync now" refreshes your investment transactions. It used to report success without fetching them. It covers the last 30 days, so a longer gap still fills in on the nightly run.
Fixed
- An account that connected but never showed transactions un-sticks itself. A first import can silently never finish, and nothing revealed it: balances kept updating, no error appeared, and you simply had an account with no transactions. One had been stuck six days, another two and a half months. A nightly check now restarts the import.
- The bank search during setup stops spinning forever. Setup is the only place that fills the search box for you, and it was the only one that never showed a result: the matches arrived behind a spinner with nothing left to wait for.
- Institution initials stop showing punctuation. Where a logo was missing, a name carrying a qualifier painted it, so "Wealthsimple (Canada)" rendered as "W(".
- A mortgage is no longer counted twice, which could show your net worth as negative.
- The transactions page stops showing only one or two rows, and its dates follow your language.
- The page after checkout waits for confirmation instead of announcing a subscription it has not confirmed yet.
- A magic link opened with the wrong address returns you to the address prompt instead of a dead end.
- The cookie notice no longer covers the price line on the homepage.
- The prompt to subscribe before connecting a bank is a proper dialog again, not a bar across the window.
- Two chips on the subscription page follow dark mode.
- The Getting started card sits where it belongs on desktop.
- A brokerage history refresh no longer gives up early because of time it did not spend.
Security
- Crash reports no longer carry your figures. A failure while preparing your dashboard summary could send the numbers behind it to our error tool.
v1.7.1 · August 28, 2026
🔧 A fix release. Connecting a bank stops giving up while you are still logging in, a failed renewal card no longer shuts you out of the app, and signing out clears what the session left on the browser.
Improved
- Coming back from your brokerage no longer waits on the sync. It used to sync every account, holding and transaction before redirecting you, so you sat on a blank page.
- A sync your brokerage starts on its own refreshes what you see. That path never announced it had finished, so the dashboard kept serving the figures from before.
- Finishing setup responds to the tap. "Open my dashboard" could sit unchanged for about two minutes on a slow connection. It shows a spinner now, and hands itself back if it fails.
Fixed
- A failed renewal card no longer shuts you out of the app. You were refused the whole app while Stripe was still retrying, which runs about three weeks. You now keep the access a lapsed membership has, and only the automatic refresh waits on a working card.
- Connecting a bank no longer gives up while you are still logging in. The wait is measured from your bank's last signal rather than from when the window opened, so only a dead session expires.
- A night when every bank refuses no longer reports itself as synced. It stamped your last sync time either way. The dashboard now keeps saying your balances are stale.
- The accounts list stops emptying itself after a dashboard visit. The dashboard was writing a shortened copy of your accounts over the full list.
- A transaction you add by hand shows its category and its account. The category chip rendered a bare number and the account column was blank. Rows written before this keep the values they were given; picking the category again from the row repairs one.
- A mistimed tap during setup can no longer skip the consent screen. A second tap landing before the repaint was answered against the step you had already left.
- The sync progress notice is readable in dark mode. Two phases painted a light mode background whatever the theme.
- Budget rows on the dashboard are translated. The card printed each category name exactly as the server sends it, which is English. A category you named yourself is left alone, unless you gave it exactly the name of one of ours.
Security
- Signing out clears what the session left on the browser. On a shared computer the next person to sign in could still read the previous session's figures. Your language, your theme and any referral code are kept, and anything you changed offline and had not yet sent is cleared with it.
v1.7.0 · August 27, 2026
✍️ Mostly about what you can keep by hand. Holdings and balances in an account that stopped syncing can be corrected, a private investment can record what it pays you and split it between capital and income, and the dashboard offers to separate business money to the people who asked for it during setup. Setting up an account is also one flow for everyone now, instead of two.
New
- A private investment can record what it pays you. An asset keeps its own list of distributions, each split between return of capital and income. The capital half lowers the position, the income half leaves it alone, and net worth counts the money once rather than twice.
- Holdings in an account that no longer syncs can be corrected by hand. Editing and removing now follow the account rather than who typed the holding, so a brokerage account stopped by a lapsed subscription can be maintained from the drawer.
- A frozen balance can be updated from the account drawer. Update balance appears on the accounts you are allowed to edit, and on none that is still syncing. A debt asks for the amount owed, and on an account that also holds positions the field is the cash balance rather than the account's total.
- The dashboard offers to separate business money. If you asked for that during setup and have not made the split yet, a one-time card creates the business book and opens the account picker in one pass.
Improved
- Setting up an account is one flow for everyone. There were two, picked by a marker in your browser, and one replayed the whole thing after your account already existed. No question changed.
- The homepage says the free plan exists. Nothing above the fold did. In English, French, Spanish and Chinese.
- Desjardins has a page of its own, in English and French. Our bank pages had covered the Big Six and stopped there. It states the two limits worth knowing before you connect: a Desjardins mortgage arrives as a balance alone with no rate or payment detail behind it, and Disnat positions cannot be connected at all.
- Our announcement emails read better, and their unsubscribe link stays valid. Sections can be real headings now, and the link stays good for at least 63 days rather than one or two weeks.
Fixed
- An account stopped by a lapsed subscription no longer needs attention forever. A separate check measured it against the staleness rule using a frozen timestamp, and nobody could clear it.
- Actions that cannot work are no longer offered on a stopped connection. The menu offered to stop a sync that had already stopped, and to disconnect a connection we had already removed.
- A second login at the same brokerage no longer retires the first. A login is recognised by the authorization it was issued rather than by which brokerage it belongs to.
- A failed read of your accounts no longer looks like an empty account list. Being offline now says so and offers a retry, and a server fault is reported as a fault.
- One wedged refresh no longer blocks every other bank update. A run that outlasts ten minutes is cancelled and its slot handed back.
- A scheduled cancellation shows up in the app. The Settings billing card read exactly like a healthy subscription, so the only signal was an email.
v1.6.1 · August 24, 2026
✉️ A short release, mostly about email: the messages about your subscription had not caught up with the free plan and were telling people their access had ended when it had not. Bank updates also stop waiting for the nightly run.
Improved
- Two emails we used to send are gone. The first-week check-in, and a day 11 discount written to hold on to someone facing a lockout the free plan removed.
Fixed
- Your bank's updates arrive when your bank sends them, rather than the next night. A message arriving while another refresh was running waited two minutes and was then discarded. Nothing was lost, since the nightly refresh collected the same transactions, but new activity could show up a day late.
- Our emails about your subscription stop telling you your access has ended. Six of them still described the old lockout, in every language.
- A locked database row no longer fails a whole brokerage refresh. The collision is handled where it happens, so the rest of the refresh finishes.
v1.6.0 · August 24, 2026
🗂️ Two changes worth the version number: business money and personal money can now be kept in separate books, and a trial running out no longer locks you out of the app. Underneath them, a run of figures that were confidently wrong, reconnect buttons that repaired the wrong bank, and a verification email nobody was receiving.
New
- Business money and personal money can live in separate books. Create a second book in Settings, assign accounts to it, and everything under the sidebar switcher follows. Assignment is per account rather than per transaction, categories stay shared, and the switcher stays hidden until a second book exists.
- Money you move between your own books shows up as an owner's draw. A transfer out of one book matched to a transfer into another gets its own band in cash flow, outside each book's operating totals. Both sides have to be connected.
- When your trial ends, the app stays open. Mozaic is free to use and you pay for the bank connections. Everything you can do by hand stays yours, including your existing accounts and history.
Improved
- The net worth chart's line view is a line again. It scaled across assets, debt and net worth together, so all three drew as flat rules. It scales to net worth alone now. Assets and debt are no longer drawn as lines there, but they still report in the hover tooltip and the bars view still compares all three.
- "Sync now" says which part failed, and stops offering a retry that cannot run. A holdings-only failure says so, and the retry button appears only when a retry would actually reach your bank.
- A broken connection banner names each bank, and repairs the one you picked. It counted them correctly and then repaired exactly one, chosen arbitrarily, without saying which.
- Add Account from the dashboard offers everything Accounts does. It was missing "Import from another app" and "Add manual asset".
- "Last updated" means a balance actually arrived. The timestamp moved on every attempt, including ones that came back with nothing.
- The coverage page stops implying 21 banks is the whole list. The app searches the entire catalogue, roughly 200 Canadian and 10,000 American institutions.
- The paywall says what paying actually buys. Its list of four benefits named things the free plan already does.
- The TFSA and FHSA room pages answer more than the arithmetic. They now cover withdrawal timing, the CRA's own lag, the over-contribution penalty, and when FHSA room actually starts.
- Coming back the next day stops costing you a two-factor code. A reopened browser has its own 48 hour window now, separate from the two hour idle timer on an open tab.
Fixed
- A holding with no recorded price stops reporting a total loss. A missing price read as zero, so a position with a $1,000 cost basis reported a $1,000 loss at exactly -100%. A price of zero still means zero, since a delisted stock really is worth nothing.
- One holding your broker did not name stops taking the dashboard down. A position with no security name failed validation, and the whole dashboard returned an error over one missing string.
- Brokerage accounts stop being filed as a generic investment account. The two fields saying what an account is were being dropped, so every account fell through to a guess.
- An extended trial is no longer cancelled on day 14. The job that fires on the fourteenth day read neither the extension nor the record of it, and revoked the connections.
- "Your trial has ended" now reaches everyone whose trial ended. It came from a job keyed to day 14 rather than the trial's real end date, so many were downgraded in silence.
- A bank connection that imports nothing stops reporting success. One timeout left the database connection unusable, the rows behind it each failed, and the request answered with a partial success anyway.
- One account's consent prompt stops costing another person their nightly sync. A consent renewal was counted towards Plaid being down, and that circuit is shared across everyone.
- Reconnecting a brokerage after a lapsed subscription stops doubling your net worth. The superseded connection is now retired when the new one comes live, and rows that still match are re-adopted.
- Two logins at the same bank are told apart. The pre-connect dialog could offer a repair that does nothing, and "Stop syncing" counted your accounts by bank rather than by login.
- Registered accounts are held to the Canadian dollar rule, all twelve of them. Only TFSA, RRSP and RESP were listed, so an FHSA could be created in US dollars.
- Creating an investment account by hand works. The only unregistered investment type on offer was Margin, which requires a broker connection, so saving it was refused.
- A failed daily recalculation after editing an asset now warns you. The check was reading a result object rather than the answer inside it, so all four warnings were unreachable.
- The verification email is sent. The request failed outright, so a new sign-up was told to check an inbox nothing had been sent to, and the resend button hit the same failure.
- We stop saying an email was sent when it was not. The guard could not tell "already mailed recently" from "unable to check", and answered the same either way.
- Searching for a bank with a stray space finds it. Nothing trimmed the term, so " RBC" matched nothing at all.
Security
- A debt can no longer be filed against somebody else's account. Three fields on a manually created debt could name another person's account or bank connection, and nothing checked.
v1.5.4 · August 13, 2026
🔌 A release about connections coming apart in the background: a cleanup job that cut accounts loose from the bank behind them, a connect that failed halfway and left nothing to see or remove, and dividends recorded at a fraction of what was paid. US banks and brokerages reach the coverage page, and the picker, at last.
Improved
- US banks and brokerages are on the coverage page, and reachable in the app. It carried 17 Canadian institutions while the app searched the full catalogue. It carries 40 now, and a US bank's investing arm no longer hides its banking side in the picker.
Fixed
- Clearing out a retired bank connection no longer takes your accounts with it. The 30 day cleanup deleted the record your accounts hang off, cutting them loose from the bank and taking the reconnect prompt with them. It clears only the credential now. Accounts cut loose before this still need repair.
- A bank connection that fails halfway no longer disappears. The credential is saved as soon as it is issued, so a failure shows on your accounts page with a retry. Connections already stranded cannot be recovered.
- Your transaction list no longer collapses to a single row. An expired cache read as an empty one, so a row you had just added was written back as though it were your whole ledger.
- A dividend keeps the amount you were actually paid. A per-unit rate with no unit count was filled in with one, so a $28.77 distribution recorded as $0.10. The last 90 days correct themselves on your next sync; older ones keep the wrong amount until they are re-imported. A narrower case is still open and reaches buys and sells too: we round the per-unit rate to the cent before multiplying, so a rate under half a cent rounds to zero and drops the row.
v1.5.3 · August 11, 2026
📉 A release about figures that were confidently wrong: gains invented for holdings whose purchase price nobody recorded, credit balances counted as debt, and accounts quietly cut off from the bank that feeds them. The sync button also stops claiming holdings it never touched.
Improved
- "Sync now" stops claiming holdings it never refreshed. Bank-held investments are refreshed by the button now. Brokerage holdings land later, and the message says so rather than implying the figures have moved.
- The bank picker can reach US banks. Canadian names ranked above every American one and only the first ten survived, so no US bank could reach the list. There is a country switch now.
- Budgets and Goals open with the same summary. Budgets reads to one decimal and is no longer capped, so an overspent month shows 112.4% instead of a flat 100%.
- Small labels follow dark mode. The short uppercase label above a figure kept its light grey, which put it at 3.5:1 on a dark card.
- CIBC Investor's Edge is listed on the coverage page. It was named among the institutions we deliberately do not carry, when a connection to it had in fact opened up.
Fixed
- A holding with no cost basis stops reporting its whole value as gain. A missing purchase price read as zero, so 100 units of VFV at $84.31 reported an $8,431 gain beside a plausible +0.00%.
- A credit balance on a card or loan stops counting as debt. A card sitting at -$200 made you $400 poorer than you were, and could rank as your largest liability.
- Connected accounts stop being cut off from the provider that feeds them. A 30 day token rule was deleting the record tying an account to its bank, leaving it frozen and unable to sync again. 37 accounts across 4 users were queued for exactly that. The window is now far longer than any of them while the underlying fix is made, and accounts already cut off are not restored by this.
- An account type we do not recognise no longer passes without a trace. It still falls through to a chequing account, since every alternative can be wrong by the same double, but it now raises an alert rather than resolving quietly. An account already filed that way still needs correcting by hand.
- An RESP at a Canadian bank reads as an RESP. Some report it under the American name, and contribution detection filters on the account type, so those accounts were passed over.
- Finishing a brokerage connection during setup no longer ends setup. The return trip from the broker never re-checked whether setup was finished, landing you on the dashboard.
- Notifications saved during a connection problem no longer break your list. Three encrypted under the wrong key blocked one person's list of 134, because the list is read as a whole. The three already saved need a one-off repair pass before that list will load.
- Investment updates from your bank arrive again. The sync could not read the stored credential and stopped there, reporting success regardless.
- Comparing duplicate transactions now loads the rows from the server. Fetching a single transaction was never wired up, so the view showed whatever happened to be cached.
Security
- Amounts and category names stop leaving your device in error reports. A rejection quoted your own values back, and that message reached our error reporting intact. The rule that was broken still survives.
- An unsubscribe link only applies to the emails it was sent for. An older form carried no record of which emails it covered, so a link from one type could be replayed against another.
v1.5.2 · August 10, 2026
🧾 A release about numbers that were quietly wrong and screens you could not get out of: budgets that reported no spending, contribution room that read too high, and a form that rejected every expense you typed into it. Connecting a bank you are already connected to also works differently now.
Improved
- Connecting a bank you already have now keeps both connections, and tells you so. It used to replace the old one silently. Two connections import the same accounts twice, so balances count twice until you disconnect one. Repairing a broken connection still replaces it, and the warning depends on us recognising the accounts your bank presents: one with no account number, common for loans and mortgages, gets no warning, and it appears only as you connect rather than afterwards.
- The dialog that stops an account syncing says what each choice leaves behind. Keeping leaves the account in your list, frozen and still counting toward net worth. Deleting removes it with its holdings and history.
- The disconnect confirmation is readable, and no longer loses the option you picked. Going back a step silently reset the choice to "Keep my data", with a success message that reads the same either way.
- Your account rows no longer show a meaningless code. Four characters of an internal reference sat where an account number belongs, so rows read "6D9O".
- Bank and brokerage logos are legible in the picker. Wordmarks were drawn into a slot too narrow for the text inside them.
Fixed
- A second login at the same bank no longer removes the first. A household adding a spouse's accounts watched their own disappear with no explanation. One rough edge remains: reconnecting and ticking only some of your accounts reads as a second login, and those count twice until you disconnect a copy.
- Your history stops being merged into the wrong login. An account left behind by a retired login could be picked up by another on a single account-number match, taking the whole history with it.
- Reconnecting the same bank twice in one day no longer loses the import. A duplicate event record failed the request and rolled the import back, while both attempts reported success.
- A reconnect no longer duplicates your credit cards and loans. Three reconnects at one bank left ten rows for four accounts. Your net worth was never wrong.
- Adding an expense by hand works again. The form signs a withdrawal negative and the check refused any negative amount, then hung the app instead of saying so.
- The add-transaction dialog closes when the transaction is saved. It left you on a modal with a spinning button and no way to dismiss it.
- Deleting a transaction works. It was never implemented, so every delete failed.
- Budgets and recurring bills stop reporting $0 of spend. Differently signed transactions cancelled each other out, so a grocery budget with $260 of spend reported $0.00. Two smaller spending breakdowns still read the raw sign and are being fixed separately.
- Recategorising a transaction as income no longer inflates your contribution room. Room reading too high is the direction that costs you a penalty. Rooms already calculated are corrected automatically.
- "Continue Anyway" no longer blanks the app. It closed the page underneath instead of the dialog, leaving a white screen with no way back but a reload. A few other places in the app can still do this and are being worked through.
- Your buys, sells and dividends refresh after linking a brokerage. They were imported once and never updated, while holdings kept refreshing daily.
- Net worth history stops skipping the same people every night. The job ran in one pass under a time limit, in a fixed order, so everyone past the cut-off got no snapshot.
- Fewer updates from your bank get dropped when several arrive at once. Extras queued behind the running sync, timed out and were lost: 18 in three days.
Security
- A lapsed subscription now disconnects your banks properly. The request could not read the stored credential, so each connection was delayed by up to a day rather than left open indefinitely. One case is still open: if the account was fully deleted first, the key needed to read the credential is gone with it, and those have to be cleared at the provider by hand.
- Rate limits count per account rather than per address. One account changing addresses had no effective limit on the most expensive actions. A separate limit still applies per address, so people sharing an office or mobile network can still reach it together.
- Your name is stored under your own key from the moment the account exists. It briefly sat under the shared key before being rewritten.
- Administrative access on our side now needs a second factor. Holding an admin account is no longer enough on its own.
v1.5.1 · August 5, 2026
🏦 A release for the connections that go quiet: bank search finds the bank you meant, one that stalled or needs a fresh sign-in now says so and can be put right, and an account stops dropping to $0 when your bank sends no balance. Banks and merchants also arrive with their logos.
Improved
- The buttons that start your trial now open the setup itself. They went to the plain sign-up form, and on a couple of pages to sign-in, so nobody arriving from the site reached it.
- Bank search stops losing the bank you meant. Results were cut to a fixed number before any ranking, so "td" could fill with names ending in "Ltd" and leave TD out of it.
- The connect screen shows each bank's logo. Brokerages came back blank because we looked for their logo under a name they never send.
- Transactions show the merchant's logo. Where a payment processor handled the sale we take the merchant's own logo, so a coffee shop paid through Square shows the coffee shop.
Fixed
- A bank that needs a fresh sign-in now says so, and can be reconnected. The half-made connection is kept and filed under the bank you picked, which is what makes it repairable.
- A stalled connection now surfaces even when your other accounts work. It was only ever reported on an empty Accounts page.
- An account no longer drops to $0 when your bank sends no balance. A missing balance now leaves your last known one in place. A balance genuinely reported as zero still shows zero.
- A short position no longer stops your holdings from syncing. Our checks refused a negative share count, and the sync stopped at the first row it refused, so the whole account went unsynced.
- Signing in no longer leaves you sitting on the login screen. The welcome appeared even when the move to your dashboard had failed, and nothing recorded the failure.
- You can record an account that is overdrawn. A manual balance had to be zero or more.
- The performance tiles stop showing the same number twice. "YTD Return" and "Time-weighted (1Y)" were both filled with the one return figure we hold.
- A bank connection that silently imported nothing now tells you. You were left with a connected bank, a success message, no accounts and no error anywhere.
- Filtering your transactions no longer breaks the page. The dialog could not reach the page's own data and failed outright.
- An import that failed for good now offers a reconnect, not a retry. Retrying could never work when the bank needs you to sign in again.
v1.5.0 · August 3, 2026
🧭 A first-run release: setting up a new account is rebuilt end to end, a freshly connected bank shows you its import, short positions stop reading as $0, and a dashboard that cannot load stops pretending you have $0.
New
- A rebuilt first run. A guided setup replaces the old wizard: a few one-tap questions, signing up part of the way in, then connecting an institution, a first sync ending on your own totals, a goal, budgets, and how categorizing works. Your answers reorder the goals we suggest and pre-fill the connect search.
- Budgets suggested from your own spending during setup. It reads the spending it just imported and proposes a limit per category, with a meter showing how each sits against what you usually spend.
- You can watch a freshly connected bank import. The Accounts page says the import is running and clears the moment your accounts land. Plaid banks only for now.
Improved
- Bank search says which country each result is in. "TD Bank" and "TD Canada Trust" arrived as rows you could not tell apart, and the country now carries through to your bank's own sign-in window. Brokerages carry no country yet.
- You stay signed in for longer. Fifteen minutes without activity becomes two hours. A browser left open overnight still ends its session, and clicks, scrolls and typing reset the timer while moving the mouse alone does not.
- A sync that refreshed nothing stops calling itself a success. It reported success whatever happened underneath, including every account failing.
- A connection that brought in no accounts now has somewhere to appear. This covers the case where you have no accounts yet; an older stalled connection still does not surface.
- A brokerage link deleted at SnapTrade tells you it is gone. It used to disappear from the app with no banner and no notification.
Fixed
- A short position stops reading as nothing. The dashboard failed to load for anyone holding one, and where figures did render the short showed $0 gain and 0.00% return.
- A short that gains stops being painted as a loss. Return was worked out from the per-unit price alone and ignored the quantity, so a position that was up rendered in red.
- A dividend on a short counts as the cost it is. One of our two brokerage feeds stored it as income, which quietly overstated your return. The concentration note in Insights still stays hidden when your book is net short.
- An overdrawn account no longer breaks the dashboard. A negative cash balance was rejected as impossible, and the dashboard came back as all zeros.
- A bank handoff that returns nothing says so. You were left waiting for accounts that were never coming.
- A Canadian bank account is no longer labelled US dollars. Every account connected through Plaid was stored as USD whatever your bank reported, which skewed any mixed-currency total.
- A dashboard that cannot load says so instead of showing $0. Someone with real money saw $0 net worth, $0 cash and $0 holdings, with nothing to say anything had gone wrong.
- Errors stop being reported as "No internet connection". Server errors, rate limits and oversized uploads all reached the browser stripped of the headers the app reads.
Security
- Rate limits on our email flows can no longer be sidestepped. The address used to count requests from a signed-out caller could be chosen by that caller.
- One more bad reply from Google's key service. A reply that is valid JSON but carries an error where the keys should be was still stored as though it were a key.
v1.4.6 · July 28, 2026
🔗 A connections release: linking a bank comes back right away, your brokerage trades actually arrive, a reconnect with the wrong login finally explains itself, and the main tab strips work with a keyboard.
New
- A redesigned home dashboard. Two columns: net worth, holdings, budgets, goals and recurring items beside your latest transactions and a card comparing this month's spending with last month's.
- A clearer picture of what happens when you connect. The diagram now reads in the order the connection actually happens, and folds down to its header once you have seen it.
Improved
- Connecting a bank comes back right away. It used to wait for the whole first import before responding at all. Your accounts now fill in over the following minute.
- The account panel closes with your Back button. The panel has its own address now, which is shareable and survives a reload.
Fixed
- Your buys, sells and dividends are far more likely to arrive after linking a brokerage through your bank. The fetch had the same 10 second allowance as every other request, and it pages through your whole history. It gets 30 seconds a page now, under a one minute total. A brokerage slower than that can still come up short.
- Reconnecting with the wrong bank login now explains itself. It used to fail with a wall of raw error text.
- A first connection whose import fails no longer looks like nothing happened. With no accounts yet to carry the error, the screen sat empty as though you had never connected. If you already have other accounts the notice does not appear yet, and its retry does not always force a real re-sync.
- Insights read in the language you are using. They followed the language saved on your profile instead, so an English screen could show a French sentence.
- An intercepted connection to Google no longer signs you out. Some networks answer our session check with a page of their own, and we read that as a bad session.
Accessibility
- The tab strips work with a keyboard. The main tabs on Transactions, Analytics, Cash flow and Settings could not be reached by keyboard at all.
Security
- Trusted-device sign-in removed. A stored token plus your email address could together open a session without either factor being proven. You will be asked for your second factor every time you sign in, and the Trusted devices list is gone from Settings.
v1.4.5 · July 23, 2026
🔌 A reliability release: linking a bank at signup goes through, adding a manual asset can finish setup, and long transaction lists stop repeating themselves.
New
- Goals and Budgets open the same way. A Suggestions action in the header brings the starter suggestions back once you already have your own.
Fixed
- Connecting a bank during signup actually works. The Connect step never completed the handover, so the connection went nowhere, for everyone who tried it.
- A property or other manual asset counts toward finishing setup. Adding one on the Connect step used to strand you on the setup spinner.
- A hiccup reaching Google no longer breaks a page load. A stale connection on the session check failed the page outright. We retry it now.
- Long transaction lists stop repeating themselves. Each new page was asking for the first one.
- Credit cards and loans stop dropping out of view. With more than one linked institution, liability rows could vanish and leave your totals quietly short.
- More dark-mode polish across onboarding, the account panels, the dashboard figures, and the privacy screens, plus crash fixes on the paywall and the transaction drawer, and a steadier daily sync.
v1.4.4 · July 19, 2026
🔧 A fix-focused release: checkout and promo codes say what they mean, net worth ignores brokerage links that have gone dead, and merchant history searches your whole ledger.
Improved
- Finding the bank and brokerage lists. The menu and footer on every public page now link to the full institution lists, not only to individual institutions.
Fixed
- Promo codes tell you the truth at checkout. A code you are not eligible for says so under the field, and Subscribe shows your first-period price with the discount applied.
- Checkout no longer crashes on a pricing hiccup. Opening it before prices had finished loading white-screened the app.
- Expired trials go straight to the paywall. The home screen used to appear first, showing numbers it could no longer refresh.
- Net worth stops counting disconnected brokerages. Their accounts lingered at whatever balance they held the day the connection died.
- A transaction's merchant history now looks at your whole ledger. It searched only what was already loaded, so a weekly store could still read "no prior transactions".
v1.4.3 · July 17, 2026
🧮 A maintenance release: a new free calculator, cleaner multi-brokerage connections, a smoother first sign-in, and a couple of dark-mode touch-ups.
New
- Capital-gains tax calculator. Your province, your capital gain and optionally your other taxable income. Free, no signup, in the /tools/ hub.
Fixed
- Brokerage accounts stop doubling up. A second connection could attach its accounts to the first one, filing them under the wrong brokerage.
- Signing back in works beyond brokerages. The re-authentication prompt now also appears while connecting a bank, checking out, or exporting your data.
- Signing in the first time. An interactive sign-in that occasionally needed a second attempt now completes on the first.
- Dark mode reads properly on more screens. The category-rules screen and the contribution-room note were washing out against the dark background.
v1.4.2 · July 16, 2026
🧹 A tidying release: your holdings stay accurate when a position closes, brokerage reconnects are smoother, and dark mode gets a few touch-ups.
New
- A light and dark toggle on our public pages. The site follows your device by default, and your override is remembered.
Fixed
- Sold positions leave your holdings. A position your brokerage stops reporting now drops off automatically. Your history and anything you added by hand stay put.
- Reconnecting a brokerage. Reconnect no longer sends you into a brokerage that is no longer supported.
- Signing back in to a brokerage. A SnapTrade connection needing another two-factor check now reaches a prompt rather than a dead end.
- Portfolio chart in dark mode. The history line was drawn close to the background colour and effectively vanished. It is Mozaic teal now.
v1.4.1 · July 15, 2026
💌 A quick addition: your own invite link to share Mozaic.
New
- Invite friends to Mozaic. Settings has an Invite friends page with a personal link, and a running count of how many people signed up through it.
v1.4.0 · July 14, 2026
📈 A public-site release: a new free comparison tool, a clearer pricing page, and dark-mode polish.
New
- Portfolio vs index tool. Pick up to 5 stocks or ETFs, choose a benchmark, and see how an equal-weight buy-and-hold portfolio would have compared. Free, no signup, in the /tools/ hub.
Improved
- A clearer pricing page. One plan, a monthly or annual toggle, and straight answers about the trial.
Fixed
- More dark-mode contrast polish: the dashboard insight note, the sync status pills, and the public site's security panel now read properly against a dark background.
v1.3.0 · July 13, 2026
🌙 A quick follow-up to v1.2.0, led by a full dark mode and three new free calculators.
New
- Dark mode, top to bottom. Every screen has a proper dark theme, down to the loading splash. Light, Dark or System under Settings, Appearance.
- Three new calculators. RRSP room, RESP with the CESG grant, and net worth. Free, no signup, in the /tools/ hub.
Improved
- Set an account's type and keep it. Correcting the type on a connected account now sticks; the next brokerage sync used to overwrite it.
Fixed
- Scrolling a long transaction list no longer duplicates rows as new pages load in.
Security
- Hardened our public email links: unsubscribe and one-click actions are now scope-bound, time-limited, and rate-limited, so a link signed for one action cannot be reused for another, and vote links now expire.
v1.2.0 · July 8, 2026
🌊 Everything we shipped in the two weeks after v1.1.0.
New
- Cash Flow view with a Sankey diagram. Income in and spending out as one picture, under Analytics. Tap any band for the transactions behind it, or export the view as a PNG.
- A dashboard that answers first. Net worth is the hero figure, with a plain-English cash-flow verdict and an "up next" strip below it.
- In-app card entry. Enter your card and convert your trial without leaving for a separate checkout page.
Improved
- Accounts, decluttered. Everything for an account now lives in one slide-in drawer: currency, management and disconnection.
- Recurring, unified. One calendar-first view with separate lanes for income, bills and transfers, and colour-coded dots.
- Faster transaction lists and syncs, a redesigned transaction detail view, and a tidier settings menu.
Security
- Per-user envelope encryption is live in production. Sensitive fields are encrypted with a per-user key held in Google Cloud KMS, and we can rotate those keys.
Accessibility
- Keyboard navigation across the app and its sidebar, screen-reader labels on our shared money widgets, and AA-contrast text.
v1.1.0 · June 22, 2026
📅 Everything that landed in the two weeks leading up to v1.1.0.
New
- Recurring and bills, done right. A Recurring page showing what is paid, upcoming and overdue, with a calendar view. Credit-card rows carry your minimum payment and statement balance.
- TFSA and FHSA contribution room, together. One page, a new FHSA estimator, and you can enter your net deposit as the starting point. A free public TFSA calculator sits in the new /tools/ hub.
- A Passive Income band in cash flow. Dividends and interest as their own band, with a drill-down into the transactions behind it.
- See it before you connect. Sign-up is trimmed and manual-first, with magic-link login, so you can add an account by hand before linking a bank.
Improved
- Works even when the network doesn't. Transaction edits made offline are saved and replayed on reload, and a banner tells you when what you see may be stale.
- An auto-categorization on/off toggle, faster daily syncs, and a batch of reliability fixes.
Security
- Added reCAPTCHA Enterprise protection on sign-in.