Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Negative `engagementDuration` Values Due to Time Synchronization Issues

Open
#40 0 comments 7 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
42/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
typescript
Domain
analytics

Research direction

Start in src/index.ts at the engagementStart logic around line 97 and the worker-side engagementDuration calculation around line 130. Reproduce the discrepancy with a client clock four minutes ahead, then compare the resulting GA4 engagement_time_msec values in BigQuery. Done means the chosen timestamp strategy no longer produces negative or inflated engagement durations under clock differences.

Written by the indexing model from the issue text.

Description

We use Cloudflare Zaraz to integrate GA4 for event monitoring. While analyzing the underlying GA4 event data, we discovered an interesting phenomenon: a significant number of engagement_time_msec values are appearing as negative.

Negative engagement time values

Root Cause Analysis

After investigating, we identified that this occurs when there's a time synchronization discrepancy between the user's device and Cloudflare Worker (Zaraz's execution environment). Specifically, negative engagement_time_msec values appear when the user's device time is ahead of the Worker time.

We conducted a test to reproduce this behavior:

  1. Set client time 4 minutes ahead of actual time
  2. Focus on a page, where client time is used to mark engagementStart

Engagement start marking

  1. When the user leaves the page, a visibilitychange event triggers, and engagementDuration is calculated on the worker side as approximately now - engagementStart. In cases where the client time is ahead of the server time, this results in a negative engagementDuration
  2. This can be verified by querying the underlying event data in BigQuery for GA4, where engagement_time_msec reflects this time difference

BigQuery results

It's worth noting that the issue also affects accuracy when client time lags behind server time, resulting in inflated engagement duration values.

Suggested Solution

It might be worth considering using timestamps consistently (either all client-side or all edge-side) when calculating engagementDuration. This could help address potential issues since client-side time discrepancies are fairly common.

Dominant language
TypeScript
Stars
27
Forks
9
PR merge metrics
No merged PRs in 30d

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from managed-components/google-analytics-4

All issues in managed-components/google-analytics-4

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.