diff --git a/application.properties b/application.properties
index d69fec3be1b05ab11db292a74498332eeab50835..dc4c93bbcdbcf8360c68f245c67906cbb106c8bb 100644
--- a/application.properties
+++ b/application.properties
@@ -96,4 +96,8 @@ max_concurrent_dl = 5
 
 [example]
 query =
-target = 
+target =
+
+[analytics]
+enable_logging_runs = False
+logging_file =
diff --git a/src/dgenies/config_reader.py b/src/dgenies/config_reader.py
index 28cc5f00995eed951055c85752053748cee4942c..e4b2b2557d00a8301517c1a5fd566c1bcfef87fd 100644
--- a/src/dgenies/config_reader.py
+++ b/src/dgenies/config_reader.py
@@ -415,3 +415,20 @@ class AppConfigReader:
             return self.reader.get("example", "target")
         except (NoOptionError, NoSectionError):
             return ""
+
+    def _get_analytics_enabled(self):
+        try:
+            return self.reader.get("analytics", "enable_logging_runs").lower() == "true"
+        except (NoOptionError, NoSectionError):
+            return False
+
+    def _get_analytics_log_file(self):
+        try:
+            log_file = self._replace_vars(self.reader.get("analytics", "logging_file"))
+            if (log_file == "" or not os.path.exists(os.path.dirname(log_file))) and self._get_analytics_enabled():
+                raise ValueError("Analytics log file not set or has not existing parent folder")
+            return log_file
+        except (NoOptionError, NoSectionError):
+            if self._get_analytics_enabled():
+                raise ValueError("Analytics log file not set")
+            return None
diff --git a/src/dgenies/database.py b/src/dgenies/database.py
index 0ba54bf99c821bcff597e3c5e047e55becd77704..b27f0067370fe49c96182b1745040ae0a60c01c5 100644
--- a/src/dgenies/database.py
+++ b/src/dgenies/database.py
@@ -124,7 +124,17 @@ if MODE == "webserver":
             self.save()
 
 
+    if config.analytics_enabled:
 
+        class Analytics(BaseModel):
+            data_created = DateTimeField()
+            target_length = IntegerField()
+            query_length = IntegerField(null=True)
+            mail_client = CharField()
+            batch_type = CharField(max_length=20)
+
+        if not Analytics.table_exists():
+            Analytics.create_table()
 
     if not Job.table_exists():
         Job.create_table()
diff --git a/src/dgenies/lib/job_manager.py b/src/dgenies/lib/job_manager.py
index afcfcafae2210f3e487038a7f7e9af4f4f0a1b8b..b6d37eac8fab34ccaf1c1b501d15e36c8e715c44 100644
--- a/src/dgenies/lib/job_manager.py
+++ b/src/dgenies/lib/job_manager.py
@@ -872,6 +872,22 @@ class JobManager:
         if MODE == "webserver" and self.config.send_mail_status:
             self.send_mail_post()
 
+    def _save_analytics_data(self):
+        from dgenies.database import Analytics
+        with Job.connect():
+            job = Job.get(Job.id_job == self.id_job)
+            target_size = os.path.getsize(self.target.get_path())
+            query_size = None
+            if self.query is not None:
+                query_size = os.path.getsize(self.query.get_path())
+            log = Analytics.create(
+                date_created=datetime.now(),
+                target_size=target_size,
+                query_size=query_size,
+                mail_client=job.email,
+                batch_type=job.batch_type)
+            log.save()
+
     def _after_start(self, success, error_set):
         with Job.connect():
             if success:
@@ -880,6 +896,8 @@ class JobManager:
                     job = Job.get(Job.id_job == self.id_job)
                     job.status = status
                     job.save()
+                    if self.config.analytics_enabled:
+                        self._save_analytics_data()
                 else:
                     self.set_status_standalone("waiting")
                     self.prepare_data_in_thread()