Self-hosting
Background jobs and retention
Understand import jobs, export limits, and automatic cleanup.
Background work
Dashboard CSV imports enqueue durable jobs of up to 100 contacts; API imports accept up to 500 rows and 500 KB of parsed job data. Jobs continue after the browser disconnects. Each processing step handles at most 100 contacts, with smaller steps for larger membership sets; excess memberships continue in scheduled batches. Invalid rows are skipped and counted as failed. The dialog waits for its jobs to finish. Retrying an import merges by email.
Exports assemble bounded CSV chunks into file storage. The limit is 200,000 rows and 16 MiB including headers. A limit failure publishes no partial file; narrow filters and retry.
Retention windows
Cleanup runs hourly in bounded batches. Expiration makes data eligible for cleanup; large backlogs may take additional batches.
| Data | Retention |
|---|---|
| Sent and received email content | 30 days; queued and scheduled sends are protected |
| Request logs and custom sent events | 30 days |
| Raw SES events | 30 days |
| Processed inbound notification payload | Cleared after parsing |
| Inbound deduplication rows | Seven days after parsing; unprocessed messages remain for retries |
| Broadcast recipient and event history | 30 days after settlement |
| Broadcast and snapshotted totals | Indefinite; totals include updates received before pruning |
| Automation workflow journals | Cleaned on completion |
| Finished automation run and step history | 30 days |
| Completed import job metadata | Seven days |
| Export downloads | Seven days |
| Webhook payloads | 90 days |
| Idempotency responses | 24 hours |
Backups follow your own retention policy.
Account cleanup
Pending OAuth flows expire after one hour. Cleanup removes expired verification records and pending SSO state, expired rate windows, replay markers after the guarded token expires, and SSO proofs after the session expires or is deleted. Cleanup checks legacy replay markers against their original token before removal.
Metrics ranges
Queries accept at most 31 ordered, non-overlapping buckets across up to 366 days plus one hour for daylight saving time. A summary bucket may cover a longer period than a day. The dashboard’s date presets remain supported. Queries beyond the range limit are rejected.
Check background processing
pnpm backend logs --history 50Keep the Convex backend running for scheduled work and hourly cleanup. See exports, contacts, and backup and security notes.