Output tables
The module produces two intermediate touchpoint tables, two core tables (journeys and models), and six reports. Journeys, models and reports materialize in your outputs dataset (superform_outputs_*); the intermediate touchpoint tables materialize in the transformations dataset (superform_transformations_*).
Intermediate touchpoints
You normally consume the journeys table and the reports, not these. Only one is built, depending on touchpoint.mode.
| Table | Granularity | Purpose |
|---|---|---|
int_ga4_attribution_touchpoints_session | One row per traffic touch (one per ga4_sessions row) plus one row per matched conversion event | The flat touchpoint stream in session mode. |
int_ga4_attribution_touchpoints_source_change | One row per intra-session source run plus one row per matched conversion event | The flat touchpoint stream in source_change mode. |
ga4_attribution_journeys
Granularity: one row per user journey (journey_id), from first touch to its closing conversion or boundary. Traffic and conversion touches are stored as nested arrays.
| Column | Description |
|---|---|
journey_id | Unique ID - `FARM_FINGERPRINT(user_identifier |
user_identifier | Identity key value (user_pseudo_id by default, else journey.user_identifier coalesced to user_pseudo_id). |
user_identifier_type | Name of the identity-key column (e.g. user_pseudo_id). |
journey_number | 0-based sequence of this journey in the user's history. |
journey_start_date | Date of the first touch (partition column). |
journey_start_timestamp_utc | UTC timestamp of the first touch. |
journey_end_date | Date of the last touch. |
journey_length_days | Elapsed days, first to last touch. |
days_to_conversion | Days from first touch to the closing conversion; NULL for ongoing/lapsed journeys. |
user_pseudo_ids | Distinct user_pseudo_id values in the journey. |
device_categories | Distinct device categories across traffic touches. |
default_channel_groups | Distinct default channel groups across traffic touches. |
ends_in_sale | TRUE if the journey has a closing conversion. |
journey_length_steps | Number of traffic (non-conversion) touches. |
revenue | Revenue across ALL conversion touches (closing + micro). Does not reconcile to models.attributed_revenue (closing only) - use closing_revenue for that. |
closing_conversion_count | Closing conversion touches (0 or 1 by construction). |
micro_conversion_count | Non-closing (micro) conversion touches. |
closing_revenue | Revenue from closing conversions only (0 when none). |
micro_revenue | Revenue from non-closing (micro) conversions (0 when none). |
closing_conversion_date | Closing conversion date; NULL for ongoing/lapsed. Reports use this as conversion_date. |
closing_conversion_name | Closing conversion name; NULL for ongoing/lapsed. |
touches | Array of traffic touches, chronological (empty for a zero-touch conversion). Per-touch fields: touch_start_time, touch_id, session_id, user_pseudo_id, device_category, source, medium, campaign, default_channel_group. |
conversions | Array of conversion touches (closing + non-closing), chronological. Per-conversion fields: touch_start_time, event_id, session_id, user_pseudo_id, conversion_name, revenue, is_closing. |
is_ongoing | TRUE if no boundary closed the journey (still accumulating). |
is_final | Data-freshness flag - TRUE once all touches are past the 72h late-data window. |
ga4_attribution_models
Granularity: one row per credited traffic touch × model × closing conversion, aggregated to touch_date × conversion_date × closing_conversion_name × model_name × channel dimensions. Additive - see Attribution models.
| Column | Description |
|---|---|
touch_date | Date of the credited traffic touch (partition column). |
conversion_date | Date of the closing conversion the credit is for. |
closing_conversion_name | Closing conversion name - segment by conversion type ('(no touchpoint)' on the synthetic zero-touch row). |
model_name | Attribution model. participation overcounts - compare fractional models only. |
source / medium / campaign / default_channel_group / device_category | Channel dimensions of the touch ('(no touchpoint)' for a zero-touch journey). |
attributed_revenue | Closing revenue apportioned to this touch (additive). SUM reconciles to closing revenue per fractional model; participation overcounts. |
attributed_conversions | Share of the closing conversion on this touch (fractional for standard models, 1.0 each for participation; additive). |
credited_touches | Credited touch-rows at this grain (pre-aggregation, not distinct touch_ids). position_based with 2 touches (no middle) renormalizes to 50/50. |
Reports
All six reports are additive and partitioned on journey_start_date. They derive from the journeys table; store counts and SUM numerators, and compute rates/averages in BI (see Additivity).
ga4_attribution_channel_chain_report
Granularity: one row per journey_start_date × conversion_date × channel_chain × closing_conversion_name. The full ordered channel path and its outcomes.
| Column | Description |
|---|---|
channel_chain | The path - ordered >-delimited channels; part of the grain. |
path_length | Channels in the path (constant per channel_chain). |
path_length_bucket | path_length bucketed: 1, 2, 3, 4-5, 6+. |
first_channel / last_channel | First / last channel in the path. |
num_distinct_channels | Distinct channels in the path (path_length counts repeats; this does not). |
journeys | Journeys on this path (additive). |
closed_journeys / ongoing_journeys / lapsed_journeys | Journeys that closed / still open / closed without a sale. |
no_touch_journeys | Journeys with zero traffic touches (chain = '(no touchpoint)'). |
sum_traffic_touches | SUM of traffic touches (additive). |
total_conversion_count | SUM of all conversion touches, closing + micro (additive). |
closing_conversion_count / micro_conversion_count | SUM of closing / non-closing conversions. |
total_revenue / micro_revenue | SUM of closing-conversion / micro-conversion revenue. |
sum_journey_length_days | SUM of journey length in days. |
sum_days_to_conversion | SUM of first-touch-to-conversion days, closed journeys. |
ga4_attribution_journey_summary_report
Granularity: one row per journey_start_date × conversion_date × path_length × closing_conversion_name. Journey metrics by path length.
| Column | Description |
|---|---|
path_length | Channels in the path (the grain; raw integer - bucket in BI). |
path_length_bucket | Convenience bucket over path_length (1, 2, 3, 4-5, 6+); descriptor, not grain. |
journeys | Journeys at this path length (additive). |
closed_journeys / ongoing_journeys / lapsed_journeys | conversion_rate = closed_journeys / journeys. |
no_touch_journeys | Zero-traffic-touch journeys (fall in path_length 1). |
total_conversion_count / closing_conversion_count / micro_conversion_count | Additive conversion counts. |
total_revenue / micro_revenue | SUM of closing / micro revenue. |
sum_journey_length_days / sum_days_to_conversion | Additive day sums for derived averages. |
ga4_attribution_channel_assist_report
Granularity: one row per journey_start_date × conversion_date × channel × closing_conversion_name. Per-channel participation and assist - an influence view (values double-count across the channels of a journey; for credit use the models table).
| Column | Description |
|---|---|
channel | The participating channel (a value of the configured journey.channel_grouping). |
journeys_participated | Journeys whose path includes this channel (any position; once per journey, overlaps across channels). |
journeys_as_first / journeys_as_last | Journeys where this channel is first / last (the closing channel). |
journeys_assisted | Journeys where this channel participated but was not the closing channel. |
closed_journeys_participated / _as_first / _as_last / _assisted | The same four counts restricted to closing journeys. |
participated_revenue | Closing revenue of journeys this channel participated in (influence, not credit). |
assisted_revenue | Closing revenue of journeys this channel assisted (not the closing channel). |
micro_conversion_count / micro_revenue / closing_conversion_count | Conversions/revenue in journeys this channel participated in (influence; double-counts). |
ga4_attribution_channel_transition_report
Granularity: one row per journey_start_date × conversion_date × from_channel × to_channel. Sankey/flow edges between consecutive channels.
| Column | Description |
|---|---|
from_channel | Source node - a channel, or '(start)'. |
to_channel | Destination node - a channel, or a terminal node: '(conversion: <name>)' if closed, else '(no conversion)'. |
transitions | Times this consecutive pair occurs (edge weight; repeats within a journey counted). |
closed_transitions | Transitions within journeys that ended in a closing conversion. |
journeys_with_transition | Distinct journeys containing this edge (vs transitions, which counts repeats). |
closed_journeys_with_transition | Distinct closing journeys containing this edge. |
ga4_attribution_conversion_lag_report
Granularity: one row per journey_start_date × conversion_date × closing_conversion_name × lag_bucket (closed journeys only). Time-to-conversion distribution.
| Column | Description |
|---|---|
lag_bucket | days_to_conversion bucketed: 0 (same day), 1 day, 2-7 days, 8-30 days, 31+ days (the grain). |
lag_bucket_order | Integer sort key (1-5) for chronological chart ordering. |
closed_journeys | Closing journeys in this bucket. |
closing_conversion_count | SUM of closing conversions in this bucket (= closed_journeys when one closing per journey). |
revenue | SUM of closing-conversion revenue in this bucket. |
sum_days_to_conversion | SUM of first-touch-to-closing days (additive). |
ga4_attribution_micro_conversion_report
Granularity: one row per journey_start_date × conversion_name, where conversion_name is a micro-conversion (a conversions[] entry not in journey.closing_conversions). Micro-conversion volume and its lift on final outcomes.
| Column | Description |
|---|---|
conversion_name | The micro-conversion (the grain). |
event_count | Occurrences of this micro-conversion (additive). |
event_revenue | Revenue on this micro-conversion's own touches (additive). |
journeys_with | Journeys containing this micro-conversion. conv_rate_with = closed_journeys_with / journeys_with. |
closed_journeys_with | Journeys with this micro-conversion that reached a closing conversion - compare conv_rate_with to the overall rate for lift. |
closing_conversion_count_with | Closing conversions in journeys containing this micro-conversion (additive). |
closing_revenue_with | Closing revenue of journeys containing this micro-conversion (final outcome, not the micro's own revenue). Summing across conversion_name double-counts a journey. |