diff --git a/opentech/apply/activity/messaging.py b/opentech/apply/activity/messaging.py
index 3c5670c57d0f185cebec3c0f0e383dc37648455d..2f73d71cffbbf31dfda804b8a64f67671cbde4ca 100644
--- a/opentech/apply/activity/messaging.py
+++ b/opentech/apply/activity/messaging.py
@@ -561,6 +561,7 @@ class DjangoMessagesAdapter(AdapterBase):
 
     messages = {
         MESSAGES.BATCH_REVIEWERS_UPDATED: 'batch_reviewers_updated',
+        MESSAGES.BATCH_TRANSITION: 'batch_transition',
     }
 
     def batch_reviewers_updated(self, added, submissions, **kwargs):
@@ -571,6 +572,19 @@ class DjangoMessagesAdapter(AdapterBase):
             ', '.join(['"{}"'.format(submission.title) for submission in submissions])
         )
 
+    def batch_transition(self, submissions, transitions, **kwargs):
+        base_message = 'Successfully updated:'
+        transition = '{submission} [{old_display} → {new_display}].'
+        transitions = [
+            transition.format(
+                submission=submission.title,
+                old_display=transitions[submission],
+                new_display=submission.phase,
+            ) for submission in submissions
+        ]
+        messages = [base_message, *transitions]
+        return ' '.join(messages)
+
     def recipients(self, *args, **kwargs):
         return [None]