diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e325877507f278d18a4d0d62c5d900aeac5e86c4..8c9f2aeecb24dc9a76e4e1bc88fd2aa69253580d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -75,10 +75,8 @@ coverage:
         path: coverage.xml
 
 
-# test saqc with python 3.7
-python37:
+python38:
   stage: test
-  image: python:3.7
   script:
     - pytest tests dios/test -Werror --junitxml=report.xml
     - python -m saqc --config docs/resources/data/config.csv --data docs/resources/data/data.csv --outfile /tmp/test.csv
@@ -88,9 +86,9 @@ python37:
       junit: report.xml
 
 
-# test saqc with python 3.8
-python38:
+python39:
   stage: test
+  image: python:3.9
   script:
     - pytest tests dios/test -Werror --junitxml=report.xml
     - python -m saqc --config docs/resources/data/config.csv --data docs/resources/data/data.csv --outfile /tmp/test.csv
@@ -100,10 +98,9 @@ python38:
       junit: report.xml
 
 
-# test saqc with python 3.9
-python39:
+python310:
   stage: test
-  image: python:3.9
+  image: python:3.10
   script:
     - pytest tests dios/test -Werror --junitxml=report.xml
     - python -m saqc --config docs/resources/data/config.csv --data docs/resources/data/data.csv --outfile /tmp/test.csv
@@ -113,10 +110,9 @@ python39:
       junit: report.xml
 
 
-# test saqc with python 3.10
-python310:
+python311:
   stage: test
-  image: python:3.10
+  image: python:3.11
   script:
     - pytest tests dios/test -Werror --junitxml=report.xml
     - python -m saqc --config docs/resources/data/config.csv --data docs/resources/data/data.csv --outfile /tmp/test.csv
diff --git a/setup.py b/setup.py
index 5aedd38f50e34f65488bdf965fca22be4791e086..f1bd41c105cf83aa6a06fb4d2a9d00fee2f2c197 100644
--- a/setup.py
+++ b/setup.py
@@ -28,7 +28,7 @@ setup(
     long_description_content_type="text/markdown",
     url="https://git.ufz.de/rdm-software/saqc",
     packages=find_packages(exclude=("tests", "docs")),
-    python_requires=">=3.7",
+    python_requires=">=3.8",
     install_requires=[
         "Click",
         "dtw",