diff --git a/includes/verify.yml b/includes/verify.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a781b06455927a0fc275de49d4678d13b7128e07
--- /dev/null
+++ b/includes/verify.yml
@@ -0,0 +1,75 @@
+.checkBuildId: &checkBuildId |
+  buildIdMatches () {
+    result=$(curl -sI $CI_ENVIRONMENT_URL | awk -v FS=": " '/^x-build-id/{print $2}')
+    if [[ "${result//[$' \t\n\r']/}" == "${BUILD_ID//[$' \t\n\r']/}" ]]; then return 0; fi
+    echo "expected $BUILD_ID, received: $result"
+    return 1
+  }
+
+  statusIs200 () {
+    statusCode=$(curl --write-out '%{http_code}' --silent --output /dev/null $CI_ENVIRONMENT_URL)
+    if [[ "$statusCode" == "200" ]]; then return 0; fi
+    echo "statuscode is $statusCode"
+    return 1
+  }
+
+  max_retry=100
+  counter=0
+  echo "check if new version has been deployed successfully"
+  until (buildIdMatches && statusIs200)
+  do
+    sleep 1
+    [[ counter -eq $max_retry ]] && echo "Failed!"" && exit 1
+    echo "Trying again. Try #$counter / $max_retry"
+    ((counter++))
+  done
+  echo "success!"
+
+.verify-base:
+  before_script:
+    - set +e # Disable exit on error
+    - *checkBuildId
+    - set -e # Enable exit on error
+
+  extends:
+    - .retry-default
+  stage: verify
+
+.verify-review:
+  stage: verify
+  extends:
+    - .verify-base
+    - .env-review
+  rules:
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
+  needs: ["review-deploy", "setup-build-info"]
+
+.verify-dev:
+  stage: verify
+  extends:
+    - .verify-base
+    - .env-dev
+  needs: ["dev-deploy", "setup-build-info"]
+  rules:
+    - if: $CI_COMMIT_TAG # after releases
+    - if: $CI_COMMIT_MESSAGE =~ /^chore\(release\).*/ # not after semantic release commit
+      when: never
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+
+.verify-stage:
+  stage: verify
+  extends:
+    - .verify-base
+    - .env-stage
+  needs: ["stage-deploy", "setup-build-info"]
+  rules:
+    - if: $STAGING_ENABLED == "true" && $CI_COMMIT_TAG
+
+.verify-prod:
+  stage: verify
+  extends:
+    - .verify-base
+    - .env-prod
+  needs: ["prod-deploy", "setup-build-info"]
+  rules:
+    - if: $CI_COMMIT_TAG
diff --git a/panter-kubernetes-base.yml b/panter-kubernetes-base.yml
index c0b4a7596f2093635ee5ab21c660c1d7cc66a9fe..0fb3f17cbea3dec0f25d70b952b8c81c2b014d02 100644
--- a/panter-kubernetes-base.yml
+++ b/panter-kubernetes-base.yml
@@ -4,6 +4,7 @@ include:
   - /includes/cache.yml
   - /includes/rules.yml
   - /includes/setup.yml
+  - /includes/verify.yml
   - /includes/docker-build.yml
   - /includes/semantic-release.yml
   - /includes/kubernetes.yml
@@ -151,50 +152,6 @@ image: panterch/docker-ci-kubernetes-deploy
     - .rules-prod-deploy
     - .deploy-to-kubernetes-prod
 
-.verify-base:
-  extends:
-    - .retry-default
-  stage: verify
-
-.verify-review:
-  stage: verify
-  extends:
-    - .verify-base
-    - .env-review
-  rules:
-    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
-  needs: ["review-deploy"]
-
-.verify-dev:
-  stage: verify
-  extends:
-    - .verify-base
-    - .env-dev
-  needs: ["dev-deploy"]
-  rules:
-    - if: $CI_COMMIT_TAG # after releases
-    - if: $CI_COMMIT_MESSAGE =~ /^chore\(release\).*/ # not after semantic release commit
-      when: never
-    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
-
-.verify-stage:
-  stage: verify
-  extends:
-    - .verify-base
-    - .env-stage
-  needs: ["stage-deploy"]
-  rules:
-    - if: $STAGING_ENABLED == "true" && $CI_COMMIT_TAG
-
-.verify-prod:
-  stage: verify
-  extends:
-    - .verify-base
-    - .env-prod
-  needs: ["prod-deploy"]
-  rules:
-    - if: $CI_COMMIT_TAG
-
 #----------------------
 # DEFAULT STAGE DEFINITIONS
 #----------------------