diff --git a/backend/migrations/20220405095220_gmtm.ts b/backend/migrations/20220405095220_gmtm.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1b7e2907d0515dcaad4b3649c6d195ed8eac0e02
--- /dev/null
+++ b/backend/migrations/20220405095220_gmtm.ts
@@ -0,0 +1,21 @@
+import { Knex } from "knex";
+
+export async function up(knex: Knex): Promise<void> {
+  return knex.schema
+    .alterTable("games", (table) => table.integer("began_at_gmtm").unsigned())
+    .alterTable("clues", (table) => table.integer("began_at_gmtm").unsigned())
+    .alterTable("shots", (table) => table.integer("began_at_gmtm").unsigned())
+    .alterTable("games", (table) => table.integer("ended_at_gmtm").unsigned())
+    .alterTable("clues", (table) => table.integer("ended_at_gmtm").unsigned())
+    .alterTable("shots", (table) => table.integer("ended_at_gmtm").unsigned());
+}
+
+export async function down(knex: Knex): Promise<void> {
+  return knex.schema
+    .alterTable("games", (table) => table.dropColumn("began_at_gmtm"))
+    .alterTable("clues", (table) => table.dropColumn("began_at_gmtm"))
+    .alterTable("shots", (table) => table.dropColumn("began_at_gmtm"))
+    .alterTable("games", (table) => table.dropColumn("ended_at_gmtm"))
+    .alterTable("clues", (table) => table.dropColumn("ended_at_gmtm"))
+    .alterTable("shots", (table) => table.dropColumn("ended_at_gmtm"));
+}
diff --git a/backend/src/schemas.ts b/backend/src/schemas.ts
index 072c8afc5629237180e4d6f8339011625a9a0a78..d55f0e050333a5b85c87cad595ea47839a890e19 100644
--- a/backend/src/schemas.ts
+++ b/backend/src/schemas.ts
@@ -20,6 +20,8 @@ export const Game = Type.Object({
   device_id: Type.Readonly(Type.String({ format: "uuid" })),
   began_at: Nullable(Type.String({ format: "date-time" })),
   ended_at: Nullable(Type.String({ format: "date-time" })),
+  began_at_gmtm: Nullable(Type.Number({ minimum: 0 })),
+  ended_at_gmtm: Nullable(Type.Number({ minimum: 0 })),
 });
 
 export const Clue = Type.Object({
@@ -28,6 +30,8 @@ export const Clue = Type.Object({
   word_id: Type.Readonly(Type.String({ format: "uuid" })),
   began_at: Nullable(Type.String({ format: "date-time" })),
   ended_at: Nullable(Type.String({ format: "date-time" })),
+  began_at_gmtm: Nullable(Type.Number({ minimum: 0 })),
+  ended_at_gmtm: Nullable(Type.Number({ minimum: 0 })),
 });
 
 export const Shot = Type.Object({
@@ -36,17 +40,19 @@ export const Shot = Type.Object({
   clue_id: Nullable(Type.String({ format: "uuid" })),
   began_at: Type.String({ format: "date-time" }),
   ended_at: Type.String({ format: "date-time" }),
+  began_at_gmtm: Nullable(Type.Number({ minimum: 0 })),
+  ended_at_gmtm: Nullable(Type.Number({ minimum: 0 })),
   typed: Type.String(),
   final: Type.String(),
 });
 
 export const GameUpdate = Type.Partial(
-  Type.Pick(Game, ["began_at", "ended_at"]),
+  Type.Pick(Game, ["began_at", "ended_at", "began_at_gmtm", "ended_at_gmtm"]),
 );
 export const GameCreate = GameUpdate;
 
 export const ClueUpdate = Type.Partial(
-  Type.Pick(Clue, ["began_at", "ended_at"]),
+  Type.Pick(Clue, ["began_at", "ended_at", "began_at_gmtm", "ended_at_gmtm"]),
 );
 export const ClueCreate = Type.Intersect([
   Type.Pick(Clue, ["word_id"]),