Skip to main content

GA4 Parameter Detection Module

💎Premium Feature

This feature is exclusive for Premium users!

The GA4 Parameter Detection module automatically discovers and tracks user properties, custom event parameters, and item parameters in your GA4 raw export. This powerful auditing tool helps you identify configuration gaps, data quality issues, and optimization opportunities in your GA4 implementation.

Key Features​

  • Automatic Discovery: Identifies parameters in your data that aren't configured
  • Configuration Validation: Flags mismatches between expected and actual data types
  • Sample Value Analysis: Shows actual values being collected for each parameter
  • Trend Monitoring: Tracks parameter usage over time with daily granularity
  • Config Generation: Automatically suggests configuration code for discovered parameters

Configuration​

The module uses a YAML configuration file: includes/custom/modules/parameter_detection/config.yaml

# set by Superform Labs team to indicate changes
version: 1
# true/false to toggle this feature, default is false
enabled: true
# list of parameters to exclude
exclude_params: ['debug_mode']
# exclude parameter categories, possible values: standard, custom, discovered
exclude_category: []
# parameters of these events will not be detected
exclude_events: ['session_start','first_visit']
# parameters of only these events will be detected
# only use exclude or include events - not both!
include_events: []
# max_lookback_days & start_date: when you run a full refresh, whichever date is closer to current_date() (in the past) will be chosen
max_lookback_days: 7
start_date: '2025-09-14'
# you can set how many distinct sample values you wish to see per parameter (daily + total)
sample_value_count_daily: 5
sample_value_count_agg: 50

Configuration Options​

Essential Settings​

SettingDescriptionExample
enabledEnable/disable the moduletrue or false
versionConfiguration version for tracking changes (set by Superform Labs team)1

Date Range Control​

max_lookback_days: 7
start_date: '9999-01-01'

When running a full refresh, the module automatically selects the more recent of two possible start dates to prevent accidentally processing excessive historical data:

  • max_lookback_days: Maximum days to look back from today
  • start_date: Earliest absolute date to process (set to 9999-01-01 by default so that any "real" date is intentionally set by the user)

This design allows you to set a distant start_date for comprehensive historical analysis when needed, while protecting against unintentionally querying years of data during rebuilds. The module will automatically limit processing to recent data based on the max_lookback_days setting, ensuring efficient rebuilds even after extended periods without updates.

BigQuery Cost Impact

These date settings determine how much raw GA4 data gets scanned - use shorter ranges to reduce processing costs. Querying the output parameter detection tables will be rather low cost as they are already aggregated.

Filtering​

Exclude Specific Parameters​

Skip tracking for known parameters you don't want to monitor.

BigQuery Cost Impact

Parameter filtering only affects what appears in the output tables - it doesn't reduce BigQuery processing costs since the module still scans all raw GA4 data within the configured date range.

exclude_params: ["debug_mode", "test_parameter"]

Exclude Parameter Categories​

Skip tracking for known categories you don't want to monitor. Useful if you are not interested in 'standard' parameters for example.

BigQuery Cost Impact

Parameter category filtering only affects what appears in the output tables - it doesn't reduce BigQuery processing costs since the module still scans all raw GA4 data within the configured date range.

exclude_category: ["standard"]

Filter by parameter type:

  • standard: Built-in GA4 parameters
  • custom: Parameters you've configured in config.js
  • discovered: Parameters found in data but not configured

Event-Based Filtering​

Skip tracking for events you don't want to monitor.

BigQuery Cost Impact

Event filtering only affects what appears in the output tables - it doesn't reduce BigQuery processing costs (unless your raw GA4 tables are clustered by event_name!) since the module still scans all raw GA4 data within the configured date range.

# Skip parameters from certain events
exclude_events: ["session_start", "first_visit", "user_engagement"]

# OR focus on specific events only
include_events: ["purchase", "add_to_cart"]
Mutually Exclusive

Use either exclude_events OR include_events, not both simultaneously.

Sample Value Configuration​

These settings control how many example values to collect for each parameter. Samples are ranked by frequency, so you'll see the most commonly occurring values first.

