Security
How GrantCue protects your grant data
What GrantCue does to keep your grant data private, in plain terms: encryption, database-enforced separation between organizations, two-factor sign-in, rate limits, backups and monitoring. Hosted on Supabase and Vercel.
How we protect your data
Encryption
Traffic between your browser and GrantCue uses TLS, and the site tells browsers to use HTTPS only. The database and file storage run on Supabase, which encrypts stored data at rest. On top of that, GrantCue encrypts the secrets it keeps for you with AES-256-GCM before they are saved: the tokens for connected apps such as Slack and Google Drive, webhook signing secrets and two-factor secrets. Only the server can read them back.
Row-level security
Each organization's records are separated by row-level security rules inside the Postgres database, not only by checks in the app. The database compares every query with the signed-in user's organization and role. A request sent straight to the database API instead of through GrantCue's pages is held to the same rules.
Two-factor sign-in
Anyone can turn on two-factor sign-in with an authenticator app and get 10 single-use recovery codes. An organization admin can require it for admins or for every member. A trusted device skips the prompt for 30 days. Where an organization requires it, the database refuses a session that has not passed the second factor, so skipping the app does not skip the check. Five wrong codes lock the account out for 15 minutes.
Roles and activity records
Every member has a role that decides what they can see and change. The Organization plan adds custom roles and an audit trail of status and deadline changes, so you can see who changed what and when. Integration credentials and webhook secrets are readable by the server only, never by the browser.
Rate limiting
Sign-in and two-factor endpoints allow 10 requests a minute from one address, and routes that send email or call an AI model have daily limits per user. The counts live in the database. If the limiter cannot reach it, a request that writes, sends email or calls a model is refused instead of being let through uncounted; plain reads fall back to a per-server count.
Browser protections
Every page is sent with a Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options, frame restrictions and a referrer and permissions policy. Cross-origin requests to the API are refused unless they come from a GrantCue site. A stricter Content-Security-Policy without inline scripts is running in report-only mode: it reports what it would block, and it is not yet enforced.
Backups, files, monitoring and hosting
Backups
Supabase takes a daily backup of the database and keeps the last 7. Point-in-time recovery is off, so in the worst case up to a day of changes could be lost. Export your own grants from the app at any time as CSV.
Uploaded files
Documents you upload are scanned with VirusTotal, and a scheduled job checks the result and flags files that fail.
Monitoring and releases
Errors are reported to Sentry, and server logs are kept with Vercel and Supabase. Each release has to pass the automated tests and a dependency vulnerability check before it is deployed.
Hosting and uptime
The application runs on Vercel. The database and file storage run on Supabase in the US East (Virginia) region. Contractual uptime SLAs are part of the Enterprise plan only; Free through Organization plans have no contractual uptime commitment.
Have security questions?
Write to security@grantcue.com. The services that process your data are listed in the privacy policy.