diff --git a/api/src/engine/connectors/exareme/handlers/algorithms/ttest-paired.handler.spec.ts b/api/src/engine/connectors/exareme/handlers/algorithms/ttest-paired.handler.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d0267143776d0dee332e5c7b7b5655d6c655390e
--- /dev/null
+++ b/api/src/engine/connectors/exareme/handlers/algorithms/ttest-paired.handler.spec.ts
@@ -0,0 +1,55 @@
+import { TableResult } from '../../../../models/result/table-result.model';
+import { Experiment } from '../../../../models/experiment/experiment.model';
+import TTestPairedHandler from './ttest-paired.handler';
+
+const data = {
+  t_stat: -97.35410837992711,
+  p: 1.0,
+  df: 144.0,
+  mean_diff: -66.00088551724139,
+  se_diff: 0.6779465871093092,
+  ci_upper: 'Infinity',
+  ci_lower: -67.12322892404309,
+  cohens_d: -11.456478738682357,
+};
+
+const createExperiment = (): Experiment => ({
+  id: 'dummy-id',
+  name: 'Testing purpose',
+  algorithm: {
+    name: 'TTEST_PAIRED',
+  },
+  datasets: ['desd-synthdata'],
+  domain: 'dementia',
+  variables: ['lefthippocampus'],
+  coVariables: ['righthippocampus', 'leftamygdala'],
+  results: [],
+});
+
+describe('T-Test Paired handler', () => {
+  let tTestPairedHandler: TTestPairedHandler;
+  let experiment: Experiment;
+
+  beforeEach(() => {
+    tTestPairedHandler = new TTestPairedHandler();
+    experiment = createExperiment();
+  });
+
+  describe('Handle', () => {
+    it('with standard t-test algo data', () => {
+      tTestPairedHandler.handle(experiment, data);
+
+      const table = experiment.results[0] as TableResult;
+
+      expect(experiment.results.length === 1);
+      expect(table.data.length === 7);
+    });
+
+    it('Should be empty with another algo', () => {
+      experiment.algorithm.name = 'dummy_algo';
+      tTestPairedHandler.handle(experiment, data);
+
+      expect(experiment.results.length === 0);
+    });
+  });
+});
diff --git a/api/src/engine/connectors/exareme/handlers/algorithms/ttest-paired.handler.ts b/api/src/engine/connectors/exareme/handlers/algorithms/ttest-paired.handler.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e04ccb7cfb847cd9f77e81b1c2c32930be64304f
--- /dev/null
+++ b/api/src/engine/connectors/exareme/handlers/algorithms/ttest-paired.handler.ts
@@ -0,0 +1,59 @@
+import { isNumber } from '../../../../../common/utils/shared.utils';
+import { Domain } from '../../../../models/domain.model';
+import { Experiment } from '../../../../models/experiment/experiment.model';
+import {
+  TableResult,
+  TableStyle,
+} from '../../../../models/result/table-result.model';
+import BaseHandler from '../base.handler';
+
+const lookupDict = {
+  t_stat: 'Statistic',
+  p: 'P-value',
+  df: 'Degrees of freedom',
+  mean_diff: 'Mean difference',
+  se_diff: 'Standard error of difference',
+  ci_lower: 'Lower 95% confidence interval',
+  ci_upper: 'Upper 95% confidence interval',
+  cohens_d: "Cohen's d",
+};
+const NUMBER_PRECISION = 4;
+
+export default class TTestPairedHandler extends BaseHandler {
+  private canHandle(experimentId: string) {
+    return experimentId.toLocaleLowerCase() === 'ttest_paired';
+  }
+
+  private getTable(data: any): TableResult {
+    const tableModel: TableResult = {
+      name: 'T-test',
+      tableStyle: TableStyle.NORMAL,
+      headers: ['name', 'value'].map((name) => ({ name, type: 'string' })),
+      data: [
+        't_stat',
+        'p',
+        'df',
+        'mean_diff',
+        'se_diff',
+        'ci_lower',
+        'ci_upper',
+        'cohens_d',
+      ].map((name) => [
+        lookupDict[name],
+        isNumber(data[name])
+          ? data[name].toPrecision(NUMBER_PRECISION)
+          : data[name],
+      ]),
+    };
+
+    return tableModel;
+  }
+
+  handle(experiment: Experiment, data: any, domain?: Domain): void {
+    if (!this.canHandle) return super.handle(experiment, data, domain);
+
+    const tableModel = this.getTable(data);
+
+    if (tableModel) experiment.results.push(tableModel);
+  }
+}