Data Retention Policy
Last updated: April 26, 2026
This document describes how Racey retains administrative audit-trail data (“Activity Trail”), how that retention varies by plan, and how user deletion interacts with those rows. It is a supplement to — not a replacement for — the main Privacy Policy.
What we log
Racey maintains an administrative audit trail (“Activity Trail”) recording changes to leagues, organizations, teams, scoring rules, broadcast presets, memberships, and roles. Each entry captures:
- Timestamp (UTC)
- Actor user id + display name (if signed in)
- Action (e.g.
league.update,role.assign,team_member.remove) - Target entity type + id
- A structured context object (“details”) describing what changed
- IP address (from the request)
- League and/or organization scope
Sensitive values — passwords, API keys, session tokens, one-time passwords, authorization headers — are redacted via a blocklist before the row lands in the database.
Retention
| Plan | Retention |
|---|---|
| Free | Rolling 365 days |
| Pro | Rolling 365 days |
| Enterprise | Unlimited |
Retention is enforced by a nightly cleanup job that deletes audit rows older than 365 days whose owning league and organization are both on the Free or Pro plan. Rows belonging to Enterprise leagues or organizations are preserved indefinitely.
GDPR & user deletion
When a user requests account deletion:
- The user's identifying profile fields are anonymized (or removed) on the User row itself (email tombstoned, displayName set to
[Deleted User], avatar/banner/bio/helmet image cleared, etc.). - Audit rows they previously authored remain in the database. The
actorIdFK is preserved (it points at the now-anonymized User row), and we additionally scrubipAddressto NULL and the free-textdetailsJSON to SQL NULL on every row authored by that user. The row retains the original timestamp, action, target type, target id, league id, and org id — these belong to the league or organization that remains accountable for the action and are required for compliance. TheAuditActorFK is a nullable relation without anonDeleteclause; the cleanup is performed explicitly by the soft-delete routine rather than by a database cascade. - No backups are altered; backup retention follows the standard policy documented in our backup runbook.
Export & access
League and organization admins can download the complete Activity Trail (within current retention) from /league/[slug]/activity and /org/[slug]/activity respectively. Exports are CSV, capped at 10,000 rows per download.
Individual users requesting a copy of their own data should email support@racey.gg. Requests are served within 30 days.
Upgrade / downgrade
- Downgrading Enterprise → Pro/Free: audit rows older than 365 days are queued for removal on the next nightly run. Admins are notified 7 days before the first downgrade-triggered prune.
- Upgrading to Enterprise: previously-pruned rows cannot be recovered; retention becomes unlimited going forward.
Contact
Data protection inquiries: privacy@racey.gg