Security
Last updated: August 11, 2026
Campaigns hand us donor records, contribution history, and voter contact data — the material that does the most damage if it leaks. This page describes how the platform protects it and what we do not yet claim.
Tenant isolation
Every domain record carries the ID of the campaign that owns it, and isolation is enforced in the database rather than only in application code. Each table has PostgreSQL row-level security enabled with policies that scope reads and writes to the campaigns the signed-in user belongs to. A query that forgets a filter returns nothing rather than another campaign's rows.
A small number of trusted server paths — payment webhooks, scheduled jobs, and cross-campaign aggregation — use a direct database connection that bypasses row-level security. Those paths are server-only, never reachable from the browser, and scope every query by campaign in code.
Authentication and access
- Sessions are managed by Supabase Auth. Credentials are never stored by us in a form we can read.
- Campaign owners control membership and roles; a member's role determines what they can see and change.
- Electify staff do not browse customer data casually. Support access to a campaign is an explicit, time-boxed action that requires a stated reason and writes an entry to an append-only audit log.
Encryption
All traffic is served over TLS, with HTTP Strict Transport Security. Data is encrypted at rest by the database and storage providers. Third-party integration tokens (mail, messaging, calendar) are encrypted before storage and are never exposed to user-facing clients.
Financial records
The contributions ledger is append-only and enforced as such by database triggers: rows cannot be updated or deleted, and a refund or correction is a new row that references the original. Compliance totals are derived by summing the ledger, so an accurate history cannot be quietly rewritten — by a user, by staff, or by a bug.
Card data never touches our servers. Contribution processing runs through Stripe; we store the resulting ledger entry, not the payment instrument.
Infrastructure and subprocessors
The application runs on Vercel; the database, authentication, and file storage run on Supabase (PostgreSQL), which takes automated backups with point-in-time recovery. Payments run through Stripe, messaging through Twilio, email through Resend, and AI features through Anthropic. The full list, with what each provider does, is in the Privacy Policy.
Data handling practices
- We do not sell personal information, and mobile opt-in data is never shared with third parties for marketing.
- Public campaign finance disclosure data is used for research and analysis only, never to build solicitation lists — a separation the platform enforces, not just a policy statement.
- Content sent to AI features is not used to train models.
- Campaigns can export their data at any time, and we will delete it on request subject to recordkeeping obligations.
What we do not claim
Electify is an early-stage product. We do not currently hold SOC 2, ISO 27001, or any comparable third-party certification, and we do not claim one. We do not offer a formal uptime SLA outside a written agreement. If a certification or contractual commitment matters to your committee, tell us what you need and we will tell you honestly where we stand.
Reporting a vulnerability
If you believe you have found a security issue, report it through our security contact form. Please include enough detail to reproduce the issue and give us a reasonable window to fix it before publishing. We will acknowledge reports and keep you updated on the fix.
Please do not access, modify, or exfiltrate data belonging to another campaign while testing. Good-faith research that respects that line is welcome; we will not pursue action over it.
Incidents
If a breach affects a campaign's data we will notify the affected account holders promptly with what we know, what we have done, and what they should do — and we will follow applicable breach-notification law.