diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 793e052af3e273e1108f314c09b638816d56c621..f01360d29dff20f5cc06fff7bc51b51be7afc589 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,6 +13,7 @@ include:
 stages:
   - build
   - upload
+  - validate
 
 build:
   stage: build
@@ -67,6 +68,20 @@ upload:production:
     - ssh -o CheckHostIP=no fitko@dorado.uberspace.de mkdir -p docs.fitko.de/fit-connect
     - rsync -rLvz --delete --checksum -e "ssh -o CheckHostIP=no" --ipv4 --progress ./build/. fitko@dorado.uberspace.de:docs.fitko.de/fit-connect
 
+link-check:
+    rules:
+        - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+    stage: validate
+    variables:
+      CRAWLER_URL: https://preview.docs.fitko.dev/fit-connect/$CI_COMMIT_REF_SLUG/
+      CRAWLER_DOMAIN: preview.docs.fitko.dev/fit-connect/$CI_COMMIT_REF_SLUG/
+    needs:
+        - upload:preview
+    trigger:
+        strategy: depend
+        project: fit-connect/schema-link-checker
+        branch: main
+
 stop:preview:
   stage: .post
   image: alpine:latest