Skip to documentation

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.

DataRetention
Sent and received email content30 days; queued and scheduled sends are protected
Request logs and custom sent events30 days
Raw SES events30 days
Processed inbound notification payloadCleared after parsing
Inbound deduplication rowsSeven days after parsing; unprocessed messages remain for retries
Broadcast recipient and event history30 days after settlement
Broadcast and snapshotted totalsIndefinite; totals include updates received before pruning
Automation workflow journalsCleaned on completion
Finished automation run and step history30 days
Completed import job metadataSeven days
Export downloadsSeven days
Webhook payloads90 days
Idempotency responses24 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

bash
pnpm backend logs --history 50

Keep the Convex backend running for scheduled work and hourly cleanup. See exports, contacts, and backup and security notes.