A hard delete removes records from Salesforce permanently and immediately, skipping the recycle bin entirely. Once a hard delete commits, the records are unrecoverable through any UI or API — no undelete, no 15-day grace window, gone.
How it compares to a normal delete
| Soft delete (plain Delete) | Hard delete | |
|---|---|---|
| Recycle bin? | Records sit there for up to 15 days | Bypassed entirely |
| Recoverable? | Yes — Undelete from recycle bin, or Database.emptyRecycleBin reverse | No |
| Storage freed | Only after the bin purges | Immediately |
| Async? | Either | Bulk API only |
| Permission needed | Delete on the object | Delete + Bulk API Hard Delete |
When to use it
Hard delete exists for cases where the recycle bin is actively in the way:
- Compliance / GDPR-style “right to erasure” — the regulation says delete, you can’t have copies waiting around for 15 days.
- Loading test data and immediately removing it. Keeps the bin clean and frees storage.
- Massive cleanup loads. A 5-million-row delete to the recycle bin would blow the bin’s capacity (and trigger cascading auto-purges anyway). Hard delete sidesteps that.
- Releasing storage now. Approaching your data-storage limit and the bin is full of recently-deleted rows? Hard delete frees space immediately.
Why it’s restricted
It’s irreversible, so Salesforce gates it behind:
- The Bulk API Hard Delete profile/permission set entitlement.
- The Use Bulk API option in Data Loader — hard delete only goes through Bulk API, not SOAP API.
Even an admin with Modify All Data doesn’t get hard delete unless this specific permission is granted. See How to enable the Hard Delete option for the steps.
Things still standard
- Cascade. Hard-deleting a parent still hard-deletes master-detail children.
- Triggers.
before deleteandafter deletetriggers fire — they can still calladdErrorto veto. - Field-level security. Permissions are checked per the executing user.
- Audit trail. The Setup Audit Trail records that a hard delete happened, but not the record contents.
What hard delete does NOT do
- Doesn’t bypass validation rules or triggers.
- Doesn’t bypass sharing — the user has to have delete access to each record.
- Doesn’t delete related external system data — that’s your integration’s job.
- Doesn’t free Salesforce file storage if the deleted records had attached Files (those are stored separately).
In an interview
Mention four points and you’ve nailed it:
- Bypasses the recycle bin.
- Permanent and irreversible.
- Requires the Bulk API Hard Delete permission.
- Bulk API only — not SOAP API, not the UI.
Verified against: Data Loader Guide — Performing a Hard Delete, Bulk API Developer Guide, Metadata API Developer Guide. Last reviewed 2026-05-17 for Spring ‘26 release.