diff --git a/quality-metrics/broker-component/data_converter.py b/quality-metrics/broker-component/data_converter.py
new file mode 100644
index 0000000..5b3c74b
--- /dev/null
+++ b/quality-metrics/broker-component/data_converter.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python3
+
+__copyright__ = """
+/*
+ * Copyright (c) 2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+ """
+
+""" data_converter.py:
+
+    Data converter class. This class is aimed at converting the received
+    data in the format which InfluxDB understands.
+
+"""
+
+import json
+import constants
+
+
+class DataConverter:
+
+    @staticmethod
+    def convert_tfm_imagesize_data(data):
+        # Transform keys names
+        data['metadata']['DataProducer'] = data['metadata'].pop(
+            'data_producer')
+
+        data['metadata']['git_info']['CommitTitle'] = data['metadata']['git_info'].pop(
+            'commit_title')
+        data['metadata']['git_info']['CommitID'] = data['metadata']['git_info'].pop(
+            'commit_id')
+        data['metadata']['git_info']['GerritID'] = data['metadata']['git_info'].pop(
+            'gerrit_id')
+        data['metadata']['git_info']['CommitURL'] = data['metadata']['git_info'].pop(
+            'commit_url')
+        data['metadata']['git_info']['Branch'] = data['metadata']['git_info'].pop(
+            'branch')
+
+        data['metadata']['build_info']['BuildType'] = data['metadata']['build_info'].pop(
+            'build_type')
+        data['metadata']['build_info']['CmakeConfig'] = data['metadata']['build_info'].pop(
+            'cmake_config')
+        data['metadata']['build_info']['Compiler'] = data['metadata']['build_info'].pop(
+            'compiler')
+        data['metadata']['build_info']['Target'] = data['metadata']['build_info'].pop(
+            'target')
+
+        ret = {}
+        ret['tags'] = {}
+        ret['fields'] = {}
+
+        ret['measurement'] = 'TFM_ImageSize_Statistics'
+
+        for file_info in data['data']:
+            ret['fields'][file_info['file'].rsplit(
+                '.', 1)[0] + '_b'] = file_info['bss']
+            ret['fields'][file_info['file'].rsplit(
+                '.', 1)[0] + '_d'] = file_info['data']
+            ret['fields'][file_info['file'].rsplit(
+                '.', 1)[0] + '_t'] = file_info['text']
+
+        ret['tags']['DataProducer'] = str(data['metadata']['DataProducer'])
+
+        ret['time'] = str(data['metadata']['git_info']['commit_time'])
+
+        for key in data['metadata']['git_info']:
+            if key == 'commit_time':
+                continue
+            ret['tags'][key] = str(data['metadata']['git_info'][key])
+
+        for key in data['metadata']['build_info']:
+            ret['tags'][key] = str(data['metadata']['build_info'][key])
+
+        print(ret)
+
+        return [ret]
+
+    @staticmethod
+    def convert_data(data):
+        """
+            Convert data to a dictionary containing measurement
+            name, fields and tags. It is required by InfluxDB.
+
+            :param data: data to be converted to InfluxDB format
+        """
+
+        if data['metadata']['metrics'] == 'tfm_imagesize':
+            ret = DataConverter.convert_tfm_imagesize_data(data)
+        else:
+            ret = data['data']
+
+        return ret
