GA4 Parameter Detection Module
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​
Setting | Description | Example |
---|---|---|
enabled | Enable/disable the module | true or false |
version | Configuration 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 todaystart_date
: Earliest absolute date to process (set to9999-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.
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.
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.
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 parameterscustom
: Parameters you've configured inconfig.js
discovered
: Parameters found in data but not configured
Event-Based Filtering​
Skip tracking for events you don't want to monitor.
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"]
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 daysample_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.
Column | Description |
---|---|
event_date | The date when the event was logged (YYYY-MM-DD format) |
param_name | Name of the parameter being tracked |
param_source | Source array of the parameter (e.g., event, item, user property) |
event_name | Name of the event this parameter belongs to |
param_category | Category classification of the parameter (e.g., custom, standard, discovered) |
param_data_type_configured_as | The data type this parameter was configured as in config.js |
param_data_type_found_in_data_as | The actual data type found for this parameter in the collected data |
distinct_data_type_count | Number of distinct data types observed for this parameter |
found_in_data | Whether this parameter was actually found in the collected event data on this date |
has_potential_issue | Whether this parameter has potential data quality issues on this date |
issue_description | Description of the potential data quality issues identified for this parameter |
event_count | Total number of times this event occurred with this parameter on this date |
last_received_timestamp | Timestamp of when this event-parameter combination was last received on this date |
sample_values | Array of sample values (ordered by descending occurrence count) with value and occurrence_count fields |
is_final | Indicates 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.
Column | Description |
---|---|
event_name | Name of the event this parameter belongs to |
param_name | Name of the parameter |
param_data_type_configured_as | The data type this parameter was configured as in config.js |
param_data_type_found_in_data_as | The actual data type found for this parameter in the collected data |
param_category | Category classification of the parameter (e.g., custom, standard, discovered) |
param_source | Source array of the parameter (e.g., event_params_array, item_params_array, user_property_array) |
found_in_data | Whether this parameter was actually found in the collected event data |
has_potential_issue | Whether this parameter has potential data quality issues based on the most recent data |
issue_description | Description of the potential data quality issues identified for this parameter |
first_seen_date | First date (YYYY-MM-DD) when this event-parameter combination was observed |
last_seen_date | Last date (YYYY-MM-DD) when this event-parameter combination was observed |
days_observed | Total number of distinct dates this event-parameter combination was observed |
days_with_events | Number of days this event-parameter combination appeared in the data |
missing_dates | Number of days between first_seen_date and last_seen_date where this event-parameter combination was not observed |
events_with_param_count | Count of unique event names where this parameter appears |
event_count | Total number of times this event occurred with this parameter |
last_received_timestamp | Timestamp of when this event-parameter combination was last received |
sample_values | Sample values for this parameter formatted as a concatenated string |
sample_values_array | Array of sample values for this parameter |
unique_values_count | Number of distinct values observed for this parameter |
total_actual_days | Total 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
, orCUSTOM_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.
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​
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​
- Implementation Audits: Verify GA4 setup completeness and accuracy
- Data Quality Monitoring: Identify and resolve configuration issues
- Discovery Analysis: Find valuable parameters not yet configured
- Migration Validation: Ensure parameter parity when migrating setups
- Compliance Tracking: Monitor parameter usage for privacy compliance
- Performance Optimization: Identify unused parameters for cleanup