Security
You are being asked to connect a business bank account to software you have just met. This page is the plain answer to "why would I do that" — what Annalis can see, what it stores, and what it structurally cannot do.
The four things that matter most
-
Cannot move money
Bank connections are read-only. Annalis can read transactions and balances on the accounts you select. There is no payment, transfer or bill-pay capability in the product — not disabled, not permissioned off. It does not exist.
-
Never sees your bank password
Bank sign-in happens inside Plaid, not on our site. Your bank username and password never reach our servers, and we could not produce them if asked.
-
You choose the accounts
After connecting an institution you pick which accounts belong in your books. Transactions from the rest are never read. We never request brokerage, 401(k), IRA or other investment accounts, even when your bank offers them.
-
No tracking inside the app
Once you are signed in there is no analytics script, no advertising pixel and no third-party tracker of any kind. The only cookie is the one keeping you signed in. Our public pages use Google Analytics to count visits; your books are never in reach of it.
What we store, and what we deliberately don't
| We store | We never store |
|---|---|
| Account name and type, and the last four digits of the number | Full card or bank account numbers |
| Transactions on the accounts you selected | Transactions from accounts you did not select |
| A Plaid access token, encrypted at rest | Your bank username or password |
| A one-way bcrypt hash of your Annalis password | Your Annalis password in any readable form |
| The statement PDFs you upload, so your accountant can get to source documents | Social Security numbers or government identifiers |
How credentials are protected
- In transit. All traffic is encrypted over HTTPS.
- Bank tokens. The access token Plaid issues is the one genuinely sensitive secret we hold. It is encrypted at rest with a key that lives in the environment and not in the database, so a copy of the database on its own does not yield working bank access.
- Passwords. Stored as bcrypt hashes and never recoverable. A password change retires every existing session immediately.
- Password resets. Links are single-use, expire within an hour, and only a hash of the token is stored.
- Brute force. Repeated failed sign-ins lock the account temporarily, and repeated failures from one source are throttled independently of any single account.
Separation between businesses
Every record — statement, transaction, rule, finding, bank connection — belongs to exactly one account, and that ownership is checked on every request rather than assumed from the page you came from. One business's data is never used to serve another, and there is no cross-account analysis.
Within your account, roles are enforced server-side. An accountant is read-only by construction: they can view and export every report, drill into the detail behind any number, and download the original statements, and they cannot change a categorization, upload anything, or alter your settings.
Getting your data out, and deleting it
Every transaction, report and stored statement can be exported or downloaded from inside the application at any time — there is no export request to file and no lock-in. You can remove a bank connection yourself, which also instructs Plaid to revoke it. To delete an account entirely, write to privacy@annalis.ai from the address on the account; we delete it and confirm within 30 days.
Automated categorization
When automated categorization is enabled, merchant names that no existing rule covers are sent to Anthropic's API so a category can be suggested, along with the description you wrote of your business. Amounts, account numbers, balances and personal details are not sent — only the merchant text, how often it appeared and its total. Anthropic does not use API inputs to train its models. Suggestions are labeled as suggestions and wait for you to confirm them.
Integrity of the numbers
Security is not only about who gets in. Every statement's parsed transactions are checked against the total the issuer printed on that statement. If a bank changes its PDF layout and the parser starts reading it wrongly, the result is a loud mismatch rather than a quietly incorrect report.
Who else touches your data
| Provider | What they handle |
|---|---|
| Render | Application hosting and the database, in the United States |
| Plaid | Bank connections, only if you choose to connect an account |
| Anthropic | Merchant categorization, only when that feature is enabled |
| Email delivery | Invitations and password reset emails |
Annalis works without a bank connection at all. If you would rather not involve Plaid, upload statement PDFs and nothing is shared with them.
Reporting a vulnerability
Write to support@annalis.ai with "security" in the subject. Tell us what you found and how to reproduce it. We will acknowledge within three business days and keep you posted until it is closed. Please give us a reasonable chance to fix an issue before publishing it, and do not access or alter data that is not yours while testing.
Analytics
Our public pages — the homepage and pages like this one — load Google Analytics so we can see how many people visit and which pages they read. It sets cookies and Google receives the usual page and device information.
It is not loaded anywhere behind sign-in. Inside the application, page titles and paths carry your business's name, your vendors and your figures, and sending that to a third party to count visits is not a trade worth making. If you would rather not be counted on the public pages either, a browser tracking blocker or Do Not Track will stop it, and nothing about the product changes.