Security & compliance · last reviewed October 2, 2026

Your client data, protected like ours.

Bookkeeping data is sensitive: bank lines, vendor patterns, owner contact details. We treat it like medical records. Below is exactly what we do, what we don't do, and what we're still working on. No marketing claims we can't back up.

support@ledgerinbox.com · coordinated disclosure

  1. 01Your bank, through PlaidgetsTransactions, and each account's name, type and last four digitsneverYour bank login
  2. 02LedgerInboxgetsYour books and files, scoped to your firm, encrypted at restneverCard or account numbers
  3. 03The AI that suggests a categorygetsOne line's vendor, description, amount and memo, and your category namesneverThe date, names, balances or payroll
  4. 04QuickBooks OnlinegetsOnly what you approve with a keystrokeneverAnything you didn't press a key for

Start with where it sits.

Data at rest

Where it lives.

  • All customer data is stored in Postgres on Supabase (AWS us-east-1), encrypted at the volume level with AES-256. The one thing kept outside it is abuse-prevention counters, held in Redis in the same region — a request tally keyed by your internet address or a scrambled email, kept at most an hour, and never bookkeeping data.
  • Every query is scoped to your firm in our server code, and every table is locked with row-level security so the public database API can read nothing at all. The app itself connects as a trusted server role, so firm scoping is enforced in application code, and our integration tests seed a second firm to check data doesn't cross between firms.
  • Bank and QuickBooks Online access tokens, other connection credentials and two-step secrets are additionally encrypted by our code with AES-256-GCM before being written to the database. Other fields — names, bank descriptions, emails — rely on the volume encryption above.
  • Backups are encrypted by Supabase and taken daily; each one rolls off after 7 days. Firm deletion purges every row scoped to that firm, so it is gone from backups a week later.

Then how it moves.

Data in transit

How it travels.

TLS 1.2+ enforced end-to-end via Vercel's edge. HSTS is set on every response with a 2-year max-age. Outbound transactional email is signed with SPF and DKIM through Resend.

The part everyone asks about.

What the AI sees

What the AI sees.

The categorization model (OpenAI GPT-4o-mini, with Claude Sonnet as a configurable alternative) receives only the bank line's vendor name and description, its amount and whether the money came in or went out, its memo when it has one, and the names of that location's categories that can take that money, so it can only pick one of yours. While “Use past decisions” is on, it also receives up to eight lines your firm already categorized that look most like it — vendor, description and the category chosen — from any of your locations, when that category is on the list. To find those look-alikes, OpenAI's embedding model reads each line's vendor, description, amount and the location's business type. The date is never sent, and neither are location, firm or client names. It never sees balances, payroll details, client contact info, or any data outside the categorization context. Under OpenAI's API terms this data is not used to train its models; OpenAI may keep it for up to 30 days to watch for abuse, then deletes it. We keep no log of prompts — only the suggested category, its confidence and its reason, on the line itself.

And the one thing we never hold.

Bank credentials

Your bank login? We never see it.

We never see them. Bank connections go through Plaid via OAuth. The token LedgerInbox holds can pull transactions but cannot move money, change passwords, or read non-bank data. You can revoke it at any time from Settings → Bank connections or directly at your bank's portal.

What we refuse, on purpose.

What we don't do

What we don't do.

  • Sell, share, or analyze customer data for any purpose other than running the service.
  • Train or fine-tune AI models on customer data.
  • Send marketing emails to your clients.
  • Look at a firm's books except to fix a problem you report, keep the service running and secure, or comply with the law. Only the people who run LedgerInbox — today, its owner — can reach production systems.

Where we stand today, honestly.

Compliance

Where we stand.

SOC 2

Not yet certified, and no audit is scheduled yet. This badge will update with the real audit window when work begins.

GDPR / CCPA

We don't sell or share data. You can export your firm's data from Settings and delete the firm from Danger Zone, which purges every row scoped to it. For any other data request, email support@ledgerinbox.com.

PCI DSS

We never see or store full card numbers — only a card's brand and last four digits on your invoices. Lemon Squeezy, our merchant of record, handles all payment processing as a PCI Level 1 provider.

QuickBooks Online connection

Works with QuickBooks Online through Intuit's API, signed in with Intuit's own OAuth. We're in Intuit's developer sandbox today; production approval is a separate Intuit review, and this card will say when it lands. LedgerInbox is not affiliated with or endorsed by Intuit.

Everyone else who handles it.

Subprocessors

Who else handles it.

Companies that process customer data for us — all in the United States. How long each keeps it is on the privacy page.

WhoWhat they doWhich of your data
SupabaseOur database, sign-in and file storage.Everything in your account: books, receipts, sign-in records, team members. United States (AWS, Virginia).
VercelHosts the website and app; cookieless page-view analytics.Every request (internet address, browser), short-lived server logs, page views and a few product events. United States.
OpenAISuggests categories and finds look-alike past lines.A bank line's vendor, description, amount, direction and memo; your category names; up to eight past lines. United States.
AnthropicAI assistant our engineer uses when fixing a problem or building the product; an alternate category model (off).The records involved in the problem being worked on. United States.
InngestRuns background jobs (syncs, suggestions, posting, nightly checks).What each job works on, including transaction text, amounts, memos and suggestions. United States.
ResendSends our emails; receives the reports you forward to a location's address.Recipient addresses and email contents: sign-in codes, invites, notices, invoices, manager questions, the cash check, product updates you opted into. United States.
Lemon Squeezy (a Stripe company)Merchant of record: checkout, card payments, sales tax.Name, email, billing address and card. United States.
UpstashCounts requests to stop abuse.Your internet address, or a hashed email. United States (AWS, Virginia).
Google WorkspaceOur support mailbox (support@ledgerinbox.com).Messages you send us; notices of new sign-ups, cash checks and contact-form messages. United States.

Where your data comes from, when you connect it (each under its own privacy policy):

WhoWhat they doWhich of your data
PlaidConnects your bank (read-only).Sends us transactions and each account's name, type and last four digits. United States.
Intuit QuickBooks OnlineYour books.We read the chart of accounts, transactions and company name; we write categories, expenses, deposits, transfers and journal entries. United States.
ToastPoint-of-sale sales, when you connect it.We read each business day's orders and cash-drawer entries and keep the day's totals. United States.

Found a problem? Tell us first.

Vulnerability disclosure

Found something? Tell us.

If you find a security issue, please email support@ledgerinbox.com. We'll acknowledge your report and work with you on a coordinated disclosure timeline. We don't run a paid bug bounty program yet — when we do, this page will say so with the published scope and payout table.

Satisfied it's safe? See what it finds.

Free for 7 days · no card · export your data whenever you want.

Find what's missingFree for 7 days