RudderStack lets you send your event data to Google Analytics 4 via cloud mode by leveraging the Google Analytics 4 Measurement Protocol.
Note that Google Analytics 4 does not officially support a complete server-to-server integration. RudderStack utilizes the GA4 Measurement Protocol API for our cloud mode integration, which does not currently allow ingestion of UTM parameters for attribution reporting. This may significantly limit your ability to use certain GA4 reporting features. Please refer to Google’s documentation for more information on these limitations.
Tagging methods
RudderStack supports both the gtag
and firebase
ways for tagging in websites in cloud mode. However, note that:
- If you use
gtag
, passing theclient_id
parameter is mandatory. - If you use
firebase
, passing theapp_instance_id
parameter is mandatory.
The mappings for the above-mentioned mandatory parameters are listed in the following table:
Parameters | Mapping value |
---|---|
client_id | Refer to the Mapping client_id section. |
app_instance_id | from externalID ga4AppInstanceId |
app_instance_id
.Mapping client_id
RudderStack maps the GA4 client_id
in the following order of precedence:
- If a value is provided in the RudderStack dashboard's GA4 client_id Field Identifier setting, it looks up that value in the event payload and maps it to
client_id
. - If no value is provided in the above dashboard setting or a value is provided in the dashboard but not in the event payload, then RudderStack maps
client_id
from the following fields in the exact priority order as listed below:- From
externalID
:ga4ClientId
- From
anonymousId
- From
messageId
- From
Supported mappings
The following table lists the mappings for the optional parameters (common for both gtag
and firebase
):
Optional Parameters | Mapping value | Description |
---|---|---|
user_id | userId /traits.userId /traits.id /context.traits.userId /context.traits.id | Unique identifier for a user which helps Google Analytics 4 know if two devices/browsers belong to the same user. |
timestamp_micros | originalTimestamp /timestamp | Timestamp in ISO 8601 format. |
non_personalized_ads | context.device.adTrackingEnabled | Indicates whether the events should be used for personalized ads. If context.device.adTrackingEnabled is set as true , non_personalised_ads will be set to false . |
Identify
The identify
call lets you identify a user and associate them to their actions. It also lets you record any traits about them like their name, email, etc.
identify
events, refer to the Identify settings section.A sample identify
call using gtag
is shown below:
rudderanalytics.identify("1hKOmRA4GRlm", { firstLogin: true, method: "Google", value: 10, currency: "USD"});
A sample identify
call using firebase
is shown below:
rudderanalytics.identify("1hKOmRA4GRlm", { firstLogin: true, method: "Google", value: 10, currency: "USD"}, { externalId: [{ type: "ga4AppInstanceId", id: "f0dd99b6f979fb551ce583373900f937" }],});
Track
The track
call lets you capture user events along with the properties associated with them.
A sample track
call using gtag
is shown below:
rudderanalytics.track('Product List Viewed', { list_id: "related_products", category: "Related_products", products: [{ product_id: "507f1f77bcf86cd799439011", name: "Monopoly: 3rd Edition", coupon: "SUMMER_FUN", category: "Apparel", brand: "Google", variant: "green", price: "19", quantity: "2", position: "1", affiliation: "Google Merchandise Store", currency: "USD", discount: 2.22, item_category2: "Adult", item_category3: "Shirts", item_category4: "Crew", item_category5: "Short sleeve", item_list_id: "related_products", item_list_name: "Related Products", location_id: "L_12345" }]}, { externalId: [{ type: "ga4ClientId", id: "client_id" }],});
A sample track
call using firebase
is shown below:
rudderanalytics.track('Product List Viewed', { list_id: "related_products", category: "Related_products", products: [{ product_id: "507f1f77bcf86cd799439011", name: "Monopoly: 3rd Edition", coupon: "SUMMER_FUN", category: "Apparel", brand: "Google", variant: "green", price: "19", quantity: "2", position: "1", affiliation: "Google Merchandise Store", currency: "USD", discount: 2.22, item_category2: "Adult", item_category3: "Shirts", item_category4: "Crew", item_category5: "Short sleeve", item_list_id: "related_products", item_list_name: "Related Products", location_id: "L_12345" }]}, { externalId: [{ type: "ga4AppInstanceId", id: "f0dd99b6f979fb551ce583373900f937" }],});
Page
The page
call lets you record your website's page views with any additional relevant information about the viewed page.
RudderStack maps the page
call to a page_view
event by default, and passes it to Google Analytics 4 as a custom event.
As mentioned in the track
section above, the RudderStack cloud mode supports both the gtag
and firebase
methods for tagging in websites.
A sample page
call using gtag
is shown below:
rudderanalytics.page();
A sample page
call using firebase
is shown below:
rudderanalytics.page({}, { externalId: [{ type: "ga4AppInstanceId", id: "f0dd99b6f979fb551ce583373900f937" }],});
Supported mappings
The following table lists the property mappings between RudderStack and Google Analytics 4:
RudderStack property | Google Analytics 4 property |
---|---|
context.page.referrer | page_referrer |
context.page.title | page_title |
context.page.url | page_location |
Group
The group
call lets you link an identified user with a group such as a company, organization, or an account, and record any traits associated with that group, for example, company name, number of employees, etc.
RudderStack maps the group
call to the join_group
event by default.
A sample group
call using gtag
is shown below:
rudderanalytics.group("1hKOmRA4", { "custom1": 1234, "custom2": "custom2"});
A sample group
call using firebase
is shown below:
rudderanalytics.group("1hKOmRA4", { "custom1": 1234, "custom2": "custom2"}, { externalId: [{ type: "ga4AppInstanceId", id: "f0dd99b6f979fb551ce583373900f937" }],});
Ecommerce event tracking
RudderStack supports ecommerce tracking for Google Analytics 4. You can refer to the Ecommerce Events Specification guide for sending events while instrumenting your site with the RudderStack SDK.
The following table lists the mappings between the RudderStack and Google Analytics 4 events:
RudderStack event | Google Analytics 4 event |
---|---|
Products Searched | search |
Product List Viewed | view_item_list |
Product Clicked | select_item |
Promotion Viewed | view_promotion |
Promotion Clicked | select_promotion |
Product Viewed | view_item |
Product Added | add_to_cart |
Product Removed | remove_from_cart |
Cart Viewed | view_cart |
Product Added to Wishlist | add_to_wishlist |
Checkout Started | begin_checkout |
Order Completed | purchase |
Order Refunded | refund |
Product Shared | share |
Cart Shared | share |
Payment Info Entered | add_payment_info |
Checkout Step Completed | add_shipping_info |
The following table lists the RudderStack and Google Analytics 4 properties mappings based on the specific RudderStack events:
RudderStack event | RudderStack property | Google Analytics 4 property |
---|---|---|
Products Searched | properties.query | search_term |
Product List Viewed Product Clicked | properties.list_id properties.category | item_list_id item_list_name |
Promotion Viewed Promotion Clicked | properties.creative_name properties.creative | creative_name |
properties.creative_slot properties.position | creative_slot | |
properties.location_id | location_id | |
properties.promotion_name properties.name | promotion_name | |
properties.promotion_id | promotion_id | |
Product Viewed Product Added to Wishlist | properties.currency | currency |
properties.total properties.price properties.value properties.revenue | value | |
Product Added Product Removed | properties.currency | currency |
properties.total properties.value properties.revenue properties.price X properties.quantity | value | |
Cart Viewed | properties.currency | currency |
properties.total properties.value properties.revenue | value | |
Checkout Started | properties.currency properties.coupon | currency coupon |
properties.total properties.value properties.revenue | value | |
Order Completed Order Refunded | properties.currency properties.order_id properties.affiliation properties.coupon properties.shipping properties.tax | currency transaction_id affiliation coupon shipping tax |
properties.total properties.value properties.revenue | value | |
Product Shared | properties.share_via properties.content_type | method content_type |
properties.item_id properties.product_id properties.sku | item_id | |
Cart Shared | properties.share_via properties.content_type | method content_type |
properties.item_id properties.cart_id | item_id | |
Group | groupId | group_id |
Payment Info Entered | properties.payment_method properties.coupon properties.currency | payment_type coupon currency |
properties.total properties.value properties.revenue | value | |
Checkout Step Completed | properties.currency | currency |
properties.total properties.value properties.revenue | value | |
properties.coupon | coupon | |
properties.shipping_method | shipping_tier |
Most of the above mentioned events include the products
parameter (mapped to the items
parameter) which accepts a products
array.
The below table details out the common mappings for the products
array:
RudderStack | Google Analytics 4 |
---|---|
properties.products.$.product_id | item_id |
properties.products.$.name | item_name |
properties.products.$.coupon | coupon |
properties.products.$.price | price |
properties.products.$.position | index |
properties.products.$.category | item_category |
properties.products.$.brand | item_brand |
properties.products.$.variant | item_variant |
properties.products.$.quantity | quantity |
The below mentioned ecommerce events include the products
parameter which accepts a products
array.
RudderStack | Presence of products parameter |
---|---|
Product List Viewed | Required |
Product Clicked | Required |
Product Viewed | Required |
Product Added | Required |
Product removed | Required |
Cart Viewed | Required |
Checkout Started | Required |
Payment Info entered | Required |
Order Completed | Required |
Order Refunded | Optional |
Product Added to Wishlist | Required |
View Search Results | Optional |
The following table details the parameter mappings present in the products
array, for the above events:
RudderStack | Google Analytics 4 |
---|---|
properties.products.$.affiliation | affiliation |
properties.products.$.currency | currency |
properties.products.$.discount | discount |
properties.products.$.item_category2 | item_category2 |
properties.products.$.item_category3 | item_category3 |
properties.products.$.item_category4 | item_category4 |
properties.products.$.item_category5 | item_category5 |
properties.products.$.item_list_id | item_list_id |
properties.products.$.item_list_name | item_list_name |
properties.products.$.location_id | location_id |
The below mentioned ecommerce events include the products
parameter (mapped to the items
parameter) which accepts a products
array.
RudderStack | Presence of products parameter |
---|---|
Promotion Viewed | Required |
Promotion Clicked | Optional |
The following table details the parameter mappings present in the products
array, for the above events:
RudderStack | Google Analytics 4 |
---|---|
properties.products.$.affiliation | affiliation |
properties.products.$.creative_name | creative_name |
properties.products.$.creative_slot | creative_slot |
properties.products.$.currency | currency |
properties.products.$.discount | discount |
properties.products.$.item_category2 | item_category2 |
properties.products.$.item_category3 | item_category3 |
properties.products.$.item_category4 | item_category4 |
properties.products.$.item_category5 | item_category5 |
properties.products.$.item_list_id | item_list_id |
properties.products.$.item_list_name | item_list_name |
properties.products.$.location_id | location_id |
properties.products.$.promotion_id | promotion_id |
properties.products.$.promotion_name | promotion_name |
Non ecommerce events tracking
The below table lists the mappings of the non ecommerce track
events and properties that are passed to Google Analytics 4 events and properties:
Event Mapping | Property Mapping | ||
---|---|---|---|
RudderStack | Google Analytics 4 | RudderStack | Google Analytics 4 |
generate_lead | generate_lead | properties.${currency} properties.${value} | currency value |
login | login | properties.${method} | method |
sign_up | sign_up | properties.${method} | method |
view_search_results | view_search_results | properties.search_term | search_term |
{currency}
, {value}
, and {method}
properties mentioned above are dynamic and their actual value depends on the key name passed in the dashboard. Refer to the Identify section for more information.properties.user_properties
. Refer to the Google Analytics 4 documentation for more information.Rules for naming custom events
You must follow the below rules while choosing a name for the custom events:
- Event names are case sensitive. For example,
my_event
andMy_Event
are two distinct events. - Event names must start with a letter. Only letters, numbers, and underscores are permitted. DO NOT use spaces.
- Do not use reserved prefixes and event names. Refer to the FAQ section to learn more about the reserved event names and prefixes.
Tracking active users and sessions
As Google Analytics 4 only reports the users who engage with your website for a non-zero time, RudderStack sets the engagement_time_msec
parameter to 1, by default. To track engagement time in your events, you can set the engagement_time_msec
field to a different value.
RudderStack maps the following properties to GA4's engagement_time_msec
property:
RudderStack properties | Google Analytics 4 property |
---|---|
traits.engagementTimeMsec context.traits.engagementTimeMsec traits.engagement_time_msec context.traits.engagement_time_msec | engagement_time_msec |
You can use the Google Analytics 4 session_id
parameter to identify the session associated with a particular event.
RudderStack maps the following properties to GA4's session_id
property:
RudderStack properties | Google Analytics 4 property |
---|---|
traits.sessionId context.traits.sessionId traits.session_id context.traits.session_id | session_id |
engagement_time_msec
and session_id
when sending events via the device mode. However, they must be manually passed while sending events via cloud mode.FAQ
I’ve set up GA4 as a destination in RudderStack but I’m not seeing the expected data flow through in the GA4 dashboard. What should I do?
To view the events sent to GA4, go to your Google Analytics dashboard and navigate to Reports > Realtime.
While the events typically show up within a few seconds, note that it can take GA4 up to 24 hours to process their data and appear on other reports. Also, not all types of data flow through to its realtime dashboard. It may be best to consult GA4’s FAQs for the most up-to-date information on its latest capabilities and limitations.
What are the reserved prefixes in Google Analytics 4?
The reserved prefixes in Google Analytics 4 cannot be used for custom events. The list of such prefixes is mentioned below:
- _ (underscore)
- firebase_
- ga_
- google_
- gtag.
Refer to the GA4 documentation for more information.
What are the reserved event, parameter, and user property names in Google Analytics 4?
Google Analytics 4 has some reserved event, parameter, and user property names that cannot be used. Refer to the Measurement Protocol (Google Analytics 4) guide for a complete list of reserved names.
How do I obtain app_instance_id
?
You can retrieve app_instance_id
through the Firebase SDK depending on the platform where the SDK is installed:
- Android:
getAppInstanceId()
- Kotlin:
getAppInstanceId()
- Swift:
appInstanceID()
- Objective-C:
appInstanceID
- C++:
GetAnalyticsInstanceId()
- Unity:
GetAnalyticsInstanceIdAsync()
Refer to the GA4 documentation for more information.
Contact us
For more information on the topics covered on this page, email us or start a conversation in our Slack community.