RudderStack lets you send your event data to Google Analytics 4 via cloud mode by leveraging the Google Analytics 4 Measurement Protocol.
For capturing a fuller, more robust set of attribution data while using Measurement Protocol, we suggest referencing and setting up a hybrid mode connection.
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_idparameter is mandatory. - If you use
firebase, passing theapp_instance_idparameter 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_idfrom 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 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_idproperties.category | item_list_iditem_list_name |
| Promotion Viewed Promotion Clicked | properties.creative_nameproperties.creative | creative_name |
properties.creative_slotproperties.position | creative_slot | |
properties.location_id | location_id | |
properties.promotion_nameproperties.name | promotion_name | |
properties.promotion_id | promotion_id | |
| Product Viewed Product Added to Wishlist | properties.currency | currency |
properties.totalproperties.priceproperties.valueproperties.revenue | value | |
| Product Added Product Removed | properties.currency | currency |
properties.totalproperties.valueproperties.revenueproperties.price X properties.quantity | value | |
| Cart Viewed | properties.currency | currency |
properties.totalproperties.valueproperties.revenue | value | |
| Checkout Started | properties.currencyproperties.coupon | currencycoupon |
properties.totalproperties.valueproperties.revenue | value | |
| Order Completed Order Refunded | properties.currencyproperties.order_idproperties.affiliationproperties.couponproperties.shippingproperties.tax | currencytransaction_idaffiliationcouponshippingtax |
properties.totalproperties.valueproperties.revenue | value | |
| Product Shared | properties.share_viaproperties.content_type | methodcontent_type |
properties.item_idproperties.product_idproperties.sku | item_id | |
| Cart Shared | properties.share_viaproperties.content_type | methodcontent_type |
properties.item_idproperties.cart_id | item_id | |
| Group | groupId | group_id |
| Payment Info Entered | properties.payment_methodproperties.couponproperties.currency | payment_typecouponcurrency |
properties.totalproperties.valueproperties.revenue | value | |
| Checkout Step Completed | properties.currency | currency |
properties.totalproperties.valueproperties.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} | currencyvalue |
| 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_eventandMy_Eventare 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.sessionIdcontext.traits.sessionIdtraits.session_idcontext.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.Hybrid mode
Hybrid mode sends your event data to Google Analytics 4 via both the native SDK (device mode) and the Google Analytics 4 Measurement Protocol (cloud mode). See Hybrid mode to learn more.
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.