sample_value_count_daily: 5
sample_value_count_agg: 50

Control how many sample values to collect:

  • sample_value_count_daily: Samples per parameter per day
  • sample_value_count_agg: Total samples across all dates

Table Structures​

ga4_parameter_detection_daily​

Granularity: Daily parameter tracking with event-level details

Incremental table that maintains a daily record of all identified parameters, including sample values and usage statistics.

ColumnDescription
event_dateThe date when the event was logged (YYYY-MM-DD format)
param_nameName of the parameter being tracked
param_sourceSource array of the parameter (e.g., event, item, user property)
event_nameName of the event this parameter belongs to
param_categoryCategory classification of the parameter (e.g., custom, standard, discovered)
param_data_type_configured_asThe data type this parameter was configured as in config.js
param_data_type_found_in_data_asThe actual data type found for this parameter in the collected data
distinct_data_type_countNumber of distinct data types observed for this parameter
found_in_dataWhether this parameter was actually found in the collected event data on this date
has_potential_issueWhether this parameter has potential data quality issues on this date
issue_descriptionDescription of the potential data quality issues identified for this parameter
event_countTotal number of times this event occurred with this parameter on this date
last_received_timestampTimestamp of when this event-parameter combination was last received on this date
sample_valuesArray of sample values (ordered by descending occurrence count) with value and occurrence_count fields
is_finalIndicates if the data is final or subject to change (based on 72h window)

ga4_parameter_detection_agg​

Granularity: Aggregated parameter summary across all dates

Aggregated table showing parameter status, data types, issue flags, and comprehensive sample values across the entire observation period.

ColumnDescription
event_nameName of the event this parameter belongs to
param_nameName of the parameter
param_data_type_configured_asThe data type this parameter was configured as in config.js
param_data_type_found_in_data_asThe actual data type found for this parameter in the collected data
param_categoryCategory classification of the parameter (e.g., custom, standard, discovered)
param_sourceSource array of the parameter (e.g., event_params_array, item_params_array, user_property_array)
found_in_dataWhether this parameter was actually found in the collected event data
has_potential_issueWhether this parameter has potential data quality issues based on the most recent data
issue_descriptionDescription of the potential data quality issues identified for this parameter
first_seen_dateFirst date (YYYY-MM-DD) when this event-parameter combination was observed
last_seen_dateLast date (YYYY-MM-DD) when this event-parameter combination was observed
days_observedTotal number of distinct dates this event-parameter combination was observed
days_with_eventsNumber of days this event-parameter combination appeared in the data
missing_datesNumber of days between first_seen_date and last_seen_date where this event-parameter combination was not observed
events_with_param_countCount of unique event names where this parameter appears
event_countTotal number of times this event occurred with this parameter
last_received_timestampTimestamp of when this event-parameter combination was last received
sample_valuesSample values for this parameter formatted as a concatenated string
sample_values_arrayArray of sample values for this parameter
unique_values_countNumber of distinct values observed for this parameter
total_actual_daysTotal number of days that are set for detection. Controlled by start_date and max_lookback_days config variables

ga4_parameter_detection_config_suggestions​

Granularity: Configuration recommendations for discovered parameters

This view generates ready-to-use configuration code for parameters found in your data but not yet configured. It produces formatted JavaScript configuration blocks that can be copied directly into your config.js file.

Example output:

CUSTOM_USER_PROPERTIES_ARRAY: [
{ name: "wordpress_role", type: "string", description: "found in: click_to_store, expand_section, page_view" }
],
CUSTOM_ITEM_PARAMS_ARRAY: [
{ name: "variant_id", type: "int", description: "found in: purchase, add_payment_info, view_item, view_cart" }
],
CUSTOM_EVENT_PARAMS_ARRAY: [
{ name: "gtm_version", type: "string", description: "found in: video_start, form_start, form_submit, click, click_to_store" },
{ name: "login_state", type: "string", description: "found in: video_start, form_start, form_submit, click, click_to_store" },
{ name: "page_author", type: "string", description: "found in: video_start, form_start, form_submit, click, click_to_store" },
{ name: "page_id", type: "int", description: "found in: video_start, form_start, form_submit, click, click_to_store" }
],

