diff --git a/merge_into_manifest.py b/merge_into_manifest.py
index a57124abe5e7fcd6854d53e8d00f83dfa24c04d8..b5e482f0badb69cae36a331a53bca2b66641b3dc 100755
--- a/merge_into_manifest.py
+++ b/merge_into_manifest.py
@@ -3,6 +3,7 @@ import common
 
 import argparse
 import sys
+import time
 from gitlab import (
     Gitlab,
     GitlabGetError,
@@ -76,12 +77,25 @@ def merge_into_manifest(manifest_project, master_branch, project, commit):
     mr.notes.create({"body": "Source merge request: %s" % source_mr.web_url})
     source_mr.notes.create({"body": "Integration merge request: %s" % mr.web_url})
 
-    # Attempt to merge, reintegrate if necessary
+    # Loop until MR has been merged successfully
     manifest_revision = mr.sha
     merged = False
     while not merged:
+
+        # Wait until GitLab has checked merge status
+        print("Waiting until merge status has been checked", end="", flush=True)
+        unchecked_states = ["unchecked", "checking", "cannot_be_merged_recheck"]
+        while mr.merge_status in unchecked_states:
+            print(".", end="", flush=True)
+            time.sleep(1)
+            mr = manifest_project.mergerequests.get(mr.iid)
+        print("")
+
+        # Attempt to merge
         merged = accept_merge_request(manifest_project, mr)
+
         if not merged:
+            # Merge failed, reintegrate the source merge request into the manifest.
             # Note: if reintegration is necessary here, the source merge request was
             # merged without running the pipeline on the latest manifest, i.e. some
             # other project has been merged in between. Automatic rebase is not
@@ -97,6 +111,7 @@ def merge_into_manifest(manifest_project, master_branch, project, commit):
                 project=project,
                 merge_request=source_mr,
             )
+            mr = manifest_project.mergerequests.get(mr.iid)
 
     print("Successfully merged")