diff --git a/.github/workflows/convert.yml b/.github/workflows/convert.yml
index 0eea13f2215a63255874cee19a6513caef7b2f17..286eaf840be75bc407a1795370fd3c0d6f853321 100644
--- a/.github/workflows/convert.yml
+++ b/.github/workflows/convert.yml
@@ -1,9 +1,6 @@
 name: Convert data to .mat file(s)
 
 on:
-  push:
-    branches:
-      - "main"
   schedule:
       - cron: "0 1 * * *"
 
@@ -27,7 +24,6 @@ jobs:
     - name: Convert data
       run: |
         python3 convert.py
-        cd out && zip ../data.zip ./* && cd -
     - name: release
       uses: "./.github/actions/automatic-releases"
       with:
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c8a94dbe0024d9fc3311cde84e3c1ec17134cea9
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,37 @@
+
+stages:
+  - convert
+  - upload
+  - release
+  
+variables:
+  PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/my_package/latest/data.zip"
+
+convert:
+  stage: convert
+  image: "python:3.10"
+  script:
+    - python3 -m pip install --upgrade pip
+    - python3 -m pip install numpy scipy
+    - python3 convert.py
+  artifacts:
+    paths:
+      - data.zip
+      - CHANGELOG.md
+
+upload:
+  stage: upload
+  image: curlimages/curl:latest
+  script:
+    - echo "Compiling the code..."
+    - echo "Compile complete."
+  script:
+    - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file data.zip "${PACKAGE_REGISTRY_URL}"'
+
+release:
+  stage: release
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+  script:
+    - |
+      release-cli create --name "Data" --tag-name "latest" --description "CHANGELOG.md" \
+        --assets-link "{\"name\":\"data.zip\",\"url\":\"${PACKAGE_REGISTRY_URL}\"}" \
\ No newline at end of file
diff --git a/convert.py b/convert.py
index f0b0cd5b9be2803d88e13a294f1bd59adab082e9..1d03fadfbd1ffcd247a56a18949550bf1ec90081 100644
--- a/convert.py
+++ b/convert.py
@@ -6,8 +6,9 @@ Combines the files from one weak and converts it into a single '.mat' file.
 from datetime import datetime, timedelta
 from pathlib import Path
 import glob
-from time import strptime, time
-from typing import Dict, Optional
+from time import strptime
+from typing import Dict
+import shutil
 import numpy as np
 import scipy.io
 
@@ -47,6 +48,10 @@ for week_start, arr in data.items():
         mdict={name: column for name, column in zip(header, np.split(arr, arr.shape[1], axis=1))},
     )
 
+# zip folder
+shutil.make_archive("data", "zip", "out")
+
 # Update CHANGELOG.md
 with open(str(Path.joinpath(Path(__file__).parent, "CHANGELOG.md")), "w+") as f:
-    f.write("# Messdaten vom Silo von den Wochen:\n" + "\n".join(["- " + key for key in data.keys()]))
+    f.write("## Messdaten vom Silo von den Wochen:\n" + "\n".join(["- " + key for key in data.keys()]))
+