diff --git a/examples/demo_station/export_measurements_example_json.py b/examples/demo_station/export_measurements_example_json.py
new file mode 100644
index 0000000000000000000000000000000000000000..7938950f422bfd2da899c0a4f732081c946e98ab
--- /dev/null
+++ b/examples/demo_station/export_measurements_example_json.py
@@ -0,0 +1,115 @@
+import json
+import os
+import time
+
+import core_tools as ct
+from core_tools.data.ds.reader import load_by_uuid
+from core_tools.data.SQL.queries.dataset_gui_queries import query_for_measurement_results
+from core_tools.data.SQL.SQL_connection_mgr import SQL_database_manager
+
+from core_tools.data.ds.ds2xarray import ds2xarray
+
+"""
+TIP:
+    Switch project to 'Game', so all data is for Game
+"""
+
+
+class LiveExporter:
+    def __init__(self, project_name):
+        self.project_name = project_name
+        self.export_path = 'C:/measurements/export/Game/'
+        os.makedirs(self.export_path, exist_ok=True)
+        self.start_time = '2025-02-20'
+        self.active_ds = None
+        self.ds_written = 0
+        self.max_id = None
+
+    def export_ds_json(self, ds, variables: list[str] | None = None):
+        xds = ds2xarray(ds, snapshot=False)
+
+        if variables is not None:
+            xds = xds[vars]
+
+        d = xds.to_dict()
+        fname = self.export_path + f"ds_{ds.exp_uuid}.json"
+        tmp_file = fname + ".tmp"
+        with open(tmp_file, "w") as fp:
+            json.dump(d, fp, indent=1)
+
+        if os.path.exists(fname):
+            os.remove(fname)
+        os.rename(tmp_file, fname)
+
+    def export_active_ds(self):
+        active_ds = self.active_ds
+        if active_ds is not None:
+            active_ds.sync()
+            written = 0
+            for m_param in active_ds:
+                for name, descr in m_param:
+                    written += descr.written()
+            if self.ds_written != written:
+                self.export_ds_json(active_ds)
+                self.ds_written = written
+            if active_ds.completed:
+                self.active_ds = None
+                self.ds_written = 0
+
+    def export_new_ds(self):
+        # New measurements detected. Do last update of active_ds
+        self.export_active_ds()
+        self.active_ds = None
+        self.ds_written = 0
+
+        res = query_for_measurement_results.search_query(
+                start_time=self.start_time,
+                name=None,  # part of name
+                project=self.project_name,  # optional
+                keywords=None,  # optional
+                )
+        # Export all
+        ds = None
+        for e in res:
+            ds = load_by_uuid(e.uuid)
+            self. export_ds_json(ds)
+            self.start_time = ds.run_timestamp
+            self.max_id = ds.exp_id
+
+        # check if last ds needs updating
+        if ds is not None and not ds.completed:
+            self.active_ds = ds
+
+    def run(self):
+        try:
+            while True:
+                try:
+                    self.export_active_ds()
+
+                    # check for new measurements. This is a fast query on the database
+                    new_max_id = query_for_measurement_results.detect_new_meaurements(
+                        self.max_id,
+                        project=self.project_name
+                        )
+                    if new_max_id != self.max_id:
+                        self.export_new_ds()
+                    time.sleep(0.1)
+
+                except Exception as ex:
+                    """
+                    Things that could go wrong:
+                        * writing or copying file fails because other application is accessing it.
+                    """
+                    print(ex)
+                    time.sleep(0.5)
+
+        except KeyboardInterrupt:
+            SQL_database_manager.disconnect()
+            raise
+
+
+ct.configure('./setup_config/ct_config_laptop.yaml')
+
+
+exporter = LiveExporter()
+exporter.run()