diff --git a/api/src/engine/models/experiment/experiment.model.ts b/api/src/engine/models/experiment/experiment.model.ts
index 2ac6ec204f2f1021f8f5963771b37362cbce7b18..06e28b4b2e1c93e8dac7c6e7dc828c706f370c8a 100644
--- a/api/src/engine/models/experiment/experiment.model.ts
+++ b/api/src/engine/models/experiment/experiment.model.ts
@@ -1,28 +1,7 @@
-import {
-  createUnionType,
-  Field,
-  ObjectType,
-  PartialType,
-} from '@nestjs/graphql';
-import { RawResult } from '../result/raw-result.model';
-import { TableResult } from '../result/table-result.model';
+import { Field, ObjectType, PartialType } from '@nestjs/graphql';
+import { ResultUnion } from '../result/common/result-union.model';
 import { Algorithm } from './algorithm.model';
 
-export const ResultUnion = createUnionType({
-  name: 'ResultUnion',
-  types: () => [TableResult, RawResult],
-  resolveType(value) {
-    if (value.headers) {
-      return TableResult;
-    }
-    if (value.listMax) {
-      return RawResult;
-    }
-
-    return null;
-  },
-});
-
 @ObjectType()
 export class Experiment {
   @Field({ nullable: true })
diff --git a/api/src/engine/models/result/common/result-union.model.ts b/api/src/engine/models/result/common/result-union.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8146c69d275fb1c91eff2ec63a92812ee8086f07
--- /dev/null
+++ b/api/src/engine/models/result/common/result-union.model.ts
@@ -0,0 +1,18 @@
+import { createUnionType } from '@nestjs/graphql';
+import { RawResult } from '../raw-result.model';
+import { TableResult } from '../table-result.model';
+
+export const ResultUnion = createUnionType({
+  name: 'ResultUnion',
+  types: () => [TableResult, RawResult],
+  resolveType(value) {
+    if (value.headers) {
+      return TableResult;
+    }
+    if (value.listMax) {
+      return RawResult;
+    }
+
+    return null;
+  },
+});
diff --git a/api/src/engine/models/result/common/result.model.ts b/api/src/engine/models/result/common/result.model.ts
index ca86bfb4e109c44d0d4c06ea0e70ac05e3bf656a..e5e059738c16bb8297558add9aa51e7bce9791e2 100644
--- a/api/src/engine/models/result/common/result.model.ts
+++ b/api/src/engine/models/result/common/result.model.ts
@@ -1,7 +1,4 @@
-import { Field, ObjectType } from '@nestjs/graphql';
+import { ObjectType } from '@nestjs/graphql';
 
 @ObjectType()
-export abstract class Result {
-  @Field({ nullable: true })
-  groupBy?: string;
-}
+export abstract class Result {}
diff --git a/api/src/engine/models/result/groups-result.model.ts b/api/src/engine/models/result/groups-result.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fb11ba57403c420f7c3a5be903fdd4d9e8ee6686
--- /dev/null
+++ b/api/src/engine/models/result/groups-result.model.ts
@@ -0,0 +1,18 @@
+import { Field, ObjectType } from '@nestjs/graphql';
+import { ResultUnion } from './common/result-union.model';
+import { Result } from './common/result.model';
+
+@ObjectType()
+export class GroupResult {
+  @Field()
+  name: string;
+
+  @Field(() => [ResultUnion])
+  results: Array<typeof ResultUnion>;
+}
+
+@ObjectType()
+export class GroupsResult extends Result {
+  @Field(() => [GroupResult])
+  groups: GroupResult[];
+}