How many times does the trigger execute on an Merge event

Quick answer

During a merge, Salesforce executes triggers for both the losing records (as delete events) and the surviving/master record (as update events). Concretely, if you merge N records into one master, triggers will run for (N – 1) delete events and 1 update event. Use Trigger.isMerge to detect merge operations inside your Apex trigger.

Detailed explanation

When you perform a merge (for example, merging Accounts, Contacts, or Leads), Salesforce internally performs delete operations for the losing records and an update for the surviving (master) record. The execution flows through the normal trigger events:

  • Before delete — invoked for each losing record.
  • After delete — invoked for each losing record.
  • Before update — invoked once for the surviving/master record.
  • After update — invoked once for the surviving/master record.

So a trigger configured for before delete, after delete, before update, and after update will be invoked for those specific events during a merge.

Example counts

– Merge 2 records into 1 (common case):

  1. Before delete / After delete: invoked for 1 losing record
  2. Before update / After update: invoked for 1 master record

– Merge 4 records into 1:

  1. Before delete / After delete: invoked for 3 losing records
  2. Before update / After update: invoked for 1 master record

How to detect a merge in Apex triggers

Use Trigger.isMerge (returns true during merge) and inspect the trigger context lists (Trigger.old, Trigger.new) to see which records were deleted/updated.

if (Trigger.isMerge) {
// Trigger-specific logic for merges
// Trigger.old contains the losing records (deleted)
// Trigger.new contains the surviving record (updated)
}

Practical tips and best practices

– Check Trigger.isMerge to apply merge-specific logic only when necessary (e.g., transfer related records, reconcile field values, or prevent unintentional workflows).

– Be mindful of bulk merges (admins or data loads) that may merge many records at once; always write bulk-safe code that works with lists and maps.

– Remember that merge counts toward governor limits the same way as separate delete/update operations, so optimize SOQL and DML usage during merges.

Summary

In short: for a merge of N records into 1, triggers execute for (N – 1) delete events (losing records) and 1 update event (the surviving/master record). Use Trigger.isMerge to detect and handle merge-specific behavior in Apex triggers.