Security
We read your books. We never move your money.
What we can reach, what we cannot, and how your credentials are kept. Every statement here describes the code as it runs today.
In short
- We read your bank, your accounting system and your finance email. We never move money and never write to your books.
- You sign in to your bank on your bank’s own pages, through a regulated Open Banking provider. We never see your bank login.
- Ada sends an email only after you approve it, or when the standing orders you signed let her send that kind herself (the friendly reminder and the statement, never the firm letter or the final notice). Anything she sends by herself waits ten minutes first, so you can stop it. Money never leaves without your own bank asking you.
- Connection credentials are encrypted at rest with AES-256-GCM. Disconnecting a source deletes them at once.
- You sign in with a one-time code sent by email. There is no password to steal.
- Your data is seen by you and by the accountant you choose to add.
What each connection can do
The permission lists below are printed from the connector code itself, so this page cannot say one thing while the connect flow asks for another.
Bank accounts (Open Banking)
You connect a bank through TrueLayer or Enable Banking, both regulated account information providers. You sign in on your bank’s own pages; we receive a token, never your bank username, password or card-reader codes. The token can read account names, balances and transactions. It carries no payments permission, so it cannot move money, set up a payee or change anything at your bank. Your consent runs for up to 90 days at a time; you can end it at your bank or by disconnecting in Settings.
Permissions asked for: info accounts balance transactions offline_access
Enable Banking issues a consent session rather than a list of permissions: it covers the accounts you tick and lasts up to 90 days.
Xero
Every Xero permission we ask for ends in .read. We can read your chart of accounts, contacts, invoices, bills, bank transactions, posted journals and the bank summary report. We cannot create, change or delete anything in Xero.
Permissions asked for: openid profile email offline_access accounting.settings.read accounting.contacts.read accounting.invoices.read accounting.banktransactions.read accounting.manualjournals.read accounting.reports.banksummary.read
QuickBooks Online
Intuit offers one accounting permission, which covers reading and writing; there is no read-only version to ask for. Our QuickBooks code only ever runs queries. There is no code in the product that creates, changes or deletes a record in QuickBooks.
Permissions asked for: com.intuit.quickbooks.accounting
Sage Business Cloud Accounting
We ask Sage for its read-only permission.
Permissions asked for: readonly
Gmail
Two mail permissions: read, and send. Reading looks for email about money: invoices, receipts, statements, HMRC, remittances, reminders and demands. Spam and the bin are never searched. Sending is used only by Ada’s desk, after you have approved the exact email (see below). We do not ask for permission to delete, move, label or change your email, so we cannot.
Permissions asked for: https://www.googleapis.com/auth/gmail.readonly https://www.googleapis.com/auth/gmail.send openid email
Microsoft 365 and Outlook.com
Read mail and send mail, plus the permission to know whose mailbox it is and to stay connected between visits. Junk Email, Deleted Items and Drafts are never read. We do not ask for the read-write mail permission, so we cannot change your mailbox.
Permissions asked for: offline_access Mail.Read Mail.Send User.Read
Any other mailbox (IMAP)
You give an app password for the mailbox. We test the login before anything is saved, then store it encrypted like every other credential. Junk, Trash and Drafts are never read. Connections use TLS only, and Ada sends through the same login over SMTP, again only after your approval.
What we keep from your email
For each email about money we store the sender, the subject, the date, an extract of up to 300 characters, the amount, due date and invoice number found, a one-line summary and the names of the attachments. PDF and Word attachments are read for their figures (statement balances, invoice totals, sums demanded in letters) by fixed rules on our server; each figure is kept with the file name, the email it came from and the words it was read from. An email that matched the search but turns out not to be about money is kept only as a dismissed line (sender, subject, date, extract) so it is not read again. Email that never matches the search is not fetched.
Sending email: your sign-off, every time
Ada can draft an email to a customer, a supplier or a creditor. The draft goes on her desk and waits. Only an owner of the business can approve it, in the app or by replying YES to the numbered item on WhatsApp; an accountant cannot. An approved email is sent exactly once: two approvals, or a click racing a WhatsApp reply, cannot send it twice. Every pound figure in the draft must match a figure from your ledger or your own words, or the draft is refused before it reaches the desk. Standing instructions you have given her (“leave that creditor alone”, “contact only through my solicitor”) are enforced at the point of sending, not just remembered.
How your credentials are stored
Bank, accounting and mailbox tokens, and IMAP app passwords, are encrypted before they are written to the database with AES-256-GCM, using a key derived from a secret that lives only in the server’s environment and a fresh random nonce for every value. The server refuses to start in production if that secret, or the one that signs sessions, is missing. When a provider refreshes a token, the new one is encrypted the same way as it arrives. When you disconnect a source in Settings, its encrypted credential is deleted at once, and a disconnected mailbox’s stored emails go with it.
In transit
The app is served over HTTPS. The sign-in cookie is marked HttpOnly and, in production, Secure, so scripts cannot read it and it is never sent over plain HTTP. Every call to a bank, accounting or mail provider goes to that provider’s HTTPS address; the Outlook connector refuses to follow any link that is not on Microsoft Graph, and IMAP and SMTP connections require TLS.
Signing in without a password
You sign in with a six-digit code sent to your email address. The code is stored only as a hash, expires after ten minutes, is retired after five wrong guesses, and is replaced the moment you ask for a new one. Requests are limited to three codes per address every ten minutes, with a separate limit per network address, and the checking of codes is limited in the same way, so a code cannot be found by trying. In production the code is never shown on screen; it exists only in your inbox. A correct code gives you a signed session cookie for 30 days. The session is honoured only while you are still a member of the business behind it: remove someone and their session stops working at once.
What Ada can and cannot do
- She cannot move money. No bank connection carries a payments permission.
- She cannot write to your books. Xero is connected with read permissions only, Sage with its read-only permission, and the QuickBooks code only runs queries.
- She cannot send anything you have not approved, and cannot delete, move or alter your email.
- She does not compute figures. Code computes every number from your ledger; a guard checks every pound and percentage she writes against those numbers. How Ada uses AI explains the line.
- She remembers only what you tell her yourself. Text inside an email, a bank line or a document can never become a memory or an instruction to her.
- Messages on WhatsApp are checked. An inbound message is accepted only when the provider’s signature on it is valid; in production an unsigned message is refused.
Who can see your data
A business’s data is visible to its owner, and to the accountant the owner adds by email in Settings. Every page and every API call checks that the signed-in person, or the business’s own API key, belongs to the business it is about. An accountant sees what the owner sees and no more: they cannot approve anything that leaves the business, and they can act on the inbox only if the owner switches that on for them. The owner can remove an accountant at any time, and their access ends at once. Only the owner can change what Ada remembers. People at CIJ Labs do not open your data unless you ask us to for support, it is needed to keep the service secure, or the law requires it; the privacy policy sets this out.
Deleting your data
Disconnect any source yourself in Settings: its credential is deleted at once, and a mailbox’s stored emails with it. Delete anything Ada remembers in Settings under “What Ada remembers”; a deletion there is permanent. To delete your account and all of your business data, email info@cijlabs.com from the address on your account with the subject “Delete my data”; the privacy policy sets out the timescale.
Where it runs
The service runs on Railway, with its database on Railway’s PostgreSQL, behind HTTPS. The health endpoint reports whether the server and its database are up and shows no secrets. There are no advertising or analytics trackers on the site; the only cookies are the one that keeps you signed in and short-lived ones that protect a connection while you link it.
What this page does not say
There is no independent security certification behind this page. It describes what the code does, and we will answer questions about any of it. If something here does not match what you see, tell us and we will correct the page.
Report a concern
Email security@cijlabs.com with what you found and how to reproduce it. Please do not test against other customers’ data.
Quidwise CFO provides financial intelligence and analysis, not regulated financial, tax or legal advice. See also how Ada uses AI, the privacy policy and the terms of service.