← Back to FAQ

Data Retention & Deletion Policy

Owner: Sara Chen (CISO) Version: 1.0 Effective: 2026-04-18 Review: Annually or on material change

This policy governs how long we keep user data, when we delete it, and what users can do themselves. It's the contract behind every promise on our landing page.


1. The promises

  1. Your data is yours. Export anytime from Settings → Export my data. Full JSON bundle, everything we have.
  2. Delete means delete. When you delete your account, we remove your data within 30 days across every system we control.
  3. We don't sell or license it. Not to advertisers, not to recruiters, not to AI model trainers.
  4. We keep what we need, for as long as we need it, for reasons we can name. No idle stockpiling.

2. What we store, and why

CategoryRetentionReason
User account (email, hashed password, tenant, plan)While account activeAuth, billing, product functionality
Profiles (name, role focus, location)While account activeUser-authored; core to the product
Resumes (text + parsed sections)While account active; 10 most recent versionsUser-authored; tailoring history enables revert
Job queue + applicationsWhile account activeThe user's pipeline IS the product
Mail inbox + threadsLast 365 daysStorage + UX sanity; older threads prune
Cover lettersWhile account activeRe-use + history
Outbound mail attempt log1000-entry rolling bufferDeliverability debugging
Event log5000-entry rolling bufferProduct analytics
Cap-hit log2000-entry rolling bufferPricing signal
Audit log (privileged actions)500-entry rolling bufferSecurity / incident forensics
Bug reports500-entry rolling bufferProduct feedback
Exit surveys1000-entry rolling bufferChurn analysis
Session tokens7 days (30 min for impersonation)Keep users logged in; limit blast radius
Stripe customer + subscription IDsWhile active + 90 days after cancellationRefund + billing dispute window
Scanner output (global job queue)Rolling — old jobs prune when no user has themDedup across users

We do NOT store:

3. What "delete my account" actually does

When a user clicks Delete My Account and confirms with password:

Immediate (synchronous)

Fire-and-forget (async)

External systems (we don't control)

30-day guarantee: Lingering references in log files rotate out within 30 days via pm2-logrotate. Residual data after 30 days is a SEV-1 bug.

4. What "export my data" produces

Single JSON file, downloaded directly: incognito-export-{userId}-{YYYY-MM-DD}.json

{
  exportVersion: 1,
  generatedAt: "ISO timestamp",
  user: { id, email, username, name, role, plan, tenantId, profileId,
          activeProfileId, stripeCustomerId, createdAt, updatedAt,
          searchOptIn, searchOptInAt },
  profiles: [ ... ],
  resumes: [ ... ],     // full text + sections + keywords
  jobs: [ ... ],        // entire queue
  applications: [ ... ], // entire history
  mail: { inbox: [ ... ], preferences: { ... } },
  notifications: [ ... ],
  scanConfig: { ... }
}

Exports are generated on-demand. We don't cache them server-side. We don't keep a copy.

5. Tenant-level deletion (enterprise / white-label)

When a tenant relationship ends:

  1. Superuser uses /api/super/tenants/{id} DELETE
  2. All users reassigned to 'default' tenant; their data stays intact
  3. Tenant's branding overrides cleared
  4. If full data deletion is requested, a one-off script runs with Sara's sign-off within 30 days

6. Retention schedule

Ring-buffered files cap themselves by design. No cron needed. User-data directories rely on active account state — no time-based pruning. A user on parental leave shouldn't lose their pipeline.

Exception: If an email confirms the user is deceased or incapacitated, we preserve the account for next-of-kin access per GDPR Art. 17 and CCPA §1798.105, coordinated through Sara.

7. Request mechanisms

RightHowSLA
ExportSettings → Export my dataInstant
DeleteSettings → Danger Zone → Delete My Account< 5s (local) + 30d (logs)
Correct / updateIn-app edit on profiles, resumes, applicationsInstant
Restrict processingDisable all scan-config queries + cancel subscriptionInstant
Data portabilitySame as Export (machine-readable JSON)Instant
ObjectEmail support@useincognito.com30 days

For rights requests that can't be self-served, response SLA is 30 calendar days per GDPR Art. 12(3).

8. Breach notification

  1. Incident response playbook kicks in (SEV-0)
  2. Within 72 hours of confirmed breach, Sara notifies affected users, GDPR supervisory authority if relevant, and Stripe if payment data is involved
  3. Post-mortem published within 30 days, redacted for security-sensitive details

9. Third-party processors

ProcessorPurposeDataRetention
StripePayment processingEmail, name, card (direct to Stripe)Per Stripe policy
Anthropic APIAI draftingResume + JD snippetsZero-retention (API tier)
Serper APIWeb search for scannerQueries, role focusPer Serper policy
LeafRelay SMTPMail deliveryEmail headers + body (outbound)Logs 7 days

Each processor is vetted annually against their DPA and security posture.

10. Changes to this policy

Material changes are announced via:

Users who don't consent can export + delete within the notice window.

Signed: Sara Chen, CISO · Lucy, CEO · Ray, CFO · Vader, Founder