diff --git a/scripts/timesync_monitor.py b/scripts/timesync_monitor.py
new file mode 100644
index 0000000000000000000000000000000000000000..bed8df300a55d32fadb73021911b21f4f0b2be56
--- /dev/null
+++ b/scripts/timesync_monitor.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# coding=utf-8
+# Filename: timesync_monitor.py
+# Author: Tamas Gal <tgal@km3net.de>
+# vim: ts=4 sw=4 et
+"""
+Monitors the time sync of DOMs using the MSG of the CLB DOM STATUS 1 field
+from the supernova timeslice stream (IO_TSSN).
+
+Usage:
+    timesync_monitor.py [options]
+    timesync_monitor.py (-h | --help)
+
+Options:
+    -l LIGIER_IP            The IP of the ligier [default: 127.0.0.1].
+    -p LIGIER_PORT          The port of the ligier [default: 5553].
+    -m LOGGING_LIGIER_IP    The IP of the logging ligier [default: 127.0.0.1].
+    -q LOGGING_LIGIER_PORT  The port of the logging ligier [default: 5553].
+    -h --help               Show this screen.
+
+"""
+import datetime
+import km3pipe as kp
+
+
+class TimeSyncChecker(kp.Module):
+    def configure(self):
+        logging_ligier = self.require("logging_ligier_ip")
+        logging_ligier_port = self.require("logging_ligier_port")
+        self.ch_client = kp.controlhost.Client(logging_ligier,
+                                               port=logging_ligier_port)
+        self.alert = kp.time.Cuckoo(interval=10, callback=self._alert)
+
+    def _alert(self, msg):
+        date = datetime.datetime.utcnow().strftime("%c")
+        msg = f"ALERT (MONITORING) {date}: {msg}"
+        print(msg)
+        self.ch_client.put_message("MSG", "Monitoring Test")
+
+    def process(self, blob):
+        dom_ids = []
+        for dom_id, frameinfo in blob['TimesliceFrameInfos'].items():
+            valid_time_sync = bool(frameinfo.dom_status[0] & (1 << (32 - 1)))
+            if not valid_time_sync:
+                dom_ids.append(dom_id)
+        if dom_ids:
+            self.alert("invalid time sync for DOM ID: {}".format(','.join(
+                map(str, dom_ids))))
+        return blob
+
+    def finish(self):
+        self.ch_client._disconnect()
+
+
+def main():
+    from docopt import docopt
+    args = docopt(__doc__)
+
+    ligier_ip = args['-l']
+    ligier_port = int(args['-p'])
+    logging_ligier_ip = args['-m']
+    logging_ligier_port = int(args['-q'])
+
+    pipe = kp.Pipeline()
+    pipe.attach(kp.io.ch.CHPump,
+                host=ligier_ip,
+                port=ligier_port,
+                tags="IO_TSSN")
+    pipe.attach(kp.io.daq.TimesliceParser)
+    pipe.attach(TimeSyncChecker,
+                logging_ligier_ip=logging_ligier_ip,
+                logging_ligier_port=logging_ligier_port)
+    pipe.drain()
+
+
+if __name__ == '__main__':
+    main()