Potential Issue Types and Resolutions​

We call them "potential" issues because they may be intentional configurations or minor inconsistencies that don't require fixes. Comprehensive detection ensures you can identify and evaluate each case to determine if action is indeed needed.

Common Issue Categories​

1. Discovered Parameters​

Detection: param_category = 'discovered'

Description: "Parameter not defined in config but found in data"

Parameters exist in your GA4 data but aren't configured in your config.js file. Assess their analytical value and decide whether to add them to your configuration, exclude them via the exclude_params setting, or possibly even modify your GA4 tracking to stop collecting them.

Resolution Options:

  • Add to CUSTOM_EVENT_PARAMS_ARRAY, CUSTOM_USER_PROPERTIES_ARRAY, or CUSTOM_ITEM_PARAMS_ARRAY
  • Add to exclude_params list if uninteresting
  • Use ga4_parameter_detection_config_suggestions view for ready-to-copy configuration code
  • Stop collecting them if they are not needed
  • Ignore if issue is expected or resolved downstream

2. Missing Parameters​

Detection: param_category = 'custom' and found_in_data is false

Description: "Parameter defined in config but not found in data"

Parameters are configured but don't appear in your actual GA4 data. The configured date range will greatly affect this flag since some parameters might not be recently collected, but could be relevant historically.

Resolution Options:

  • Verify GA4 implementation is sending the parameter
  • Remove unused parameter from configuration
  • Check if parameter was recently added and hasn't appeared yet
  • Ignore if issue is expected or resolved downstream

3. Data Type Mismatches​

Detection: Various data type validation rules

Descriptions:

  • "Parameter data type mismatch: configured as string, found as int,float"
  • "Parameter data type mismatch: configured as decimal, found as string,int"
  • "Parameter data type mismatch: configured as int, found as float,string"

The configured data type doesn't match what's actually being collected. GA4's processing has a tendency to parse numbers 3 different (int, float, double) ways - feel free to ignore in such cases, but don't forget to account for them downstream.

tip

If unsure, use decimal in config.js to capture all 3 numerical types, but investigate cases where a numerical value is parsed as a string.

Resolution Options:

  • Update configuration to match actual data type
  • Fix GA4 implementation to send correct data
  • Use decimal type for mixed numerical data scenarios
  • Use string type for mixed data scenarios
  • Ignore if issue is expected or resolved downstream

4. Multiple Data Types​

Detection: distinct_data_type_count > 1

Description: "Parameter has multiple data types: int,string,float"

The same parameter contains different data types across events.

Resolution Options:

  • Standardize data collection to use consistent data type
  • Configure as string type to accommodate all variations
  • Investigate why different events send different data
  • Ignore if issue is expected or resolved downstream

5. Missing Dates​

Detection: (total_actual_days - days_observed) > 0 in aggregated table

Description: "Parameter missing on X days"

Parameters are not collected for certain dates. Its severity is highly context-dependent.

Resolution Options:

  • Investigate implementation gaps or deployment issues
  • Check for seasonal patterns or campaign-specific parameters
  • Verify parameter is being sent from all relevant pages/events
  • Ignore if issue is expected or resolved downstream

Looker Studio Template​

tip

We created a free-to-use Looker Studio template that was specifically designed to work with the GA4Dataform modules. Feel free to copy it and adapt it to your needs! You can find it here.

Template Features​

  • Parameter discovery dashboard
  • Potential issue flagging
  • Sample value analysis
  • Configuration suggestions
  • Trend analysis

Common Use Cases​

  1. Implementation Audits: Verify GA4 setup completeness and accuracy
  2. Data Quality Monitoring: Identify and resolve configuration issues
  3. Discovery Analysis: Find valuable parameters not yet configured
  4. Migration Validation: Ensure parameter parity when migrating setups
  5. Compliance Tracking: Monitor parameter usage for privacy compliance
  6. Performance Optimization: Identify unused parameters for cleanup