diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b1efaf70cfe1c4e8184cd18b84b9b8533d30f14a
--- /dev/null
+++ b/.github/labeler.yml
@@ -0,0 +1,59 @@
+---
+"3. topic: babel":
+  - package/gluon-l3roamd/**
+  - package/gluon-mesh-babel/**
+  - package/gluon-mmfd/**
+"3. topic: batman-adv":
+  - docs/package/gluon-mesh-batman-adv*
+  - package/gluon-alfred/**
+  - package/gluon-cient-bridge/**
+  - package/gluon-mesh-batman-adv/**
+  - package/libbatadv/**
+"3. topic: build":
+  - Makefile
+  - scripts/**
+"3. topic: config-mode":
+  - docs/dev/web/config-mode.rst
+  - docs/package/gluon-config-mode-*
+  - packge/gluon-config-mode-*/**
+  - package/gluon-web*/**
+"3. topic: continous integration":
+  - .github/workflows/*
+  - contrib/actions/**
+  - contrib/ci/**
+"3. topic: docs":
+  - docs/**
+"3. topic: fastd":
+  - docs/features/fastd*
+  - package/gluon-mesh-vpn-fastd/**
+"3. topic: firewall":
+  - package/**/*-firewall
+  - package/gluon-ebtables-*/**
+"3. topic: hardware":
+  - package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+  - package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+  - targets/*
+"3. topic: multidomain":
+  - docs/features/multidomain*
+  - docs/multidomain-site-example/**
+  - package/gluon-config-mode-domain-select/**
+  - package/gluon-scheduled-domain-switch/**
+"3. topic: package":
+  - package/**
+"3. topic: respondd":
+  - package/**/*respondd*
+  - package/gluon-respondd/**
+"3. topic: status-page":
+  - package/gluon-status-page/**
+"3. topic: tests":
+  - tests/**
+"3. topic: tunneldigger":
+  - package/gluon-mesh-vpn-tunneldigger/**
+"3. topic: wireguard":
+  - package/gluon-mesh-vpn-wireguard/**
+"3. topic: wireless":
+  - package/gluon-mesh-wireless-sae/**
+  - package/gluon-private-wifi/**
+  - package/gluon-web-private-wifi/**
+  - package/gluon-web-wifi-config/**
+  - package/gluon-wireless-encryption/**
diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a982a7a74eb178b293f01f9b37b173f2b4dec003
--- /dev/null
+++ b/.github/workflows/labels.yml
@@ -0,0 +1,15 @@
+name: "Label PRs"
+
+on:
+  # only execute base branch actions
+  pull_request_target:
+
+jobs:
+  labels:
+    runs-on: ubuntu-latest
+    if: github.repository_owner == 'freifunk-gluon'
+    steps:
+    - uses: actions/labeler@v3
+      with:
+        repo-token: ${{ secrets.GITHUB_TOKEN }}
+        sync-labels: true