diff --git a/packages/backend-core/src/events/publishers/serve.ts b/packages/backend-core/src/events/publishers/serve.ts
index 13afede029..128e0b9b11 100644
--- a/packages/backend-core/src/events/publishers/serve.ts
+++ b/packages/backend-core/src/events/publishers/serve.ts
@@ -7,22 +7,26 @@ import {
   AppServedEvent,
 } from "@budibase/types"
 
-export async function servedBuilder() {
-  const properties: BuilderServedEvent = {}
+export async function servedBuilder(timezone: string) {
+  const properties: BuilderServedEvent = {
+    timezone,
+  }
   await publishEvent(Event.SERVED_BUILDER, properties)
 }
 
-export async function servedApp(app: App) {
+export async function servedApp(app: App, timezone: string) {
   const properties: AppServedEvent = {
     appVersion: app.version,
+    timezone,
   }
   await publishEvent(Event.SERVED_APP, properties)
 }
 
-export async function servedAppPreview(app: App) {
+export async function servedAppPreview(app: App, timezone: string) {
   const properties: AppPreviewServedEvent = {
     appId: app.appId,
     appVersion: app.version,
+    timezone,
   }
   await publishEvent(Event.SERVED_APP_PREVIEW, properties)
 }
diff --git a/packages/frontend-core/src/api/analytics.js b/packages/frontend-core/src/api/analytics.js
index 0f7a19323a..653943c6ab 100644
--- a/packages/frontend-core/src/api/analytics.js
+++ b/packages/frontend-core/src/api/analytics.js
@@ -8,9 +8,10 @@ export const buildAnalyticsEndpoints = API => ({
     })
   },
   analyticsPing: async ({ source }) => {
+    const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone
     return await API.post({
       url: "/api/bbtel/ping",
-      body: { source },
+      body: { source, timezone },
     })
   },
 })
diff --git a/packages/server/src/api/controllers/analytics.ts b/packages/server/src/api/controllers/analytics.ts
index d763658cca..44a99bbbb6 100644
--- a/packages/server/src/api/controllers/analytics.ts
+++ b/packages/server/src/api/controllers/analytics.ts
@@ -19,14 +19,14 @@ export const ping = async (ctx: any) => {
       let appId = context.getAppId()
 
       if (isDevAppID(appId)) {
-        await events.serve.servedAppPreview(appInfo)
+        await events.serve.servedAppPreview(appInfo, body.timezone)
       } else {
-        await events.serve.servedApp(appInfo)
+        await events.serve.servedApp(appInfo, body.timezone)
       }
       break
     }
     case PingSource.BUILDER: {
-      await events.serve.servedBuilder()
+      await events.serve.servedBuilder(body.timezone)
       break
     }
   }
diff --git a/packages/server/src/api/routes/tests/analytics.spec.js b/packages/server/src/api/routes/tests/analytics.spec.js
index 652d1e7ead..73d5810d7f 100644
--- a/packages/server/src/api/routes/tests/analytics.spec.js
+++ b/packages/server/src/api/routes/tests/analytics.spec.js
@@ -6,6 +6,8 @@ describe("/static", () => {
   let config = setup.getConfig()
   let app
 
+  const timezone = "Europe/London"
+
   afterAll(setup.afterAll)
 
   beforeEach(async () => {
@@ -17,22 +19,25 @@ describe("/static", () => {
     it("should ping from builder", async () => {
       await request
         .post("/api/bbtel/ping")
-        .send({source: "builder"})
+        .send({source: "builder", timezone})
         .set(config.defaultHeaders())
         .expect(200)
 
       expect(events.serve.servedBuilder).toBeCalledTimes(1)
+      expect(events.serve.servedBuilder).toBeCalledWith(timezone)
+      expect(events.serve.servedApp).not.toBeCalled()
+      expect(events.serve.servedAppPreview).not.toBeCalled()
     })
 
     it("should ping from app preview", async () => {
       await request
         .post("/api/bbtel/ping")
-        .send({source: "app"})
+        .send({source: "app", timezone})
         .set(config.defaultHeaders())
         .expect(200)
 
       expect(events.serve.servedAppPreview).toBeCalledTimes(1)
-      expect(events.serve.servedAppPreview).toBeCalledWith(config.getApp())
+      expect(events.serve.servedAppPreview).toBeCalledWith(config.getApp(), timezone)
       expect(events.serve.servedApp).not.toBeCalled()
     })
 
@@ -42,12 +47,12 @@ describe("/static", () => {
 
       await request
         .post("/api/bbtel/ping")
-        .send({source: "app"})
+        .send({source: "app", timezone})
         .set(headers)
         .expect(200)
 
       expect(events.serve.servedApp).toBeCalledTimes(1)
-      expect(events.serve.servedApp).toBeCalledWith(config.getProdApp())
+      expect(events.serve.servedApp).toBeCalledWith(config.getProdApp(), timezone)
       expect(events.serve.servedAppPreview).not.toBeCalled()
     })
   })
diff --git a/packages/types/src/api/web/analytics.ts b/packages/types/src/api/web/analytics.ts
index 886803a809..018c85ded2 100644
--- a/packages/types/src/api/web/analytics.ts
+++ b/packages/types/src/api/web/analytics.ts
@@ -5,4 +5,5 @@ export enum PingSource {
 
 export interface AnalyticsPingRequest {
   source: PingSource
+  timezone: string
 }
diff --git a/packages/types/src/sdk/events/serve.ts b/packages/types/src/sdk/events/serve.ts
index fe5b723942..cb03c47e05 100644
--- a/packages/types/src/sdk/events/serve.ts
+++ b/packages/types/src/sdk/events/serve.ts
@@ -1,11 +1,15 @@
 import { BaseEvent } from "./event"
 
-export interface BuilderServedEvent extends BaseEvent {}
+export interface BuilderServedEvent extends BaseEvent {
+  timezone: string
+}
 
 export interface AppServedEvent extends BaseEvent {
   appVersion: string
+  timezone: string
 }
 
 export interface AppPreviewServedEvent extends BaseEvent {
   appVersion: string
+  timezone: string
 }