Security
Built for trust.
Bookkeepers handle some of the most sensitive data their clients have. We treat that responsibility seriously — here's exactly how your data is stored, transmitted, and isolated.
Encrypted at rest
Xero OAuth tokens (access + refresh) are encrypted with AES-256-GCM using a per-deployment 32-byte key before being written to Postgres. Even with database read access, tokens are unreadable.
Encrypted in transit
All traffic uses TLS 1.3. The Supabase REST API, Xero API, Postmark, Twilio, and Anthropic endpoints are HTTPS-only. Magic-link upload tokens are URL-safe random 24-byte values.
Strict tenant isolation
Every table that holds firm data has Row-Level Security enforced at the Postgres layer. A firm can only read its own clients, chase runs, documents, messages, and tokens — verified by automated tests.
No PII in logs
We never log client emails, document contents, Xero data, or extracted financial details. Sentry breadcrumbs are scrubbed of PII. Only firm IDs and operation names appear in error reports.
Document storage
Uploaded receipts and statements live in your private Supabase Storage bucket, scoped under firms/{firm_id}/clients/{client_id}/. Access is gated by signed URLs (5-minute TTL) — never public.
Deletion on request
Email privacy@chasedesk.app and we delete your firm row, all child records, and all storage objects within 30 days. Disconnect Xero from Settings to revoke tokens immediately.
What we share with subprocessors
- XeroYour firm's contacts + bank transactions for the connected org. We have read access to contacts, read+write to bank transactions, and write to attachments.
- AnthropicThe bytes of an uploaded receipt or statement when AI extraction runs. Anthropic does not retain this data per their API policy.
- Mindee(Optional) The bytes of an uploaded receipt only when Mindee OCR is the chosen path. Tries first; falls back to Anthropic if confidence is low.
- PostmarkOutbound email content sent to your SMB clients on your behalf. Inbound replies are processed and discarded.
- TwilioOutbound SMS body + recipient number. MMS attachments are pulled with basic auth.
- SupabaseHosts our Postgres database, auth, and storage bucket — all in a single region you control.
Compliance posture
We are pre-revenue and not yet SOC 2 certified. We are designed to meet SOC 2 Type II controls and plan to begin the audit window once we hit 25 paying firms. Until then:
- · Encryption at rest + in transit by default
- · Tenant isolation enforced at DB layer
- · Secret rotation supported (re-encrypt + new keys)
- · Backup snapshots daily (Supabase managed)
- · Single owner with least-privilege ops access
Need a security review or DPA for your firm? Email security@chasedesk.app.