diff --git a/km3io/utils/extract-dom-rates.py b/km3io/utils/extract-dom-rates.py
new file mode 100644
index 0000000000000000000000000000000000000000..131d30ddb1a0010ac65a4a669bdd3853d7be9f8a
--- /dev/null
+++ b/km3io/utils/extract-dom-rates.py
@@ -0,0 +1,53 @@
+"""
+Usage: extract-dom-rates.py -f INPUT_FILE -o OUTPUT_FILE -a DETECTOR_FILE
+
+Options:
+  -h --help                              Help.
+  -f --input_file INPUT_FILE             Input file.
+  -o --output_file OUTPUT_FILE           Output file.
+  -a --detector_file DETECTOR_FILE       Detector file.
+"""
+from docopt import docopt
+import km3io
+import km3pipe as kp
+import km3pipe.hardware
+import os
+import numpy as np
+import h5py
+
+def get_doms_rates(slices, frame):
+    raw_rates = [km3io.online.get_rate(getattr(slices.rates[frame],f"ch{i}")) for i in range(31)]
+    return np.sum(raw_rates, axis=0)
+
+def main():
+    arguments = docopt(__doc__)
+
+    data = {}
+    for key in arguments:
+        data[key.replace('-','')] = arguments[key]
+
+    reader = km3io.OnlineReader(data['input_file'])
+    summary_slices = reader.summaryslices
+
+    detector = km3pipe.hardware.Detector(data['detector_file'])
+
+    n_slices = len(summary_slices.slices)
+
+    doms_rates = {}
+    for dom in detector.dom_ids:
+        doms_rates[dom] = np.zeros(n_frames)
+
+    for i in range (n_slices):
+        rates = get_doms_rates(summary_slices, i)
+        dom_ids = summary_slices.slices[i].dom_id
+        for j in range(len(dom_ids)-1):
+            doms_rates[dom_ids[j]][i] = rates[j]
+
+    f = h5py.File(data['output_file'], "a")
+    f.create_dataset("frame_indices",data=np.array(summary_slices.headers.frame_index))
+    f.create_dataset("frame_times"  ,data=np.array(summary_slices.headers.UTC_seconds * 1e9 + summary_slices.headers.UTC_16nanosecondcycles * 16))
+
+    for key, value in dictionary.items():
+        f.create_dataset(str(key), data=value)
+
+main()