Create G NormalizedEmail with =IF(C2="","",LOWER(TRIM(C2))); H EmailCount with =IF(G2="","",COUNTIF($G:$G,G2)); and I DuplicateGroup with =IF(H2>1,"EMAIL-"&G2,""). Blank emails stay ungrouped. Add conflict flags such as =IF(I2="","",COUNTA(UNIQUE(FILTER($F:$F,$I:$I=I2)))>1) for nonblank phone values, adjusted to exclude blanks if needed.
R10 and R14 join the same email group; they are not safe deletions because name, timestamp, source, and phone completeness differ. R20 remains an uncertain near match and receives ManualReview rather than the email group. Create an action column with ExactRedundant, MergeReview, NearMatchReview, or Unique. Keep Raw_ReadOnly, produce a separate resolved table, and maintain a ResolutionLog containing removed RowID, retained RowID, rule, reviewer, and date. Reconcile raw rows = resolved rows + exact redundant rows + merged rows retained in the log; also compare the unique normalized-email count before and after.