8.4 KiB
GA4 Custom Event Naming Conventions Guide
Complete Reference for Event Naming Strategy
Core Naming Rules
Rule 1: Use snake_case
✅ Correct: video_tutorial_watched
❌ Wrong: VideoTutorialWatched, video-tutorial-watched
Rule 2: Maximum 40 Characters
✅ Correct: product_demo_request_submitted (34 chars)
❌ Wrong: product_demo_request_submitted_by_enterprise_user (57 chars)
Rule 3: Start with Action Verb When Possible
✅ Correct: file_downloaded, calculator_used, video_started
❌ Wrong: download_file, use_calculator, start_video
Rule 4: Be Descriptive to Business Context
✅ Correct: api_key_generated, subscription_upgraded, refund_requested
❌ Wrong: action, event, click, data
Rule 5: Maintain Consistency
✅ Correct: Always "video_completed" (never video_done, video_finished)
❌ Wrong: Mixing "cart_abandoned", "cartAbandoned", "cart_left"
Naming Framework: [Action][Object][Context]
Pattern Breakdown
Action: What the user is doing
view,create,update,delete,submit,download,watch,listenclick,scroll,hover,focus,select,open,closestart,complete,pause,resume,skip,errorupgrade,downgrade,cancel,refund,return
Object: What entity is being acted upon
video,article,product,course,trial,subscriptionbutton,form,popup,modal,notificationcart,order,invoice,receipt,accountdashboard,report,export,import,setting
Context: Qualifier or category (optional)
_free,_premium,_enterprise,_trial_mobile,_desktop,_tablet_email,_social,_referral_failed,_success,_error,_retry
Framework Examples
E-commerce Context:
product_view(user viewed product)product_compare_viewed(comparison page opened)add_to_cart(item added to shopping cart)wishlist_add(item added to saved list)review_submit(product review posted)add_to_cart_mobile(mobile-specific cart action)
SaaS Context:
trial_start(free trial activated)trial_end(trial period ended)feature_unlock(premium feature accessed)api_key_create(authentication token generated)integration_connect(third-party service linked)upgrade_click(upgrade button clicked)
Content Context:
video_start(video playback began)video_complete(video finished)article_read(article fully read)podcast_skip(podcast episode skipped)download_start(resource download initiated)whitepaper_request(lead magnet requested)
SaaS Trial Context:
trial_signup(trial account created)trial_feature_use(premium feature tested during trial)trial_extend(trial period extended)trial_convert(trial upgraded to paid)trial_abandon(trial left unused)
Industry Naming Patterns
SaaS Specific
Onboarding & Activation:
onboarding_start,onboarding_step_completed,onboarding_completewelcome_tour_start,tutorial_lesson_completedfirst_data_entry,first_report_generated
Feature Engagement:
feature_discover,feature_explore,feature_adoptintegration_setup,integration_test,integration_activateapi_call_success,api_error_encountered
Monetization:
upgrade_modal_view,upgrade_click,upgrade_completeplan_comparison_view,pricing_page_visitsubscription_pause,subscription_resume,subscription_cancel
Support & Help:
help_article_search,help_article_view,help_article_helpfulsupport_ticket_open,support_chat_startfeature_request_submit,bug_report_submit
Education Specific
Course Engagement:
course_enroll,course_start,course_completelesson_view,lesson_complete,lesson_retryquiz_attempt,quiz_submit,quiz_pass
Learning Progress:
certificate_earn,badge_unlock,milestone_reachstudy_streak_start,study_streak_endresource_download,note_create,bookmark_add
Social & Collaboration:
discussion_post_create,discussion_reply,discussion_helpful_votepeer_review_submit,study_group_join
Media/Publishing Specific
Content Consumption:
article_read_start,article_read_complete,article_scroll_depth_100video_play,video_pause,video_quality_changepodcast_episode_start,podcast_episode_complete
Engagement:
content_share,content_comment,content_likenewsletter_signup,newsletter_open,newsletter_clickbookmark_save,bookmark_view,bookmark_share
Creator Features:
draft_create,article_publish,video_uploadmonetization_enable,subscriber_only_content_publish
E-commerce Specific
Product Discovery:
search_submit,filter_apply,sort_changecategory_view,subcategory_viewproduct_review_read,product_rating_view
Purchase Journey:
product_add_to_cart,cart_view,cart_update_quantitycheckout_start,shipping_option_select,payment_method_selectapply_coupon,coupon_remove,gift_card_apply
Post-Purchase:
order_confirmation_view,order_tracking_clickproduct_return_initiate,refund_request_submit
Naming Checklist
Before finalizing custom event names:
- Event name is snake_case (lowercase, underscores)
- Event name is under 40 characters
- Event name is action-oriented (verb first when possible)
- Event name is specific to business domain
- Event name is consistent with existing naming scheme
- Event name doesn't duplicate a recommended event
- Event name would be understandable to business stakeholders
- Event name could be documented without parameters
- Event is documented in team's event dictionary
- Event follows organization's naming standards
Anti-Pattern Examples to Avoid
Generic Names
❌ Bad: click, event, action, user_action, interaction
✅ Good: button_click, demo_button_click, video_play_click
Vague Names
❌ Bad: data, info, tracking, send, request
✅ Good: customer_data_export, form_submit_request, contact_email_send
Inconsistent Names
❌ Bad: "user_signup", "registerUser", "SignUp", "sign_up_completed"
✅ Good: Always "user_signup" (consistent)
Over-specific Names
❌ Bad: "user_clicked_blue_button_in_hero_section_on_homepage_on_mobile"
✅ Good: "hero_cta_click" or "homepage_cta_click"
Parameters in Event Names
❌ Bad: "video_watched_hd", "trial_signup_30day", "user_from_google"
✅ Good: "video_watched" with parameter video_quality="hd"
Implementation Examples
Example 1: Complete Naming Decision
Business Goal: Track when users request product demo
Naming Process:
- Action: request, submit
- Object: demo, product_demo
- Context: (none needed, already specific)
Decision: demo_request or demo_request_submit?
demo_request(28 chars) - Better: action is implied in "request"- Final name:
demo_request
Example 2: SaaS Feature Adoption
Business Goal: Track when users enable an integration
Naming Process:
- Action: enable, activate, setup, connect
- Object: integration
- Context: integration type
Decision: integration_enabled or integration_setup_complete?
integration_enabled(21 chars) - Clean and action-oriented- Final name:
integration_enabled - Parameter:
integration_type(e.g., "slack", "zapier")
Example 3: Educational Progress
Business Goal: Track when students complete quiz
Naming Process:
- Action: submit, complete, finish
- Object: quiz
- Context: (optional: pass/fail)
Decision: quiz_submit or quiz_complete?
quiz_submit(11 chars) - User action- Final name:
quiz_submit - Parameter:
quiz_result(e.g., "pass", "fail"),score(numeric)
Team Naming Standards (Template)
Document your organization's naming conventions:
Event Naming Standard
====================
Format: [action]_[object]_[context]
Actions Used: create, update, delete, view, submit, download, upload, upload, share
Objects: product, course, video, article, user, team, workspace, settings
Context: Optional qualifiers like _mobile, _free, _premium, _failed
Examples Approved:
- product_view
- course_enroll
- quiz_submit
- integration_enabled
- support_ticket_create
Examples Not Approved:
- user_action
- click_event
- data_send