From 872c82f7aba11e7f8da8d17b421aa66b843a7603 Mon Sep 17 00:00:00 2001 From: olsch01 Date: Mon, 6 Apr 2026 08:57:47 -0400 Subject: [PATCH] fix: Correct GA4 scroll event counting - Fixed bug where scroll events showed percentage values instead of actual counts - Now queries scroll_25, scroll_50, scroll_75 individually with EXACT match - Properly extracts event counts from GA4 API response - Scroll tracking now shows real engagement numbers --- agents/marketing-seo/scripts/ga4-direct.py | 51 +++++++++++----------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/agents/marketing-seo/scripts/ga4-direct.py b/agents/marketing-seo/scripts/ga4-direct.py index bc9f457..d91b752 100644 --- a/agents/marketing-seo/scripts/ga4-direct.py +++ b/agents/marketing-seo/scripts/ga4-direct.py @@ -54,35 +54,34 @@ def get_engagement_data(): result['engagementRate'] = float(row.metric_values[5].value) result['screenPageViews'] = int(row.metric_values[6].value) - # Get scroll depth events - scroll_request = RunReportRequest( - property=f"properties/{GA_PROPERTY_ID}", - dimensions=[Dimension(name="eventName")], - metrics=[Metric(name="eventCount")], - date_ranges=[DateRange(start_date="1daysAgo", end_date="today")], - dimension_filter=FilterExpression( - filter=Filter( - field_name="eventName", - string_filter=Filter.StringFilter( - match_type=Filter.StringFilter.MatchType.BEGINS_WITH, - value="scroll" + # Get scroll depth events - query each specific scroll event + scroll_events = {} + for scroll_type in ['scroll_25', 'scroll_50', 'scroll_75']: + scroll_request = RunReportRequest( + property=f"properties/{GA_PROPERTY_ID}", + metrics=[Metric(name="eventCount")], + date_ranges=[DateRange(start_date="1daysAgo", end_date="today")], + dimension_filter=FilterExpression( + filter=Filter( + field_name="eventName", + string_filter=Filter.StringFilter( + match_type=Filter.StringFilter.MatchType.EXACT, + value=scroll_type + ) ) ) - ), - limit=10 - ) + ) + + scroll_response = client.run_report(scroll_request) + count = 0 + for row in scroll_response.rows: + count += int(row.metric_values[0].value) + scroll_events[scroll_type] = count - scroll_response = client.run_report(scroll_request) - scroll_data = {} - for row in scroll_response.rows: - event_name = row.dimension_values[0].value - count = int(row.metric_values[0].value) - scroll_data[event_name] = count - - result['scroll_25'] = scroll_data.get('scroll_25', 0) - result['scroll_50'] = scroll_data.get('scroll_50', 0) - result['scroll_75'] = scroll_data.get('scroll_75', 0) - result['scroll_total'] = sum(scroll_data.values()) + result['scroll_25'] = scroll_events.get('scroll_25', 0) + result['scroll_50'] = scroll_events.get('scroll_50', 0) + result['scroll_75'] = scroll_events.get('scroll_75', 0) + result['scroll_total'] = sum(scroll_events.values()) # Get form interactions form_request = RunReportRequest(