Security

Financial data is a liability we take seriously.

ShadowLedger reads accounting data to find wasted software spend. That is all it does with it. Here is exactly how the data is accessed, stored, and removed, in plain terms.

Read-only, always

ShadowLedger only ever reads. When you connect QuickBooks, we issue query calls to pull transactions and vendors. We never create, edit, or delete anything in your books, and we never touch payroll runs, payments, or bank credentials.

No access required to try

The CSV path runs entirely from a file you export yourself. No login, no OAuth, no connection to anything. You see the found money first, then connect QuickBooks only if you want continuous syncing, and we only ever read.

Tokens encrypted at rest

If you connect QuickBooks, the OAuth tokens are encrypted with AES-256-GCM using a fresh nonce per record. The encryption key lives in the runtime environment, never in the database, so a database copy alone reveals nothing.

Isolated per account

Every scan, connection, vendor rule, and finding is scoped to your account at the query layer. There is no shared view and no cross-account lookup. One account can never read another account's data.

Revoke and delete on your terms

Disconnect QuickBooks and we revoke the grant with Intuit right away, so the token stops working immediately. Delete stored scans whenever you want. Close your account and every grant is revoked the same way before the data is erased, so nothing is left pointing at your books.

Hardened transport and app

All traffic is HTTPS. Reports render inside sandboxed frames, responses carry a strict security-header set, and every billing and account webhook is signature-verified before it is trusted.