Security

Here is how we access, store and delete your clients' books.

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

Never writes to the books

When you connect QuickBooks Online or Xero, we issue read and 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 accounting login, no OAuth, no connection to anything. You see the found money first, then connect QuickBooks Online or Xero only if you want continuous syncing, and we never write to the books.

Tokens encrypted at rest

If you connect an accounting system, its 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 a ledger and we revoke the grant with Intuit or Xero 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.