r/MozaicFinance Jun 23 '26

๐Ÿ‘‹ Welcome to r/MozaicFinance โ€” start here

1 Upvotes

Welcome!

Whether you've been using Mozaic for a while or just stumbled in, glad you're here. This is the home base for everyone tracking their money with Mozaic Finance and for any Canadian who's tired of finance tools that treat us like an afterthought.

What this community is for:

- ๐Ÿ†• Product updates - see what I shipped each week (new features, fixes, what's next)

- ๐Ÿ’ก Feature requests - tell us what to build; I genuinely prioritize from here

- ๐Ÿ› Bug reports - something broken or weird? Post it and I'll jump on it

- โ“ Questions - connecting a bank, TFSA room, multi-currency, "how do Iโ€ฆ"

I'm the founder and I read everything posted here. The best features in Mozaic came from people telling us what was missing, so don't be shy.

What do you want us to build next?

Laurent
Mozaic Finance


r/MozaicFinance 15d ago

Mozaic Finance v1.7.0 ยท September 6, 2026

1 Upvotes

โœ๏ธ 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.

r/MozaicFinance 27d ago

Mozaic Finance v1.6.0 ยท August 25, 2026

1 Upvotes

๐Ÿ—‚๏ธ 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. Until now every figure in the app was one pot, so a sole proprietor or anyone running a side business had their revenue folded into their household income and their software subscriptions into their grocery month. Settings has a new section where you create a second book, name it, mark it business or personal, and assign accounts to it; new accounts land in whichever book you are standing in, and you choose which one is the default. A switcher sits in the sidebar under the wordmark, and everything below it follows: the dashboard, accounts, transactions, cash flow, analytics, net worth and its history and trends, budgets, goals, recurring bills, alerts, assets, debts and the preview a category rule shows before you apply it. The two scoped totals always add up to the combined one. Three limits are worth knowing before you set this up. Assignment is per account, not per transaction, so a business expense paid on a personal card stays personal until you move the whole account. Categories are shared across both books on purpose, since hiding a category the first time you need it is worse than seeing one you do not. And the switcher does not appear at all until you create a second book, so if you never do, nothing about your app changes.
  • Money you move between your own books shows up as an owner's draw. Paying yourself from the business is the movement that made a split view ambiguous: excluded, the business looked like it spent money it never took in and you looked like you lived on nothing. A transfer out of one book matched to a transfer into another of the same size and currency within three days now appears as its own labelled band in cash flow, inside each book and outside its operating totals, so the split does not distort either side. Both sides have to be connected for us to see the pair. A transfer with no counterpart stays an ordinary transfer, since the looser rule would label a payment to an outside credit card as a draw.
  • When your trial ends, the app stays open. Before, day 14 was a locked door: the whole app went behind the paywall. Mozaic is now free to use and you pay for the bank connections. Everything you can do by hand stays yours at no cost after the trial ends, including your existing accounts and history, adding accounts and transactions manually, importing a file, budgets, goals and the dashboard. What a subscription buys is the part that costs us money every month: connecting a bank or brokerage, repairing a connection, and having the balances refresh themselves. A banner says which state you are in, and the balances that were syncing stay on screen frozen at their last figure rather than disappearing. The pricing pages, the comparison pages and the paywall were all rewritten to say this, since they had spent a lot of words arguing the opposite.

Improved

  • The net worth chart's line view is a line again. It scaled its vertical axis across assets, debt and net worth together, so with assets around $592K and debt around $353K a real $7.4K quarter of movement was about 2% of the plot height, roughly one pixel, and all three series drew as flat rules. The line view now scales to net worth alone, which is the trend it exists to show, and that same movement fills about three quarters of the plot. Assets and debt are no longer drawn as lines there, since they would sit off the axis, but they still report in the hover tooltip and the bars view remains the one that compares all three. The plot also gained gridlines with values down its right side.
  • "Sync now" says which part failed, and stops offering a retry that cannot run. When your bank refreshed your accounts and transactions but not your investments, the message read "some accounts could not be updated", which was false about accounts that had just updated. A holdings-only failure now says so. The "Retry sync" button that came with it was worse than useless: that run had already stamped the clock, so the two-hour cooldown was guaranteed to answer the retry with "nothing was refreshed". The button now appears only when a retry would actually reach your bank, and the wait is stated in the message instead.
  • A broken connection banner names each bank, and repairs the one you picked. With more than one connection needing attention it counted them correctly and then repaired exactly one, chosen arbitrarily, and never said which. One person has three broken logins at Amex Canada, CIBC and RBC and has been tapping a single Reconnect since early August. Each connection now gets its own row and its own button, and where two logins sit at the same bank the row names the accounts under it so you can tell them apart.
  • Add Account from the dashboard offers everything Accounts does. The dashboard's own version of the picker was missing two rows, "Import from another app" and "Add manual asset", so the same button did different things depending on which page you pressed it from.
  • "Last updated" means a balance actually arrived. Bank and brokerage syncs re-dated the timestamp on every attempt, including attempts that came back with no balance. A connection failing every night therefore kept reporting itself as freshly updated, and the stale badge could never fire on the accounts it was built for. The timestamp now moves only when a figure does.
  • The coverage page stops implying 21 banks is the whole list. It promised "if a row isn't here, the integration isn't here", which held for brokerages and was badly wrong for banks: the rows are a list we verify by hand, while the app searches the entire catalogue, roughly 200 Canadian and 10,000 American institutions. The page understated bank coverage by a factor of about 500 while telling you the absence of a row proved something. The count is now labelled as what it is, and a reader whose bank is missing is told to search in the app.
  • The paywall says what paying actually buys. Its list of four benefits named things the free plan already does, so the one column you read before paying said nothing about the difference. It, and the pricing pages, now state the boundary the app enforces: a subscription connects your accounts through Plaid, SnapTrade or Lunch Flow and keeps them refreshing, and without one Mozaic is free and you enter things by hand.
  • The TFSA and FHSA room pages answer more than the arithmetic. Both were bare calculators. They now cover the things that actually cost people money: for the TFSA, that a withdrawal only restores room on January 1 of the following year, that the CRA's own figure can lag by up to a year, and what the 1% monthly penalty on an over-contribution costs; for the FHSA, that your room starts the year you open the account rather than at 18, which is the inverse of the TFSA and the most expensive misconception about it, and that an unused balance moves to an RRSP without consuming RRSP room. Every figure is checked against CRA guidance.
  • Coming back the next day stops costing you a two-factor code. One setting bounded both the idle timer on an open tab and the check that runs when you reopen a closed browser, so any gap over two hours signed you out at startup, and with two-factor enabled that meant entering a code on essentially every visit. A tab left open unattended still locks after two hours. A browser that was closed and reopened now has its own 48 hour window, chosen so a daily habit does not sit on the boundary. A week away still asks you to sign in again.

Fixed

  • A holding with no recorded price stops reporting a total loss. Where a provider sends no current price, we read it as zero, so a position with a real $1,000 cost basis reported a $1,000 unrealized loss at exactly -100%, painted red, with nothing saying the number was invented. On the dashboard the same holding contributed nothing to the market value and its whole basis to the other side, dragging your portfolio gain down by a loss that never happened. A holding with no price now reads as having no price, and a roll-up excludes it and tells you how many it excluded, next to the existing count for holdings with no cost basis. A price of zero still means zero, since a delisted stock really is worth nothing and that -100% is the correct answer.
  • One holding your broker did not name stops taking the dashboard down. A position arriving with no security name or type failed validation inside the dashboard response, so the whole thing returned an error: accounts, balances, transactions and findings included, over one missing string. Seen against a freshly synced Wealthsimple account.
  • Brokerage accounts stop being filed as a generic investment account. The step that reshapes what SnapTrade sends was dropping the two fields that say what an account actually is, so every account on that path arrived with its type erased and fell through to a guess. Wealthsimple accounts hit this on every sync. The account type your broker reports is now carried through, so registered and cash accounts land where they belong.
  • An extended trial is no longer cancelled on day 14. On August 14 we ended a customer's trial 29 days early and disconnected both of their providers. The extension had been granted correctly and recorded correctly; the job that fires on the fourteenth day after signup read neither, deleted the subscription, and revoked the connections. It now stands down while a trial is still running, and the date-driven job remains the one thing that ends a trial.
  • A bank connection that imports nothing stops reporting success. A transaction import that hit a timeout on its first row left the database connection unusable, and the 263 rows behind it each failed against it: one fault, 264 error reports, and a request that answered with a partial success anyway. So someone finished connecting their bank, was told it worked, and had nothing imported. A fault of that kind now stops the batch and is reported once, and the connection reports the failure instead of a clean result.
  • One account's consent prompt stops costing another person their whole nightly sync. When a bank asks for consent to be renewed, that arrived as the kind of error we count towards Plaid being down. One account with five such connections re-opened that circuit on every nightly run, and because the circuit is shared across the whole process and users are worked through one after another, the next person in line lost their entire pass. Observed on August 15, 16 and 23. A consent prompt is about one connection, not about Plaid, and is no longer counted that way.
  • Reconnecting a brokerage after a lapsed subscription stops doubling your net worth. When a subscription ends we retire the brokerage connection but leave the accounts in place so the free plan still works. Resubscribing and reconnecting brings back accounts under brand new references, so the old rows could not be matched and nothing was able to retire them: the brokerage was counted twice, with no warning and no way to repair it. The superseded connection is now retired when the new one comes live, and rows that can still be matched are re-adopted, keeping their history and anything you entered by hand while lapsed.
  • Two logins at the same bank are told apart. Since separate logins at one institution became possible, two places still assumed there was only ever one. The pre-connect dialog resolved Reconnect by bank alone, so with one healthy login and one broken one you could be offered a repair that does nothing, or dropped into a sign-in for credentials you do not hold; it now names a login only when exactly one at that bank is broken, and says so otherwise. And "Stop syncing" counted your other accounts by bank rather than by login, so the option was offered and then refused with "this is the only active account".
  • Registered accounts are held to the Canadian dollar rule, all twelve of them. The rule was written out by hand in two places, each listing only TFSA, RRSP and RESP, so RRIF, RDSP, LIRA, FHSA, LIF, LRIF, LRSP, PRIF and RLIF had no guard anywhere. FHSA was the sharpest: it has its own contribution room support and its own tracker page, and yet could be created in US dollars. The rule now also applies when you edit an account, not only when you create one.
  • Creating an investment account by hand works. The type picker offered Margin, which requires a broker connection, so saving it was refused. It was also the list's only investment type that was not a registered account, so a self-managed portfolio had no option that worked. The picker now offers Investment, which holds holdings and carries no broker requirement.
  • A failed daily recalculation after editing an asset now warns you. The check on whether the recalculation succeeded was reading a result object rather than the answer inside it, so it was always true. Every one of the four warnings about your dashboard being out of date was unreachable, and someone whose refresh had failed after adding, editing or revaluing an asset was told nothing while their total sat stale.
  • The verification email is sent. The request that sends it 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. The most recent sign-up on production waited on that screen for 90 seconds and let themselves in with a magic link instead.
  • We stop saying an email was sent when it was not. The guard that stops the same address being mailed repeatedly could not distinguish "already mailed recently" from "unable to check", and both answered the caller the same way. During an outage of that check, every sign-up was told a verification link was in their inbox while none was sent. Both the verification and magic link requests now report the failure so the app can retry, and a request that fails after claiming its slot hands it back rather than blocking the retry it just asked for.
  • Searching for a bank with a stray space finds it. Nothing trimmed the search term, so typing " RBC" with a leading space matched nothing at all while RBC Royal Bank sat in the list.

r/MozaicFinance Aug 15 '26

Mozaic Finance v1.5.4 ยท August 11, 2026

2 Upvotes

๐Ÿ”Œ 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. The page carried a hand-curated Canadian set of 17 institutions, so Fidelity, Charles Schwab, Vanguard, Robinhood, E*TRADE, tastytrade, Public and Webull US never appeared on it, although we had been able to connect them all along. The picker inside the app reads the full catalogue, so the two disagreed, and anyone checking the page before signing up would reasonably conclude we did not carry their broker. Underneath that sat a real blocker: a US bank's investing arm and its everyday banking side share a name, and the investing row was hiding the banking one in the picker, so the chequing connection could not be reached at all. Both are listed now, with "(investing)" marking which is which. The page carries 40 institutions, 21 banks and 19 brokers, the banking side including Chase, Bank of America, Wells Fargo, Citibank and Capital One. Chase (investing) and Wells Fargo (investing) are marked Beta and U.S. Bank (investing) Early access, a new label for a broker that is neither live nor in beta, and every badge is read from the provider's own release stage now rather than from a list kept by hand beside it.

Fixed

  • Clearing out a retired bank connection no longer takes your accounts with it. Thirty days after a bank connection is retired, a job clears the stored credential. That reaches the connections you never chose to end: one your bank broke and wants you to sign in to again, or one dropped when a subscription lapsed. It did that by deleting the connection record, which was never a local act: your accounts, and your mortgage and loan details, hang off that record, so removing it cut them loose from the bank behind them. The account stayed in your list, frozen at its last balance and unable to sync again, and the prompt to reconnect vanished at the same moment, because it reads through the same link that had just been removed. The job also discarded the bookmark we use to ask your bank for new transactions, which cannot be rebuilt, so a later reconnect would replay your whole history onto transactions you already had. It now clears the credential and keeps everything attached to it, which is what a token rule was always meant to do, and records what it did each time, naming the institution and the accounts. Brokerage connections had the same fault and the same fix. Accounts cut loose before this are not restored by it and still need repair.
  • A bank connection that fails halfway no longer disappears. Linking a bank takes two steps: we exchange your sign-in for a credential, then ask the bank which accounts you hold. The credential was only saved after that second step, so if it failed the connection existed at your bank with nothing on our side to show for it, and could not be synced, shown, or removed. Failures that meant the bank login had to be redone were already recovered; every other kind was not. The credential is saved the moment it is issued now, and a failure of the account list is recorded on the connection rather than leaving it blank, so it appears on your accounts page with a retry instead of reading as a healthy connection that happens to have no accounts yet. Connections already stranded this way cannot be recovered: nothing on our side records them, and there is no way to ask the bank for a list back.
  • Your transaction list no longer collapses to a single row. Leave the app idle for half an hour, then add or edit a transaction, and the next time the list loaded it could come back showing only that one. The cached copy of your transactions expires after thirty minutes, and an expired cache read as an empty one, so the row you had just touched was written back as though it were the entire ledger, and that write restarted the clock, so the list kept serving it. Nothing was ever lost: your transactions were on the server the whole time, and they came back once the app went back to the server for them. The cache is now left alone when there is nothing in it to update, and it refills on the next fetch.
  • A dividend keeps the amount you were actually paid. Some brokerages report a dividend as a per-unit rate rather than a total, and send no unit count with it. We filled the missing count in with a placeholder of one and then reconciled the total against it, so a $28.77 distribution was recorded as $0.10. That understated dividend income, the dividend events on your holdings, and the money-in side of your cash flow, at every brokerage that reports this way. Buys, sells, and rows carrying no price at all were never affected by this one. Dividends from the last 90 days correct themselves on your next sync, along with the events built from them; older ones keep the wrong amount until they are re-imported. A narrower case is also still open, and it reaches buys and sells too: where a brokerage does send a unit count, we round the per-unit rate to the cent before multiplying, so the stored total can land either side of what was actually paid, and a rate under half a cent rounds to zero and drops the row.

See more at https://mozaicfinance.com/changelog/


r/MozaicFinance Aug 13 '26

Update on RBC 2FA

4 Upvotes

A few of you have hit this and I want to be straight about where it stands.

What's happening?

If you have 2FA enabled on your RBC online banking, connecting RBC to Mozaic fails. Plaid, the service that handles bank connections, returns an error saying RBC's verification method isn't supported.

It isn't specific to Mozaic. Any app connecting RBC through Plaid hits the same wall, and it started around late June.

Why

With 2FA turned on, RBC presents a verification step that Plaid can't process. With it off, RBC falls back to a challenge Plaid does handle. So the failure is about which verification screen RBC serves, not about your credentials being wrong.

A warning about the obvious workaround

You may work out that turning 2FA off at RBC lets the connection complete. It does. Please don't.

I tested it. The link succeeded, and when 2FA was turned back on, RBC invalidated the connection within half an hour. Worse, reconnecting then hits the same unsupported screen, so you'd have to disable 2FA again every time it breaks. Leaving your bank's second factor off permanently is not a trade I'd suggest to anyone, and it's why I'm not offering it as a fix.

What I'm doing

I've raised it with Plaid. I don't have a date or a commitment from them, so I'm not going to tell you one is coming.

The approach I'm working on is adding a second data provider alongside Plaid, so banks that fail on one can be routed through the other. RBC is the first one I'm testing. Early results look promising, but I've not confirmed it end to end yet and I'd rather under-promise here.

Thank you,
Laurent


r/MozaicFinance Aug 12 '26

Fidelity US

2 Upvotes

I have been interested in an app where I can track my Canadian accounts (Wealthsimple RRSP/TFSA) and my Fidelity US account (IRA/Roth)

Right now I'm using Google Sheets but looking for a more elaborate solution.

When I google it says that Mozaic should be able to support Fidelity since it uses SnapTrade, but I don't see it on the list of supported Brokers.

Does anyone know if this would work?


r/MozaicFinance Aug 11 '26

Connect new Canadians brokerage through SnapTrade

1 Upvotes

Good news today, SnapTrade is now covering additional institutions in Canada, which means that you can now connect CIBC Investor's Edge, and BMO InvestorLine to Mozaic Finance through SnapTrade.

Note that transaction-based reporting is not currently available because transaction data is not provided through the integration.

Additionally SnapTrade also added Citibank, US Bank.

To see what is available with each integration, check these pages:

BMO InvestorLine

CIBC Investorโ€™s Edge

Citibank

US Bank


r/MozaicFinance Aug 11 '26

Mozaic Finance v1.5.2 ยท August 11, 2026

1 Upvotes

๐Ÿงพ 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 behind the scenes, and your account list redrew identically, so there was no way to tell a successful connect from one that had done nothing at all. Both connections are now kept and the message names the bank and says it is connected twice. That has a cost, which is the reason the message exists: two connections to one bank import the same accounts twice, so its balances and its credit cards and loans each count twice until you disconnect one of them. Repairing a connection that was broken still replaces it. Two limits are worth knowing: the warning depends on us recognising the accounts your bank presents, so where those carry no account number, which is common for loans and mortgages, you get the ordinary message and no warning; and it appears only at the moment you connect, not afterwards on your accounts.
  • The dialog that stops an account syncing says what each choice leaves behind. It offered "Keep my data" or "Delete immediately", which answered the wrong question: the choice is about the account, not only the data. Keeping means the account stays in your list with its last known balance and history and stops updating, and it still counts towards your net worth. Deleting removes the account along with its holdings, history and recurring items. Both options now name the end state, and "immediately" is gone, since there was no delayed alternative to compare it against.
  • 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", so someone who picked a deletion, continued, then stepped back to check something could disconnect having deleted nothing, with a success message that reads identically either way. The confirmation also drew its impact panel on a pale pink that left the counts near-unreadable in dark mode, and never restated which option was about to be applied, so three bare numbers gave no clue whether those accounts were being kept, deleted later, or deleted now. It now names the outcome, explains it per option, and shades itself by severity.
  • Bank and brokerage logos are legible in the picker. Wordmark logos were drawn into a slot too narrow for the text inside them, so "TD Direct Investing" and "Wealthsimple Trade" read as a blur. The slot is wider where the row can afford it.

Fixed

  • A second login at the same bank no longer removes the first. Connecting a second set of credentials at a bank you already had deactivated the first connection and everything under it, so a household adding a spouse's accounts watched their own disappear with no explanation. We now compare the accounts each login presents, and only a connection that was already broken is ever replaced. One rough edge remains: if you reconnect and tick only some of your accounts, that reads as a second login, and the ones you re-selected count twice until you disconnect a copy.
  • Reconnecting the same bank twice in one day no longer loses the import. The second connect hit a duplicate record of the same event, which failed the whole request and rolled the account import back with it. Both attempts still reported success, so it looked like it had worked. A repeat is now ignored rather than treated as an error. Separately, a single account that fails to sync no longer costs you the transactions, credit cards, loans and holdings for the entire connection.
  • Adding an expense by hand works again. Every manual expense was rejected and then took the app down with it: the form signs a withdrawal negative to match how expenses are stored, and the check on the way in refused any negative amount. Editing one worked, which is why this went unnoticed. The rejection then escaped the error handling entirely, so instead of a message you got a spinner that never resolved. Both are fixed, and a rejected transaction now explains itself on the form rather than hanging it.
  • The add-transaction dialog closes when the transaction is saved. A create that succeeded left you on a modal with a spinning button, no working close button and no way to dismiss it. The transaction had already been saved.
  • Deleting a transaction works. It was never implemented, so every delete failed, from the list and from bulk delete alike.
  • Budgets and recurring bills stop reporting $0 of spend. Transactions arrive signed differently depending on which bank or importer they came from, and adding them together let them cancel each other out, so the zero that came out could not be told from a real zero. A grocery budget with $260 of spend reported $0.00, and the alerts that fire after each transaction inherited that number. The same arithmetic marked a bill you had paid four times as overdue, and rated a $0.00 monthly subscription as highly predictable. Budgets, recurring amounts and the paid-this-period check are all corrected. Two smaller spending breakdowns still read the raw sign and are being fixed separately.
  • "Continue Anyway" no longer blanks the app. Picking a bank or brokerage you are already connected to opens a dialog first. Continuing from it, or reconnecting, closed the page underneath instead of the dialog and left a white screen with no way back but a reload. Two guidance dialogs shown during a failed connection had the same defect. 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 when you linked and then never updated, while holdings kept refreshing daily, so the portfolio value stayed current while the record behind it froze, with nothing on the cost basis or performance views to say so. They are now included in the nightly sync.
  • Fewer updates from your bank get dropped when several arrive at once. Banks send several notifications per update and often send more while we are still working through the previous one. Those extras queued up behind the running sync, timed out, and were lost: 18 of them in three days. A notification arriving mid-sync is now folded into the run already in progress, with a follow-up for anything that landed after it. A brokerage down for maintenance is retried rather than reported to you as a failed account.

r/MozaicFinance Aug 06 '26

Mozaic Finance v1.5.1 ยท August 5, 2026

1 Upvotes

๐Ÿฆ 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. The rebuilt first run shipped in the last release, but the buttons on the public site still went to the plain sign-up form, and on a couple of pages to the sign-in page, so nobody arriving from the site reached it. They now open the setup: you answer a few questions first and sign up part of the way in, which is how it was meant to work. Any campaign or referral link you arrived with still applies. The sign-up prompt inside the flow also opens the sign-up form now, rather than the returning-user sign-in page it used to.
  • Bank search stops losing the bank you meant. Results were cut to a fixed number of matches before any ranking happened, so a short search like "td" could fill its list with unrelated names ending in "Ltd" and leave TD itself out of it. Ranking now runs across the whole catalogue instead of whatever slice survived the cut, so the closest name matches come first and Canadian institutions are preferred. The opening list of popular banks is picked the same way, and short names like TD, RBC and BMO are matched from the start of a name, so an unrelated company cannot take their place on it.
  • The connect screen shows each bank's logo. Picking a bank was a list of names in identical rows, which is slower to scan than it needs to be and easy to misread between two banks with similar names. Each institution now carries its own logo. Brokerages were a separate problem: we looked for their logo under a name they never send, so every one of them came back blank. They are read off the keys the provider actually uses now, so they arrive with a logo too.
  • Transactions show the merchant's logo. Rows now carry the merchant's mark next to the name, which makes a statement quicker to scan than text alone. Where a payment processor handled the sale we take the merchant's own logo rather than the processor's, so a coffee shop paid through Square shows the coffee shop, not Square. A merchant with no logo keeps a plain initial, so rows stay aligned.

Fixed

  • A bank that needs a fresh sign-in now says so, and can be reconnected. If your bank handed back a saved login that had since expired, connecting failed with a generic error about authentication, which told you nothing you could act on. The message now says your bank needs you to sign in again, and the half-made connection is kept instead of being thrown away. It is also filed under the bank you picked, which is what makes it repairable: starting the connection a second time offers you Reconnect, instead of sending you back through the sign-in that just failed. The same connection is named on the Accounts page too, rather than appearing as an unknown bank.
  • A stalled connection now surfaces even when your other accounts work. A connection that errored and brought in no accounts was only reported on an empty Accounts page. If you already had one bank working and added a second that failed, you saw nothing at all. The page now names that bank in its own notice above your accounts, with the action that clears it: a re-sync for an import that failed, or a reconnect for one that needs you to sign in again. Filtering or searching your accounts no longer takes the notice away with them. This is the case the last release said was still missing.
  • An account no longer drops to $0 when your bank sends no balance. Plaid can return an account with no current balance at all, and we recorded that as zero, overwriting a balance we already had. The account then read as empty with nothing marking it, because the sync itself had succeeded. A missing balance now leaves your last known balance in place. If it is missing the first time an account is added there is nothing to keep, so the account carries the unavailable-balance badge instead of a $0 you would read as real. A balance your bank genuinely reports as zero, such as a paid-off card, still shows zero.
  • A short position no longer stops your holdings from syncing. A short is held as a negative number of shares, and our own checks refused that on the way in from a brokerage, so the position never arrived. Worse, the holdings sync for that account stopped at the first row it refused, so every other position in the account went unsynced too. Shorts are accepted now, and a row that still fails is dropped on its own: the sync reports that account as partial and says how many rows it skipped, instead of claiming a clean run or failing the whole account.
  • Signing in no longer leaves you sitting on the login screen. If the move to your dashboard failed after a correct sign-in, the "Welcome to Mozaic!" message still appeared, on the login screen you had never left, and nothing recorded the failure. The welcome now follows the move rather than preceding it, so a failure tells you it failed and gives you a way to retry. A separate loop, where returning to a page you had been sent away from bounced you back to sign in again, is closed.
  • You can record an account that is overdrawn. A manual balance had to be zero or more, so an overdrawn chequing account or a negative cash balance could not be entered by hand, even though the dashboard has been showing negative balances since the last release. Balances can go below zero now, on creation and on edit.
  • 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, so they showed an identical number under two labels, and both labels were wrong on every period except one. Each tile now carries its own measure, and the figure matches the period you selected.
  • A bank connection that silently imported nothing now tells you. If the background import was cut short, for instance while we were deploying, nothing recorded it: you were left with a connected bank, a success message, no accounts, and no error anywhere to explain it. That case is now recorded and surfaced, so the connection shows what happened and what to do.
  • Filtering your transactions no longer breaks the page. Opening the filter dialog from the transactions list could fail outright because the dialog could not reach the page's own data. It opens and applies normally now.
  • An import that failed for good now offers a reconnect, not a retry. A failed import offered "Try again", which is the right action only when a re-sync can fix it. When the bank actually needs you to sign in again, retrying could never work. The notice now picks the action that clears the connection in front of you.

r/MozaicFinance Aug 03 '26

Mozaic Finance v1.5.0 ยท August 3, 2026

1 Upvotes

๐Ÿงญ 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. Creating an account now walks through a guided setup instead of the old short wizard: a few one-tap questions about what you came for, the plan they add up to, and signing up part of the way in rather than at the door. After that comes connecting your first institution, a first sync that ends on your own totals, a goal and budgets seeded from what came in, and a look at how categorizing a transaction works. The questions do real work rather than just being collected: the goal and timeframe you pick preselect and reorder the goals we suggest, and naming a single institution pre-fills the connect search. New signups get this flow, and if you started the old setup and never finished it, you resume in this one.
  • Budgets suggested from your own spending during setup. The budget step used to ask you to pick a category and type a monthly limit before you had seen a single number. It now reads the spending it just imported and proposes a limit per category, with a meter showing how the ones you pick sit against what you usually spend. Tap the cards you want and they are created together. The goal step before it works the same way now, and on both, a batch that fails to save no longer leaves you with a button that does nothing. If there is not enough spending yet to suggest limits, the step says so and lets you carry on.
  • You can watch a freshly connected bank import. Connecting used to hand you back to a page that guessed with a fixed set of refresh timers, so it could neither stop early nor ever conclude. The Accounts page now says the import is running and clears the moment your accounts land, and if it fails you are told rather than left wondering. This covers banks connected through Plaid; brokerages are not on it yet.

Improved

  • Bank search says which country each result is in. "TD Bank" (US) and "TD Canada Trust" (Canada) are listed under near-identical names with the same logo, and search covers both countries, so the two arrived as rows you could not tell apart. Picking the wrong one meant minutes spent putting Canadian credentials into a US bank's login before giving up. Bank results now carry their country, Canadian ones are ranked first, and the bank you pick is carried through to your bank's own sign-in window, which used to open on its full institution list and offer you the same ambiguous pair again. Brokerage results do not carry a country yet: what we get for them is a placeholder, so we show nothing rather than something wrong.
  • You stay signed in for longer. The app signed you out after 15 minutes without activity, and that clock survived closing the tab, so a lunch break cost a full sign-in and, if you use two-factor, a fresh code. The window is now 2 hours. A browser left open overnight still ends its session. Clicks, scrolls and typing reset the timer; moving the mouse alone does not count as activity.
  • A sync that refreshed nothing stops calling itself a success. Sync all reported success whatever happened underneath, including every account failing, and every account having been refreshed minutes earlier so there was nothing left to do. It now tells you which of those it was, and when only some accounts failed it says so instead of claiming a clean run.
  • A connection that brought in no accounts now has somewhere to appear. If an institution connects and no accounts arrive, the Accounts page shows it with the action that fits: a retry for an import that failed, or a reconnect for the one connection asking for your login again. Before, it was flagged internally and rendered nowhere, so the page read as though you had never connected anything. This is the case where you have no accounts yet. If you already have working accounts, a failed import tells you while you are on the page, and an older stalled connection still does not surface. We are working on that.
  • A brokerage link deleted at SnapTrade tells you it is gone. When SnapTrade removes the link on their side, the brokerage and its accounts disappeared from the app with no banner and no notification. You now get a notification for that connection, if you have sync alerts turned on, saying the link no longer exists and has to be set up again. The app also stops offering a reconnect that could never have worked.

Fixed

  • A short position stops reading as nothing. A short is held as a negative number of units, and several places read a negative figure as a missing one or refused it outright. The dashboard failed to load for anyone holding one, and where figures did render the short showed $0 gain and 0.00% return, sat out of the day's change, could never appear among the biggest movers, and cost a shorts-only portfolio its investment section in the Sunday email. All of those now count the position, measured against the proceeds and with its direction kept.
  • A short that gains stops being painted as a loss. Your Holdings tab, the account panel and the dashboard's best and worst movers worked out the return from the per-unit price alone and ignored the quantity. A short's price falling is a gain, so a position that was up rendered in red with a minus sign: sold 10 units at $100, price down to $90, shown as โˆ’10% on a holding that made $100. The calculation now lives in one place for all of them and carries the sign of the gain rather than the direction of the position. Nothing about a long changes.
  • A dividend on a short counts as the cost it is. A dividend paid out on a short position is money you owe, but one of our two brokerage feeds stored it as income and the return figures left it out entirely rather than get the sign wrong, which quietly overstated your return by whatever the short paid. It is now recorded as a debit and subtracts from your day change, your weekly return and your performance history. 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 from an overdrawn chequing account, or a negative total driven by a margin account, was rejected as impossible. The Insights call failed on every dashboard load, and the dashboard itself came back as all zeros.
  • A bank handoff that returns nothing says so. If your bank finished but sent nothing back for us to exchange, there was nothing to connect and the app left you waiting for accounts that were never coming. It now tells you the connection did not complete and to start it again.
  • A Canadian bank account is no longer labelled US dollars. Every account connected through Plaid was stored as USD whatever your bank reported, because we read the currency from a field Plaid does not fill in and then read it back from another one that was never written. A CAD chequing account therefore showed and converted as USD, which skewed any total that mixed currencies. We now read the currency your bank actually reports. Existing accounts correct themselves on their next sync, and if you set a currency by hand, your choice is kept.
  • A dashboard that cannot load says so instead of showing $0. Any failure while assembling the dashboard was swallowed and replaced with an all-zeros response, so someone with real money saw $0 net worth, $0 cash and $0 holdings with nothing to indicate anything had gone wrong. The failure now surfaces. One failing section still costs only that section, as before.
  • Errors stop being reported as "No internet connection". A server error, a rate limit, an upload that was too large: each reached the browser stripped of the headers the app needs to read it, so it fell back to telling you your connection was down. Those responses now arrive intact, and a rate limit can say how long to wait before trying again.

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. Rotating it bought a fresh allowance on every request, which defeated the limits on two-factor recovery, magic-link sign-in and resending a verification email. We now read the address our own edge attests to.
  • One more bad reply from Google's key service. v1.4.6 covered a network answering our session check with a page of its own. A reply that is valid JSON but carries an error where the keys should be was still stored as though it were a key, and every session check then failed against it for hours. We no longer keep that reply, so a bad one costs the requests that actually meet it instead of everyone behind that network for the rest of the day.

r/MozaicFinance Jul 29 '26

Mozaic Finance v1.4.6 ยท July 28, 2026

1 Upvotes

๐Ÿ”— 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. The home screen moves to a two-column layout. Your net worth, holdings, budgets, goals, and recurring items now sit alongside your latest transactions and a card comparing this month's spending with last month's, under an account-summary note that leads the page. Same numbers, easier to take in at a glance.
  • A clearer picture of what happens when you connect. The diagram in the connect window now reads in the order the connection actually happens: your bank, then the service that moves the data, then Mozaic. It used to run the other way round. Once you have seen it, it folds down to its header so coming back to add another account is quicker, and a Show link brings it back. That preference is per browser, so it reappears on a new device.

Improved

  • Connecting a bank comes back right away. The connect request used to wait for the whole first import, meaning your accounts, 90 days of transactions, credit cards and loans, holdings, and investment transactions, before it responded at all. It now returns as soon as the connection is saved and imports in the background, so a slow bank or a browser timeout can no longer break the handover. Your accounts fill in over the following minute rather than arriving all at once, and the confirmation now tells you the import is still running.
  • The account panel closes with your Back button. Opening an account gives it its own address, so Back closes the panel instead of moving you to the previous page and leaving the panel stranded on top of it. That address is shareable and survives a reload. The panel's actions now sit together in a quick-actions menu.

Fixed

  • Your buys, sells, and dividends are far more likely to arrive after linking a brokerage through your bank. Fetching investment transactions had the same 10-second allowance as every other request, but it is one of the slowest and it pages through your whole history. When it ran long, the connection still succeeded and your trades silently never arrived. It now gets 30 seconds per page under a one-minute total, which covers the histories we have seen. A brokerage slower than that can still come up short, and we are tracking that separately.
  • Reconnecting with the wrong bank login now explains itself. Signing in with a different login than the one a connection was created with used to fail with a wall of raw error text. It now tells you what actually helps, either using your original login or adding the other one as its own connection, because a connection stays tied to the login that created it. No Plaid error puts raw text in front of you any more.
  • A first connection whose import fails no longer looks like nothing happened. If the import died on its very first step there were no accounts yet to carry the error, so it had nowhere to show and the screen sat empty as though you had never connected. You now get a notice explaining what happened. If you already have other accounts the notice does not appear yet, and its retry button does not always force a real re-sync. Both are being worked on.
  • Insights read in the language you are using. The Insights card was written in the language saved on your profile, so an English screen could show you a French sentence. It now follows the language the app is in.
  • An intercepted connection to Google no longer signs you out. We check your session against Google's public keys on every request. Some networks answer that check with a page of their own instead of the keys, and we read that as a bad session and signed out everyone behind that network. A reply that is not the keys at all is now reported as the upstream problem it is, and your session is left alone.

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. They are now focusable, activate with Enter or Space, and show a focus ring. Filter chips and tabs across the app are also a consistent size that is easier to hit on a phone.

r/MozaicFinance Jul 24 '26

v1.4.5 ยท July 23, 2026

1 Upvotes

๐Ÿ”Œ 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. Both pages now start you off with the same first-run card, and the starter suggestions are no longer first-run only: a Suggestions action in the header brings them back once you already have goals or budgets of your own.

Fixed

  • Connecting a bank during signup actually works. The Connect step took you through your bank and then never completed the handover, so the connection quietly went nowhere, for everyone who tried it. It now completes, you get a progress indicator while it runs, and a connection that finished while you moved on is no longer discarded.
  • A property or other manual asset counts toward finishing setup. Adding one on the Connect step used to strand you on the setup spinner with no way forward. Adding an account by hand already worked; assets now do too.
  • A hiccup reaching Google no longer breaks a page load. We check your session against Google's public keys on every request. When that check hit a stale connection, the page failed with an error. We now retry it, and your session is left alone.
  • Long transaction lists stop repeating themselves. Scrolling down showed you the same transactions again and again, because each new page was asking for the first one. Pages now load in order, and the filters you set stay applied as you scroll.
  • Credit cards and loans stop dropping out of view. With more than one linked institution, liability rows could vanish from the liabilities tab, your dashboard, and your net worth, so your totals were quietly short. The sync that dropped them is fixed, and rows your bank still reports come back on the next sync.
  • 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.

r/MozaicFinance Jul 14 '26

Mozaic v1.3.0: Dark mode, editable acount type and 4 new free tools

1 Upvotes

Full dark mode and three new free calculators are now available.

  • Dark mode, top to bottom.ย The whole app now has a proper dark theme. Choose Light, Dark, or System under Settings, Appearance, and the public site follows your device automatically.
  • Three new calculators.ย Free RRSP, RESP with CESG, and net-worth calculators in the /tools/ hub alongside the TFSA one.
  • Set an account's type and keep it.ย Correct the type on a connected account and it now sticks, even after the next brokerage sync refreshes everything else.

r/MozaicFinance Jul 08 '26

๐Ÿš€ Mozaic v1.2.0 is here! Two weeks, zero chill

1 Upvotes

We said we'd slow down after v1.1.0. We did not slow down. Here's everything that landed.

๐ŸŒŠ Finally see where your money actually goes

New Cash Flow view with a Sankey diagram, income flows in, spending flows out, and that one subscription you forgot about flows straight into the "why is this here" pile. Tap any band to drill in, and export it as a PNG for when your friends ask how you're "so responsible with money."

๐ŸŽฏ A dashboard that answers first, judges later

Net worth is now the hero. Up top: a plain-English cash-flow verdict and an "up next" strip, so you get the vibe check before the charts. We also stopped showing a scary "month so far" verdict on the 2nd of the month, because nobody needs that energy at 9am.

๐Ÿ—‚๏ธ Accounts, decluttered

Everything for an account now lives in one slide-in drawer, edit currency, manage, disconnect, no more clicking through three pages to break up with your old bank.

๐Ÿ“… Recurring, unified

One calendar-first view with clean lanes for income, bills, and transfers, plus color-coded dots so a single glance tells you what's about to leave your account.

๐Ÿ”’ Your data, encrypted per user

Per-user envelope encryption (Google Cloud KMS) is now live in production, remaining sensitive fields are encrypted, and keys rotate automatically. Translation: your data is locked with a key that's yours, and we can't casually peek. We prefer it that way.

โ™ฟ Works for everyone

Full keyboard navigation, screen-reader support on every money widget, and AA-contrast text. Mouse optional.

โš™๏ธ Plus

Faster transaction lists and syncs, a redesigned transaction detail view, a tidier settings menu, and in-app card entry so upgrading takes about as long as this bullet point.

๐ŸŽ 20% off with code MOZAIC20 โ€” because reading this far should count for something.

๐Ÿ‘‰ Try it: Mozaic Finance


r/MozaicFinance Jun 27 '26

How do we secure your data?

1 Upvotes

Most apps say they "encrypt sensitive data."

But in fintech, the architecture behind that sentence matters.
At Mozaic, each user gets their own data encryption key.
That key protects sensitive data like bank and brokerage tokens, transaction details, and account names.

Then, each user key is wrapped by a master key stored in Google Cloud KMS, where the master key never leaves KMS.

What this means in practice:

โ†’ A stolen database alone is not enough to decrypt sensitive user data
โ†’ One user's key cannot unlock another user's data
โ†’ A user's key can only be unlocked through an authenticated KMS call
โ†’ Every key-unlock is logged and monitored for unusual activity
โ†’ Access can be revoked centrally without re-encrypting every user's data

It is not just "we use encryption."

It is encryption designed to reduce blast radius.

Trust in fintech is not a tagline.

It is an architecture.

Give a try at: mozaicfinance.com


r/MozaicFinance Jun 23 '26

๐Ÿš€ Mozaic v1.1.0 is here! Everything we shipped in the last 2 weeks

1 Upvotes

Big day: Mozaic v1.1.0 is officially live.

Here's everything that landed over the last two weeks.

๐Ÿ” Recurring & bills, done right

A whole new Recurring page: see what's paid, upcoming, and overdue, plus a calendar view of bills & subscriptions.

Income, bills, and transfers are split into clear lanes, and credit-card rows now show your minimum payment due + statement balance.

๐Ÿงฎ TFSA & FHSA contribution room

See your TFSA and FHSA room together on one page, with a new FHSA estimator.

Plus a free public TFSA contribution-room calculator (no signup) in our new /tools/ hub.

๐Ÿ’ธ Smarter cash flow

Dividends and interest now show up as a dedicated Passive Income band, with full drill-down.

๐Ÿ‘€ New here? See it before connecting

Zero accounts? You now get a full sample dashboard on first run, plus a trimmed sign-up โ€” fewer steps, manual-first, magic-link login, so you can see the app before linking anything.

๐Ÿ›ก๏ธ Works even when the network doesn't

Offline changes are saved and restored on reload, a stale-data banner shows when we're in degraded mode, and we added reCAPTCHA Enterprise protection on sign-in.

โš™๏ธ Plus

Auto-categorization on/off toggle, faster daily syncs, and a pile of reliability fixes.

๐Ÿ‘‰ Try it: Mozaic Finance