Find where the space went
Setup, Storage Usage lists the largest objects. In long-lived orgs the top of the list is usually activity: tasks, events, email messages, and the per-recipient results of mass email sends. Most records count as about 2 KB whatever their size, so millions of small rows add up quickly.
Check what depends on it
Before deleting anything, list the reports and dashboards that count activities, the automation that reads them, the integrations that write them, and anything your team calls history. Agree a cut-off date with the people who use the data, in writing.
Keep a way back
Export every record you will delete, with all fields, compressed, and keep the lists of IDs. Hard deletes skip the recycle bin, so the export is your only restore path.
The cascade most admins miss
Deleting mass email result records (ListEmailSentResult) also deletes the task created for each recipient. In one org that single deletion cleared most of the old email tasks with it, which was the goal, but it would have been a surprise without a test. Run it in a full sandbox first, count before and after, and make sure triggers on tasks do not block or slow the deletes. Switch them off for the run with a bypass setting and switch them back afterwards.
Run it in waves
Use Bulk API hard delete in batches. Retry rows that fail with record lock errors, ignore retries that report the record is already deleted, and recount after each wave.
Stay under the limit
- A scheduled job that archives activity older than your cut-off.
- An alert to the admin team at 85% of the limit.
- Storage on the monthly admin report, next to licence use.
Tell us what is happening and which systems are involved. We reply within one business day.