Security you can actually verify.
Where your data lives, how it's built — and, because honesty is the point, what we don't protect yet. No "bank-level security" slogans.
How a record is protected.
Every save on the web passes through three layers.
1 · Encrypted in transit
HTTPS/TLS on every connection — protected on the wire.
2 · Row-level isolated
PostgreSQL RLS locks every row to your account — even from us.
3 · Tax IDs stripped
The schema has no column for full SSN/EIN — only a masked last-4.
Each one is true because of how it's built.
Properties of the system — not policies we could quietly change.
The database has no column for the full value — only a masked last-4. Architecture, not policy.
No Plaid-style aggregator. You import a CSV/OFX/QFX file, parsed locally. Credentials have nowhere to go.
iPhone, iPad and Mac store everything on-device with SwiftData and work offline. Sync is opt-in.
PostgreSQL Row-Level Security locks every row to its owner — the database refuses other accounts' rows, including to us.
Independent and bootstrapped, not advertiser-funded. Your records aren't a product — there's nothing to sell.
Export to CSV/PDF whenever you like; deleting your account removes your cloud rows. No retention games.
Two paths, both private by default.
Apple apps and the web app store data differently. Here's exactly what's true for each.
On iPhone, iPad & Mac
- All data stored on-device with SwiftData
- Works fully offline
- Optional sync via your own iCloud (CloudKit)
- Or an optional cross-platform private cloud — your choice
- Nothing sent to our servers unless you turn on sync
On the web app
- Private cloud (Supabase PostgreSQL), isolated by Row-Level Security
- Statement files parsed in your browser before anything saves
- Encrypted in transit (TLS) and at rest
- Never your full SSN or EIN — only a masked last-4
- No bank credentials, no ads, no analytics resale, no brokers
Web auth starts anonymous; add an email magic-link or password later if you want. More in the FAQ →
The stack, layer by layer.
The apps
SwiftUI on Apple (SwiftData, local) · React + Vite web on Cloudflare Pages. They parse your statements, so less leaves your device.
The private cloud
Supabase PostgreSQL with Row-Level Security · Edge Functions for sensitive work · Auth for anonymous, magic-link & password sign-in.
In transit & at rest
HTTPS/TLS on the wire, provider encryption at rest — and full tax IDs aren't there to encrypt in the first place.
Tax IDs, by schema
- Masked last-4 stored, so you recognize the record
- No column exists for the full SSN or EIN
- A breach can't leak what was never collected
Payments, by design
- Optional card payments run through your own Stripe
- Money goes directly to you — we never hold funds
- We never store your Stripe secret keys
What we store — and what we never do.
If your data syncs to the cloud, here's exactly what's in there. No surprises.
Stored in the cloud
- Business records: clients, invoices, income, expenses
- Appointments, mileage logs and bookkeeping entries
- A masked last-4 of any tax ID — never the full number
- Your account identifier, so RLS can lock rows to you
Never stored
- Your full SSN or EIN — there's no column for it
- Bank credentials — there's no aggregator to capture them
- Plaintext passwords — Auth handles them; we never see them
- Stripe secret keys, ad profiles, or anything sold to brokers
What we can't promise yet.
A security page that only lists strengths is an ad. Here's the candid version.
No SOC 2 or ISO 27001 audit yet — real, expensive milestones we haven't reached. If a formal attestation is a hard requirement today, you should know up front.
The web app is not end-to-end encrypted. The cloud can process your non-secret records to sync them — but can't read your full tax IDs (not stored), and RLS blocks any other account. For the strongest privacy, use the Apple apps on-device.
How to judge it
Strongest privacy: Apple apps (coming soon), on-device or your own iCloud. Web app: records live in an isolated private cloud, full tax IDs never do, nothing is ever sold. Pick the trade-off that fits — questions to honorius@neogy.dev.
Privacy you can read, line by line.
You know exactly where your data lives. The web app is free, and your numbers stay yours.