Budget App Without Bank Sync: Let Your Bank's Emails Log It
A budget app without bank sync can stay current: Open Net Worth reads your bank's alert emails over IMAP, logs each purchase once and links statements.
Bank sync may not cover your bank, may cost extra, or may need fresh consent every few months. Or you may simply prefer not to link a bank. Your bank already emails you every card purchase and transfer, and that inbox is a feed you can use instead of a connection.
This guide shows how Open Net Worth, an open-source personal wealth agent you run yourself, turns those alert emails into transactions on a schedule, so you can keep a budget current without bank sync.
Short answer: Connect your mailbox with an app password, point the Email connector at a
Financefolder, and turn on an email Automation. Every 12 hours Lucius, the built-in agent, reads new bank, card and trade emails and logs each one once, keyed on the email’s message ID. When the statement arrives, import it and those rows are linked, not booked again.
Note: Open Net Worth is software, not a financial advisor. This post explains how a feature works; it is not financial advice.
When bank sync isn’t an option
Most “budget apps without bank sync” mean manual entry: private, but you type every coffee. Open Net Worth does have bank sync, so check first whether it covers you. The bank and brokerage connectors are in beta.
| You bank in | Sync connector | What you need |
|---|---|---|
| US or Canada | SimpleFIN or Plaid | A SimpleFIN Bridge or Plaid account |
| EU or UK | Enable Banking | Your own app, consent about 90 days |
| Other countries | Lunch Flow | A Lunch Flow developer client |
| Anywhere | Email connector | Alert emails and an app password |
Enable Banking needs your own application (an ID and a private key), and bank consent usually lasts about 90 days. When it runs out, fetches fail until you renew it. Lunch Flow covers banks in 30+ countries through its own sign-in, with a developer client you create. Some banks are in none of them. For the full map of connectors, see our guide to self-hosted personal finance.
Email is the row that works anywhere. It also covers the gap when sync exists but a consent lapses on a holiday.
Your bank already sends the data
Most banks and card issuers can email you on every card purchase, transfer or large debit. The setting is usually called transaction alerts or notifications in the bank’s app. Turn it on for every card and account you want in your books, with the threshold at the lowest amount the bank allows.
A useful alert carries four things: an amount, a date, the account or card, and a counterparty. If your bank’s email has those, Lucius can log it. If it only says “a transaction was made, log in to see it”, there is nothing to read, and email is not the feed for that account.
Connect a mailbox in five minutes
The Email connector logs in to your mailbox over IMAP. There is no forwarding address to send mail to.
- Create an app password at your provider. For Gmail, turn on 2-Step Verification and create one under Google Account, Security, App passwords (Google’s help page). iCloud, Fastmail and Outlook have their own equivalents, listed in the Email connector docs.
- In Open Net Worth, open Connectors, click Browse & add, choose Data sources, then Email and Add connector.
- Click your provider’s chip (Gmail, Outlook, iCloud or Fastmail) to fill in the servers, or Custom for your own IMAP and SMTP host.
- Enter your address and paste the app password.
- Set Mail folder. Leave
INBOXand Lucius can search all incoming mail; set it to a label such asFinanceand it reads only that folder.
Use the folder. In your mail app, create a Finance label and a filter that files your bank, card and broker emails into it, then type the name exactly as spelled in the connector. A filtered folder only holds mail from the day you created the filter onwards.
To check the connection, ask Lucius: “Search my email from the last 7 days for card or bank notifications.” If it lists messages, you are connected.
Turn on the email Automation
On the Email connector’s page, click Automate. That opens the Email finance digest Automation as a draft; click Create automation to turn it on. It runs at midnight and noon, so every 12 hours. Each run logs new bank, card and trade confirmation emails, then sends one short message with what it added and anything else that touches your money, such as a failed payment or a bill due. If nothing was logged and nothing needs you, it stays quiet.
Prefer logging only, with no digest? Open Automations and pick the Auto-log transactions from email template instead. It runs every 12 hours and messages you with what it logged, or if anything went wrong. Both are listed in the Automations docs. The Email finance digest starts in Automatically approve, because nobody is at the screen at midnight to tap a confirm card. Check the approval mode on the logging template when you create it. You can change the schedule and approval mode on either one like any other Automation. The summary goes to the app, or to Telegram if you connected it.
Each run reads the mail since the last run that finished. The logging skill starts an hour before that and never goes back less than a day. So a failed run or a slower schedule does not leave a gap.
You do not need an Automation at all if you prefer to ask: “log the purchases from my card emails this week” works in a normal chat. For how Automations and approvals fit together, see AI agent for personal finance.
What Lucius does with each email
The Automation follows a built-in skill, log-transactions-from-email. It has no fixed sender list: it works from whatever bank, card and wallet mail arrives. For each alert it writes one ledger row:
- Account: the card or bank account the money moved on, matched against your account list, which it re-reads every run.
- Amount and direction: a positive amount, with debit or credit carrying the sign.
- Currency: as the email states it. A card charged in euros is logged in euros, not the bank’s converted figure; the app does the FX conversion.
- Description: the raw bank string, verbatim, because duplicate checks, spend rules and payee matching all read it.
- Category: a real label from your list, or left unset. A wrong guess is worse than none.
Card alerts are often thin, a merchant code and an amount. Before finishing, Lucius looks in the same batch for a receipt email with the same amount and a close timestamp, and uses it to pick the payee and category.
Payees get cleaned up as it goes. When a row invents a payee from a reference-laden bank string, Lucius finds the real merchant, links the row to it, gives it a default category and teaches it the bank’s wording. The next run then matches that merchant without help.
Never twice
Every row carries the email’s own message_id as its reference. The fetch window overlaps the previous run on purpose, so the same email is often read twice; the reference makes the second read a no-op.
A transfer is logged once, on the account the money left. A card bill paid from your bank is that transfer, so the card’s purchases are not logged again. If no account matches, Lucius does not create one. It sends you a message and asks.
When the statement arrives: link, don’t double-book
Email keeps you current; the statement is the record. When you import the monthly statement, the review screen gives each row one of three decisions: Link, Import or Leave out.
A statement row that matches a transaction you already have, entered by hand, from email or by Lucius, defaults to Link. Nothing new is booked; the existing transaction is linked to the statement and marked cleared. Rows the email missed come in as new.
That pairing is why email plus statements works without bank sync: daily freshness from alerts, monthly certainty from the bank’s own file. Our guide to importing bank statements covers the formats, and the Importing docs walk through the review screen.
Limits worth knowing
- Attachments are never opened. A PDF e-statement attached to an email is not read; import the file instead. Only the email text is used, and a long email is cut short before it reaches the model.
- Outlook and Microsoft 365. Microsoft is phasing out password sign-in for third-party mail apps. If an app password is refused, the connector cannot sign in yet. Work and school accounts often have IMAP turned off.
- Review is a check, not a gate. Rows added from email can be flagged for review but already count in your balances and reports. Only you approve them; an Automation can never clear the flag.
- Your emails go to your AI provider. The relevant messages are sent to the model you configured. The mailbox password stays on your machine and is never sent to Lucius or the model. Our post on where your financial data goes covers every outbound call.
- Each run costs AI tokens. How much depends on your model and how much mail arrives; a local model through Ollama costs nothing per call.
- Sending email. The same connector can send email when you ask. In a conversation set to Automatically approve it sends without asking; set the send tool to Needs approval if you want a prompt every time.
The mailbox itself is opened read-only: nothing is marked read, moved, flagged or deleted. Email content is treated as data. That lowers the risk of an email steering Lucius but does not remove it: prompt injection is listed as a known risk in KNOWN_ISSUES.md.
Is email good enough without bank sync?
If your bank emails every purchase with an amount, date, card and merchant, yes for keeping a budget current: rows land every 12 hours, cleaned up, and the statement closes the month. It is not a live balance feed. Fees and interest that your bank never emails about only appear when the statement does.
If you want to compare tools first, our open source net worth tracker roundup and the YNAB comparison show where other apps stand. To run it yourself, start with how to self-host a personal finance app, or browse the features. Other AI apps can also read the same book through the personal finance MCP server.
Frequently asked questions
Do I need to forward my bank emails to Open Net Worth?
No. There is no forwarding address. You connect your own mailbox with an app password, and Open Net Worth reads it over IMAP, read-only. Nothing is marked read, moved, flagged or deleted.
Can it read every email in my inbox?
With the folder left as INBOX it can search all incoming mail, though it only opens messages that look relevant. Set the Mail folder to a label such as Finance and it reads only that folder.
Will a transaction be booked twice when my statement arrives?
It should not. In statement import review, a row that matches a transaction logged from email gets the Link decision: the existing transaction is linked and marked cleared, and nothing new is booked.
Does it work with banks in Singapore or Europe?
The skill has no fixed sender list, so it works from whatever alert email your bank sends, in any country. How well depends on what the email contains: an amount, a date, an account and a counterparty.
Does my email content go to an AI model?
The relevant emails are sent to the AI provider you configured, so Lucius can read them. Attachments are never opened and long emails are cut short. Your mailbox password stays on your machine and is never sent to the model.
Sources
- Email connector (Open Net Worth docs)official
- Automations: logging transactions from your email (Open Net Worth docs)official
- Bank and brokerage connectors (Open Net Worth docs)official
- log-transactions-from-email skill, source on GitHubofficial
- Importing statements (Open Net Worth docs)official
- Sign in with app passwords (Google Account Help)official
- Lunch Flow developer pageofficial