GA4 Implementation Checklist
A complete, step-by-step checklist for implementing Google Analytics 4 correctly from day one. Ensure accurate tracking, proper configuration, and reliable reporting.
GA4 Implementation Checklist
What This Resource Is
A comprehensive, step-by-step checklist for implementing Google Analytics 4 (GA4) correctly from the ground up. Whether you're migrating from Universal Analytics, setting up analytics for a new website, or fixing an existing GA4 implementation, this checklist ensures you configure everything properly the first time.
This is not a high-level overview—it's a detailed, actionable implementation guide organized into logical phases, with specific verification steps for each checkpoint. Follow this checklist and you'll have a production-ready GA4 setup with accurate tracking, proper event configuration, and reliable reporting.
Who Should Use It
Perfect for:
- Marketing Analysts - Implementing GA4 for the first time
- Web Developers - Adding analytics tracking to websites
- Marketing Managers - Overseeing GA4 migration or setup
- Agency Teams - Standardizing GA4 implementations across clients
- Solo Marketers - Setting up analytics without technical support
- Data Engineers - Ensuring proper data collection architecture
Use this checklist if you're:
- Setting up GA4 for the first time
- Migrating from Universal Analytics (UA)
- Fixing a broken or poorly configured GA4 property
- Taking over analytics for a new company or client
- Launching a new website or app
- Ensuring your GA4 setup follows best practices
Don't use this if:
- You need a high-level GA4 overview only (read a guide first)
- You're just exploring GA4 features (not ready to implement)
- Someone else handles all technical implementation (share this with them)
How to Use It
Before You Begin: Prerequisites
You'll need:
- Google Account with appropriate permissions
- Website access - Ability to add code to your site (direct or via developer)
- Google Tag Manager - Strongly recommended (or ability to edit site code directly)
- Conversion goals defined - Know what actions you want to track
- Time allocation - 4-8 hours for basic setup, more for complex sites
Gather this information:
- Current analytics tracking (if migrating from UA)
- List of key conversion events
- E-commerce tracking requirements (if applicable)
- Cross-domain tracking needs
- User roles and access requirements
Implementation Approach
Phase-based implementation: This checklist is organized into 7 phases you'll complete in order:
- Phase 1: Property Setup - Create and configure your GA4 property
- Phase 2: Data Collection - Install tracking code and verify data flow
- Phase 3: Event Configuration - Set up custom events and conversions
- Phase 4: Enhanced Measurement - Configure automatic tracking features
- Phase 5: E-commerce Tracking (if applicable) - Implement transaction tracking
- Phase 6: Integration & Audiences - Connect platforms and build segments
- Phase 7: Reporting & Validation - Create reports and verify accuracy
For each checkpoint:
- Complete the action described
- Verify it's working using the provided test method
- Check off when confirmed working
- Note any issues or customizations in comments
Time estimates:
- Basic website (no e-commerce): 4-6 hours
- E-commerce site: 8-12 hours
- Complex site (multiple domains, app+web): 16+ hours
Testing as You Go
Critical: Don't skip verification steps!
After each phase, verify your implementation:
- Use GA4 DebugView for real-time testing
- Check Real-Time reports for immediate validation
- Review standard reports after 24-48 hours
- Document what you tested and results
Common Implementation Paths
Path 1: New Website, No Prior Analytics
- Follow all phases in order
- No migration concerns
- Clean slate implementation
Path 2: Migrating from Universal Analytics
- Keep UA running during GA4 setup (parallel tracking)
- Map UA goals to GA4 events
- Compare data for validation period
- Don't delete UA until confident in GA4
Path 3: Fixing Existing GA4 Setup
- Audit current state first (use our Marketing Data Audit Checklist)
- Identify gaps with this checklist
- Fix issues without disrupting working elements
- Test thoroughly before considering "done"
The Complete GA4 Implementation Checklist
Phase 1: Property Setup & Configuration (12 Checkpoints)
1.1 Create GA4 Property
Action: Create a new GA4 property in your Google Analytics account
- Log into Google Analytics admin
- Click "Create Property"
- Enter property name (e.g., "Company Name - Website")
- Select timezone and currency
- Click "Next" and configure business details
Verify: Property appears in your account list
Notes:
- One property per website/app (or combined web+app property)
- Choose timezone carefully (can't easily change later)
- Currency should match your business reporting currency
1.2 Create Data Stream
Action: Create a web data stream for your website
- In property setup, click "Web" for data stream type
- Enter website URL (e.g., https://www.yoursite.com)
- Enter stream name (e.g., "Main Website" or "Production")
- Click "Create stream"
Verify: Data stream created, Measurement ID displayed (G-XXXXXXXXXX)
Notes:
- One stream per website or app
- For multiple domains, create one stream and configure cross-domain tracking later
- Save your Measurement ID - you'll need it for tracking code
1.3 Configure Data Stream Settings
Action: Review and configure enhanced measurement settings
- In your data stream, review "Enhanced measurement" toggle
- Initially leave enabled (we'll configure details in Phase 4)
- Note other settings (iOS app, Android app not applicable for web)
Verify: Enhanced measurement toggle is ON
Notes:
- Enhanced measurement auto-tracks scrolls, outbound clicks, site search, video, file downloads
- We'll fine-tune these settings later
- Don't disable unless you have a specific reason
1.4 Set Up Google Signals
Action: Enable Google Signals for cross-device tracking
- Go to Admin > Property > Data Settings > Data Collection
- Enable "Google signals data collection"
- Review and accept terms
Verify: Google Signals shows as "Active"
Notes:
- Enables remarketing and cross-device reporting
- Requires compliance with privacy policies
- Users can opt out via Google Ads Settings
1.5 Configure Data Retention
Action: Set event data retention period
- Go to Admin > Property > Data Settings > Data Retention
- Set to "14 months" (maximum for standard GA4)
- Set "Reset user data on new activity" to ON
Verify: Retention set to 14 months
Notes:
- Default is 2 months (too short for most businesses!)
- This affects explorations and user-level reports
- Aggregated reports (standard) not affected
- BigQuery export preserves all data if needed
1.6 Add Users and Set Permissions
Action: Grant access to team members
- Go to Admin > Property > Property Access Management
- Click "+" to add users
- Enter email addresses and select role:
- Administrator: Full control (use sparingly)
- Editor: Create/edit but can't manage users
- Analyst: Build reports, audiences, but can't edit configuration
- Viewer: Read-only access
Verify: All users receive access email and can log in
Notes:
- Grant minimum necessary permissions
- Use Google Groups for team access management
- Review access quarterly and remove former employees
- Consider separate properties for dev/staging/production
1.7 Link Google Ads Account (if applicable)
Action: Connect your Google Ads account to GA4
- Go to Admin > Property > Google Ads Links
- Click "Link" and select your Google Ads account
- Enable auto-tagging
- Enable personalized advertising
- Click "Submit"
Verify: Link shows as "Active" in both GA4 and Google Ads
Notes:
- Must have admin access to both accounts
- Enables GA4 audiences in Google Ads
- Imports Google Ads cost data to GA4
- Required for enhanced conversions and better attribution
1.8 Link Search Console (if applicable)
Action: Connect Google Search Console to GA4
- Go to Admin > Property > Search Console Links
- Click "Link" and choose your Search Console property
- Select your web data stream
- Click "Submit"
Verify: Link shows as "Active"
Notes:
- Enables organic search query reporting in GA4
- Must have owner/admin access to Search Console
- Links at property level, not stream level
1.9 Configure Internal Traffic Filter
Action: Create filter to exclude your own office traffic
- Go to Admin > Property > Data Streams > [your stream]
- Click "Configure tag settings" > "Show more" > "Define internal traffic"
- Click "Create" and name it (e.g., "Office IP")
- Select "IP address equals" or "IP address begins with"
- Enter your office IP address(es)
- Save
Then activate the filter:
- Go to Admin > Property > Data Settings > Data Filters
- Toggle the "Internal Traffic" filter to "Active"
Verify: Visit your site from office, check DebugView shows traffic tagged as "internal"
Notes:
- Get your IP address from whatismyipaddress.com
- Add all office locations, VPN IPs
- For dynamic IPs, use "begins with" for IP range
- Can create "Test" state instead of filtering entirely
1.10 Set Up Developer/Test Filter (optional but recommended)
Action: Create filter to separate development traffic
- Go to Admin > Property > Data Streams > [your stream]
- Click "Configure tag settings" > "Show more" > "Define internal traffic"
- Create new rule for development environments
- Match on hostname (e.g., "hostname contains staging" or "hostname contains localhost")
- Save as "Development Traffic"
Verify: Visit staging site, check DebugView shows traffic tagged appropriately
Notes:
- Keeps test data separate from production
- Essential for accurate reporting
- Can create separate GA4 property for dev/staging instead
1.11 Configure Bot Filtering
Action: Enable bot filtering (should be default)
- Go to Admin > Property > Data Settings > Data Collection
- Verify "Exclude all hits from known bots and spiders" is checked
Verify: Setting is enabled
Notes:
- Usually enabled by default
- Filters out most bot traffic automatically
- For stubborn bots, may need custom filters later
1.12 Set Up BigQuery Export (optional, recommended for enterprises)
Action: Enable BigQuery export for raw data access
- Go to Admin > Property > BigQuery Links
- Click "Link" and select or create BigQuery project
- Choose daily or streaming export
- Configure dataset location (should match your region)
- Click "Submit"
Verify: Link shows as "Active", data begins flowing within 24 hours
Notes:
- Requires Google Cloud Platform account
- Free for first 10GB/month, then paid
- Enables custom analysis beyond GA4 interface
- Bypasses data sampling
- Preserves data beyond retention limits
- Recommended for high-traffic sites or advanced analytics needs
Phase 2: Data Collection Setup (8 Checkpoints)
2.1 Install Google Tag Manager (Recommended Method)
Action: Add GTM container to your website
- Create GTM account and container at tagmanager.google.com
- Copy container code snippet
- Add container code to every page:
- Part 1: In <head> section
- Part 2: Immediately after opening <body> tag
- Publish container
Verify:
- Visit your site, right-click > Inspect, search for "googletagmanager.com"
- Use Google Tag Assistant Chrome extension
Notes:
- GTM is strongly recommended over hardcoding GA4
- Easier to maintain and update
- Enables tag management without developer dependencies
- If not using GTM, skip to 2.2 for direct implementation
2.2 Create GA4 Configuration Tag in GTM
Action: Set up GA4 tag in Google Tag Manager
- In GTM, click Tags > New
- Name it "GA4 - Configuration Tag"
- Tag Configuration > Google Analytics: GA4 Configuration
- Enter your Measurement ID (G-XXXXXXXXXX)
- Triggering: Select "All Pages" trigger
- Save
Verify:
- Use GTM Preview mode
- Visit your site, verify tag fires on every page
- Check GA4 DebugView shows page_view events
Notes:
- This is your base configuration tag
- All other GA4 tags will reference this
- Only need one configuration tag per property
2.3 Publish GTM Container
Action: Publish your GTM container to production
- Click "Submit" in GTM
- Enter version name (e.g., "GA4 Initial Setup")
- Add description of changes
- Click "Publish"
Verify:
- Visit your live site (not preview mode)
- Check GA4 Real-Time reports show active user (you)
- Verify page_view events appearing
Notes:
- Always use descriptive version names
- GTM maintains version history (can rollback if needed)
- Test in preview before publishing!
2.4 Verify Data Collection
Action: Confirm data is flowing to GA4
- Visit your website
- Open GA4 > Reports > Real-time
- Verify you see:
- Active users count (at least 1 - you)
- Event count increasing
- Page views showing your navigation
- Correct page paths
Verify: Real-time report shows activity within 10 seconds
Notes:
- If no data after 5 minutes, check:
- GTM container published (not just saved)
- GTM code on page (view source)
- Measurement ID correct in GTM tag
- Ad blockers disabled for testing
- Standard reports take 24-48 hours to populate
2.5 Test with GA4 DebugView
Action: Enable debug mode and test events
- Install Google Analytics Debugger Chrome extension OR
- Add
?debug_mode=trueto your URL parameter - Navigate your site performing key actions
- Open GA4 > Configure > DebugView
- Watch events fire in real-time
Verify:
- Page views appear as you navigate
- Events show correct parameters
- No errors in event stream
- User properties populated
Notes:
- DebugView is your best friend during implementation
- Shows real-time event data with full details
- Debug mode doesn't affect actual reporting
- Disable debug mode when done testing (remove extension or URL parameter)
2.6 Configure Cross-Domain Tracking (if applicable)
Action: Set up cross-domain tracking for multiple domains
- In GA4 Admin > Property > Data Streams > [stream] > Configure tag settings
- Scroll to "Configure your domains"
- Add all domains that should share user sessions:
- www.yoursite.com
- shop.yoursite.com
- checkout.yoursite.com
- Any third-party domains (payment processors, etc.)
- Save
In GTM (if using):
- Edit your GA4 Configuration tag
- Fields to Set > Add Row
- Field Name:
linker - Value:
{"domains":["domain1.com","domain2.com"]} - Save and publish
Verify:
- Navigate from one domain to another
- Check GA4 Real-Time > Traffic acquisition
- Verify source shows previous page, not referral
- User ID persists across domains
Notes:
- Only needed if you have multiple domains
- Prevents self-referrals
- Test by navigating between all domain combinations
- Common use case: main site to shopping cart on different domain
2.7 Set Up Subdomain Tracking (if applicable)
Action: Configure tracking for subdomains
- Ensure cookie domain is set correctly in GTM
- Edit GA4 Configuration tag
- Fields to Set > Add Row
- Field Name:
cookie_domain - Value:
auto(usually best) or.yourdomain.com(for explicit subdomain tracking) - Save and publish
Verify:
- Visit www.yoursite.com, then blog.yoursite.com
- User session continues (same Client ID)
- No self-referrals in reports
Notes:
- Usually handled automatically with
autosetting - Explicit domain setting needed for complex setups
- Test all subdomain combinations
2.8 Configure Referral Exclusions
Action: Exclude your own domains and payment processors from referral traffic
- Go to Admin > Property > Data Streams > [stream] > Configure tag settings
- Scroll to "More tagging settings" > "List unwanted referrals"
- Add domains to exclude:
- Your own domains (if not using cross-domain tracking)
- Payment processors (paypal.com, stripe.com)
- Login providers (google.com for OAuth)
- Any third-party that interrupts user flow
Verify:
- Complete transaction that goes to PayPal and back
- Check GA4 Traffic Acquisition report
- Verify PayPal not listed as referral source
Notes:
- Prevents payment processors from being credited as traffic sources
- Essential for accurate attribution
- Don't overuse - only exclude truly unwanted referrals
Phase 3: Event Configuration (10 Checkpoints)
3.1 Review Automatically Collected Events
Action: Understand which events are automatically tracked
- Review GA4 documentation on automatic events:
page_view- Automatically collectedsession_start- Automatically collectedfirst_visit- Automatically collecteduser_engagement- Automatically collected
- Open Reports > Real-time > Event count
- Verify these events appear
Verify: Automatic events showing in Real-time reports
Notes:
- These events require no configuration
- Foundation for all GA4 reporting
- Can't disable (nor should you want to)
3.2 Plan Custom Events
Action: Document all custom events you need to track
- Create event naming plan spreadsheet
- List each event with:
- Event name (e.g.,
generate_lead,sign_up,download_asset) - Trigger condition (when it fires)
- Parameters (what additional data to capture)
- Conversion status (is this a conversion?)
- Owner (who's responsible for maintenance)
- Event name (e.g.,
Verify: Documented plan approved by stakeholders
Notes:
- Use GA4 recommended event names when possible (see GA4 documentation)
- Follow naming convention: lowercase with underscores
- Keep event names under 40 characters
- Avoid spaces and special characters
- Plan before implementing to avoid inconsistency
Recommended events to consider:
generate_lead- Form submissionssign_up- Newsletter, account creationlogin- User authenticationsearch- Site search usageview_item- Product views (e-commerce)add_to_cart- Cart additionsbegin_checkout- Checkout startpurchase- Transactions- Custom events specific to your business
3.3 Create Form Submission Event
Action: Track form submissions as events
- In GTM, create new trigger:
- Type: Form Submission
- Name: "Form Submission - All Forms" (or specific forms)
- Triggering: All Forms (or Page URL contains /contact)
- Check "Wait for Tags" and "Enable validation"
- Create new tag:
- Type: GA4 Event
- Name: "GA4 - Form Submit"
- Configuration Tag: Select your GA4 config tag
- Event Name:
generate_leadorform_submit - Event Parameters (optional):
- form_id: {{Form ID}}
- form_name: {{Form Classes}} or custom variable
- Triggering: Form Submission trigger created above
- Save and publish
Verify:
- Use Preview mode, submit form
- Check DebugView shows
generate_leadevent with parameters - Verify Real-Time shows event
Notes:
- Test with all forms on your site
- AJAX forms may need custom JavaScript tracking
- Multi-step forms - track each step or just final submission
- Never capture form field values (PII risk)
3.4 Create Button Click Events
Action: Track important button clicks
- In GTM, create trigger:
- Type: Click - All Elements
- Name: "Click - CTA Button"
- Fire on: Some Clicks
- Condition: Click Text contains "Get Started" (or appropriate selector)
- Create tag:
- Type: GA4 Event
- Name: "GA4 - CTA Click"
- Event Name:
click_ctaorbutton_click - Parameters:
- button_text: {{Click Text}}
- button_location: {{Page Path}}
- Triggering: CTA Button trigger
- Save and publish
Verify:
- Preview mode, click buttons
- DebugView shows events
- Parameters capture correct info
Notes:
- Be selective - don't track every click
- Focus on conversion-oriented clicks
- Use Click Classes, Click ID, or Click Text to target specific buttons
- May need custom data-attributes for precise targeting
3.5 Create Outbound Link Click Event
Action: Track clicks to external websites
- Usually auto-tracked if Enhanced Measurement enabled (see Phase 4)
- If custom tracking needed:
- GTM trigger: Click - All Elements
- Fire on: Click URL does NOT contain yoursite.com
- Tag: GA4 Event
- Event name:
click(standard) oroutbound_click - Parameters:
link_url: {{Click URL}}
Verify:
- Click link to external site
- DebugView shows event with correct URL
Notes:
- Check if Enhanced Measurement already tracking this (prevents duplicate)
- Useful for affiliate links, resource links, partner links
- Can segment by destination domain
3.6 Create File Download Event
Action: Track downloads of PDFs, docs, etc.
- Usually auto-tracked if Enhanced Measurement enabled
- If custom tracking needed:
- GTM trigger: Click - All Elements
- Fire on: Click URL matches RegEx
\.(pdf|doc|docx|xls|xlsx|zip)$ - Tag: GA4 Event
- Event name:
file_download(standard) - Parameters:
file_name: {{Click URL}}
Verify:
- Click download link
- DebugView shows
file_downloadevent
Notes:
- Adjust file extensions regex for your needs
- Check Enhanced Measurement first
- Useful for tracking whitepaper downloads, resource downloads
3.7 Create Video Engagement Event (if applicable)
Action: Track YouTube video engagement
- Usually auto-tracked if Enhanced Measurement enabled (YouTube only)
- For custom video players:
- Requires JavaScript to track play, pause, completion
- Push to dataLayer on video events
- GTM trigger on dataLayer event
- GA4 event tag:
video_start,video_progress,video_complete
Verify:
- Play video to 25%, 50%, 75%, 100%
- DebugView shows progress events
Notes:
- Enhanced Measurement handles YouTube automatically
- Vimeo, Wistia need custom implementation
- Track video title and percent watched
3.8 Mark Events as Conversions
Action: Designate important events as conversions
- Go to Admin > Property > Events
- Wait for your events to appear (may take 24 hours after first event fire)
- Toggle "Mark as conversion" for:
generate_lead(form submissions)purchase(e-commerce)sign_up(newsletter/account)- Any other conversion events
- Save
Verify: Events show "Conversion" toggle as ON
Notes:
- Only mark true conversions (business value events)
- Limit to <30 conversions per property (best practice)
- Can retroactively mark as conversion (applies to historical data)
- These appear in Conversions reports and Google Ads
3.9 Create Custom Event Parameters (if needed)
Action: Add custom parameters to capture additional context
- In GTM, when creating event tags:
- Add Event Parameters
- Parameter name: custom_parameter_name
- Value: {{Variable}} or static value
- Common parameters:
value- Monetary value (for conversions)currency- Currency code (USD, EUR)user_type- Customer segmentcontent_category- Page/content category
Verify:
- DebugView shows events with custom parameters
- Parameters captured correctly
Notes:
- Limit to 25 parameters per event
- Use lowercase with underscores
- Parameters under 40 characters
- Register custom parameters in GA4 if you want to use in reporting (Admin > Custom Definitions)
3.10 Register Custom Dimensions (if using custom parameters)
Action: Register custom parameters as dimensions for reporting
- Go to Admin > Property > Custom Definitions > Create Custom Dimension
- For each custom parameter you want in reports:
- Dimension name: User-friendly name (e.g., "Content Category")
- Scope: Event (usually) or User
- Parameter: Select your custom parameter name
- Click Save
- Repeat for each custom parameter
Verify: Custom dimensions appear in dimension list
Notes:
- Free GA4 allows 50 event-scoped and 25 user-scoped custom dimensions
- Must register to use in reports and explorations
- Can't retroactively create (only applies to future data)
- Name clearly for report users
Phase 4: Enhanced Measurement Configuration (7 Checkpoints)
4.1 Review Enhanced Measurement Settings
Action: Audit what Enhanced Measurement is tracking
- Go to Admin > Property > Data Streams > [your stream]
- Click "Enhanced measurement" gear icon
- Review each option:
- Page views (always on, can't disable)
- Scrolls (90% scroll depth)
- Outbound clicks
- Site search
- Video engagement (YouTube)
- File downloads
Verify: Settings match your tracking needs
Notes:
- Enhanced Measurement is automatic event tracking
- Enabled by default - convenient but check what you need
- Can disable individual options if they create noise
- Some enhanced events may duplicate custom tracking (check!)
4.2 Configure Site Search Tracking
Action: Set up automatic site search tracking
- In Enhanced Measurement settings
- Click gear icon next to "Site search"
- Add search query parameters (e.g.,
q,search,query,s) - Check "show advanced settings" if needed
- Save
Verify:
- Perform site search
- DebugView shows
view_search_resultsevent - Event parameter
search_termcaptures query
Notes:
- Check your site's URL when searching (e.g., /search?q=analytics)
- The "q" is your query parameter
- Can add multiple parameters (different search forms)
- Disable if you have custom search tracking
4.3 Configure Scroll Tracking
Action: Decide if you want 90% scroll tracking
- In Enhanced Measurement settings
- Toggle scroll tracking on or off
- Default: fires
scrollevent when user reaches 90% of page
Verify:
- Scroll to bottom of long page
- DebugView shows
scrollevent
Notes:
- Useful for measuring content engagement
- Can be noisy for short pages
- Consider disabling if you want custom scroll depth tracking (e.g., 25%, 50%, 75%)
4.4 Configure File Download Tracking
Action: Set up automatic file download tracking
- In Enhanced Measurement settings
- Click gear icon next to "File downloads"
- Review file extensions tracked (default: pdf, xlsx, docx, txt, rtf, csv, exe, key, pps, ppt, 7z, pkg, rar, gz, zip, avi, mov, mp4, mpeg, wmv, midi, mp3, wav, wma)
- Add additional extensions if needed
- Save
Verify:
- Click download link
- DebugView shows
file_downloadevent file_extensionandfile_nameparameters populated
Notes:
- Covers most common file types by default
- Add industry-specific files (e.g., .dwg for CAD, .psd for design)
- Disable if you have custom download tracking
4.5 Configure Outbound Click Tracking
Action: Set up automatic outbound link tracking
- In Enhanced Measurement settings
- Toggle "Outbound clicks" on
- Automatically tracks clicks to external domains
Verify:
- Click link to external site
- DebugView shows
clickevent link_domainandlink_urlparameters populatedoutboundparameter = true
Notes:
- Automatically excludes links to your own domain
- Cross-domain configured sites won't show as outbound
- Useful for tracking partner links, resources, social links
4.6 Configure Video Engagement Tracking
Action: Set up automatic YouTube video tracking
- In Enhanced Measurement settings
- Toggle "Video engagement" on
- Automatically tracks YouTube embedded videos
Events tracked:
video_start- Video play beginsvideo_progress- Reaches 10%, 25%, 50%, 75% watchedvideo_complete- Video finishes
Verify:
- Play YouTube video on your site
- DebugView shows video events
- Parameters include
video_title,video_url,video_percent
Notes:
- Only works for YouTube embeds (not Vimeo, Wistia, self-hosted)
- Must be embedded via iframe
- For other video platforms, need custom tracking
4.7 Disable Unwanted Enhanced Measurement Events
Action: Turn off enhanced measurement events you don't need
- Review each toggle in Enhanced Measurement
- Disable any that:
- You're tracking with custom events (to avoid duplicates)
- Create too much noise/data
- Don't provide value for your use case
Verify: Only desired events appear in DebugView during testing
Notes:
- Can always re-enable later
- Disabling reduces event count (matters for free GA4 limits)
- Document what you disabled and why
Phase 5: E-commerce Tracking (7 Checkpoints - Skip if not applicable)
5.1 Plan E-commerce Implementation
Action: Document e-commerce tracking requirements
- Determine which events to track:
view_item- Product detail viewsadd_to_cart- Items added to cartremove_from_cart- Items removedview_cart- Cart page viewsbegin_checkout- Checkout initiatedadd_payment_info- Payment method addedadd_shipping_info- Shipping info addedpurchase- Transaction completedrefund- Transaction refunded (if applicable)
- Map to your e-commerce platform
- Define required parameters (product ID, name, price, quantity, etc.)
Verify: E-commerce tracking plan documented and approved
Notes:
- Use GA4 recommended e-commerce events (for compatibility)
- Coordinate with development team
- May require e-commerce platform plugin or custom code
5.2 Implement Product View Tracking
Action: Track when users view product detail pages
- Create dataLayer push on product page load:
dataLayer.push({
event: 'view_item',
ecommerce: {
items: [{
item_id: 'SKU_12345',
item_name: 'Product Name',
item_brand: 'Brand Name',
item_category: 'Category',
price: 29.99,
currency: 'USD'
}]
}
});
- In GTM:
- Trigger: Custom Event
view_item - Tag: GA4 Event
view_item - Pass ecommerce object
- Trigger: Custom Event
- Publish
Verify:
- View product page
- DebugView shows
view_itemwith items array - All parameters populated correctly
Notes:
- Requires developer to add dataLayer push
- Test with multiple products
- Verify prices, IDs match actual products
5.3 Implement Add to Cart Tracking
Action: Track when users add products to cart
- Add dataLayer push on "Add to Cart" button click:
dataLayer.push({
event: 'add_to_cart',
ecommerce: {
items: [{
item_id: 'SKU_12345',
item_name: 'Product Name',
price: 29.99,
quantity: 1
}]
}
});
- GTM tag for
add_to_cartevent - Publish
Verify:
- Add product to cart
- DebugView shows
add_to_cartevent - Quantity and price correct
Notes:
- Track both initial add and quantity increases
- Handle AJAX cart additions
- Test across different product types
5.4 Implement Checkout Begin Tracking
Action: Track when users start checkout process
- Add dataLayer push on checkout page load or button click:
dataLayer.push({
event: 'begin_checkout',
ecommerce: {
items: [
// Array of all items in cart
]
}
});
- GTM tag for
begin_checkout - Publish
Verify:
- Start checkout
- DebugView shows
begin_checkoutwith full cart contents
Notes:
- Fire once per checkout session (not on every step)
- Include all cart items
- Capture cart value
5.5 Implement Purchase Tracking (Critical!)
Action: Track completed transactions
- Add dataLayer push on order confirmation page:
dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: 'ORD-123456',
value: 79.99,
tax: 6.40,
shipping: 5.00,
currency: 'USD',
items: [
{
item_id: 'SKU_12345',
item_name: 'Product Name',
price: 29.99,
quantity: 2
}
]
}
});
- GTM tag for
purchaseevent - Mark as conversion in GA4
- Publish
Verify:
- Complete test transaction
- DebugView shows
purchaseevent - Revenue, transaction ID, items all correct
- Event appears in Conversions report (next day)
Critical checks:
- Transaction ID is unique (prevents duplicate counting)
- Revenue matches order total exactly
- Currency is correct
- Tax and shipping included if needed
- Items array includes all products
Notes:
- Most important e-commerce event!
- Test extensively before going live
- Verify revenue matches your actual sales
- Never fire multiple times per order (use unique transaction ID)
5.6 Link E-commerce Platform (if applicable)
Action: Connect Shopify, WooCommerce, or other platform
- For Shopify: Install GA4 app from Shopify App Store
- For WooCommerce: Use plugin (e.g., GA4 for WooCommerce)
- For custom platform: Implement manual tracking (above)
- Configure app settings with Measurement ID
- Test all e-commerce events
Verify:
- All e-commerce events fire correctly
- Revenue data matches platform
- Product data populates properly
Notes:
- Apps/plugins simplify implementation
- May still need customization for full tracking
- Verify app is actively maintained and compatible
5.7 Validate E-commerce Revenue
Action: Confirm revenue in GA4 matches actual sales
- Run test transactions (multiple)
- Wait 24-48 hours for reports to populate
- Compare:
- GA4 Monetization > E-commerce Purchases report
- Your e-commerce platform revenue report
- Same date range
- Investigate any discrepancies >5%
Verify: GA4 revenue within 5% of actual revenue
Common discrepancies:
- Refunds not tracked
- Test orders included
- Timezone differences
- Tax/shipping calculation differences
- Duplicate transaction IDs (same order counted twice)
Notes:
- This is your validation that e-commerce tracking works
- Essential before relying on GA4 for business decisions
- Re-check monthly as ongoing validation
Phase 6: Integration & Audiences (6 Checkpoints)
6.1 Verify Google Ads Conversion Import
Action: Import GA4 conversions to Google Ads
- In Google Ads, go to Tools > Measurement > Conversions
- Click "+" New Conversion Action
- Select "Import" > "Google Analytics 4 properties" > "Web"
- Select your GA4 property
- Choose conversions to import (select your key conversion events)
- Import and save
Verify:
- Conversions appear in Google Ads
- Status shows "Recording conversions"
- Check conversion count matches GA4
Notes:
- Required to use GA4 conversions for bidding
- Can import multiple conversion types
- Data appears in Google Ads within 24 hours
- Re-import if you add new conversion events
6.2 Set Up Facebook Conversions API (if applicable)
Action: Integrate GA4 with Meta for server-side conversion tracking
- Use a CAPI integration tool or custom server endpoint
- Send GA4 conversion events to Meta
- Verify in Meta Events Manager
Verify:
- Events show in Meta Events Manager
- Both pixel (browser) and CAPI (server) events visible
- Match rate is acceptable
Notes:
- Helps recover conversions lost to iOS 14+ privacy changes
- Requires technical implementation or tool like Zapier, Segment
- Beyond basic GA4 setup but valuable for Facebook advertisers
6.3 Create Basic Audiences
Action: Build foundational audiences for remarketing
- Go to Admin > Property > Audiences
- Click "New Audience"
- Create these starter audiences:
- All Users - Preconfigured, just verify it exists
- Purchasers - Users who triggered
purchaseevent - Cart Abandoners - Added to cart but didn't purchase
- Engaged Users - Session duration > 60 seconds or multiple pages
- Configure membership duration (30, 60, 90 days)
- Save each audience
Verify:
- Audiences appear in list
- Status shows "Eligible" (may take 24-48 hours to start populating)
- Shared to linked Google Ads account
Notes:
- Audiences require 24-48 hours to build
- Must meet minimum size for advertising (typically 100 users)
- Create more specific audiences as needed for campaigns
6.4 Set Up User ID Tracking (if applicable)
Action: Implement User ID for cross-device tracking
- Requires login system with unique user IDs
- Add User ID to dataLayer when user logs in:
gtag('set', 'user_id', 'USER_12345');
- Or in GTM:
- Variable: Data Layer Variable
user_id - In GA4 Config tag, Fields to Set:
user_id= {{user_id}}
- Variable: Data Layer Variable
- Publish
Verify:
- Log in to site
- DebugView shows
user_idparameter on events - Different devices/sessions show as same user
Notes:
- Only for logged-in users
- Don't use PII (email) - use hashed or system ID
- Enables cross-device reporting
- Required for accurate returning user metrics
6.5 Set Up Custom User Properties (optional)
Action: Define user-level properties for segmentation
- Common user properties:
- Customer status (lead, customer, VIP)
- Account type (free, paid, enterprise)
- First order date
- Lifetime value tier
- In GTM, add to GA4 Config tag:
- User Properties: Add property name and value
- Or via gtag:
gtag('set', 'user_properties', {
account_type: 'premium'
});
Verify:
- DebugView shows user properties on events
- Can segment reports by user property
Notes:
- User properties persist across sessions
- Use for permanent or long-lasting user attributes
- Register in GA4 Admin > Custom Definitions > Custom User Property
6.6 Create Key Path Exploration
Action: Build exploration to analyze user journeys
- Go to Explore
- Select "Path Exploration" template
- Configure:
- Starting point: Landing page or first event
- Steps: Show next 3-5 steps
- Segment: All users or specific audience
- Save exploration as "User Journey Analysis"
Verify: Exploration shows logical user paths through your site
Notes:
- Use to understand how users navigate
- Identify drop-off points
- Inform UX improvements
- Save for ongoing analysis
Phase 7: Reporting & Validation (8 Checkpoints)
7.1 Review Standard Reports
Action: Familiarize yourself with GA4 report structure
- Open Reports section
- Navigate through:
- Realtime - Current activity
- Acquisition - How users find you
- Engagement - What users do
- Monetization - Revenue and e-commerce
- Retention - Returning users
- Demographics - User age, gender, location
- Tech - Device, browser, OS
- Verify data appears in each section (may take 24-48 hours)
Verify: All report sections have data after 48 hours
Notes:
- Different from Universal Analytics report structure
- Some reports require minimum data threshold
- Demographics require Google Signals enabled
7.2 Customize Reports Overview
Action: Add important reports to overview page
- Go to Reports > Overview
- Click "Customize report" (pencil icon)
- Add cards for:
- Conversions by source
- Key events
- E-commerce revenue (if applicable)
- Engaged sessions
- Drag to arrange
- Save
Verify: Overview page shows your key metrics at a glance
Notes:
- Customize for your business needs
- Overview is first page stakeholders see
- Update as priorities change
7.3 Create Key Event Report
Action: Build report focused on your conversion events
- Go to Explore
- Select "Free Form" template
- Dimensions: Event name, Source/Medium
- Metrics: Event count, Conversions
- Filters: Event name exactly matches your conversion events
- Save as "Conversion Events Summary"
Verify: Report shows all key conversion events with attribution
Notes:
- Quick view of all conversions
- Compare performance by source
- Share with stakeholders
7.4 Set Up Analytics Annotation
Action: Add annotations for major site changes
- Currently GA4 doesn't have annotation feature (!)
- Workaround: Maintain external changelog
- Create spreadsheet or doc with:
- Date
- Change description
- Expected impact
- Reference when reviewing reports
Verify: Changelog created and accessible to team
Notes:
- Helps explain unusual data patterns
- Document campaigns, site changes, tracking updates
- Critical for historical analysis
7.5 Configure Conversion Attribution Settings
Action: Review and set attribution model
- Go to Admin > Property > Attribution Settings
- Review:
- Reporting attribution model: Default is data-driven (or last click if not enough data)
- Lookback window: Default 90 days for conversions, 30 for ad clicks
- Adjust if needed for your business
- Click Save
Verify: Settings match your sales cycle and attribution philosophy
Notes:
- Data-driven attribution requires sufficient conversion volume
- Shorter sales cycle = shorter lookback window
- Can compare models in Advertising > Attribution
7.6 Validate Data Accuracy
Action: Comprehensive data validation check
- Compare GA4 to other sources:
- Users/Sessions: Ballpark check vs. previous analytics (if migrating)
- Conversions: Match to CRM leads, e-commerce orders
- Revenue: Match to actual sales (within 5%)
- Traffic sources: Cross-reference ad platform metrics
- Document any discrepancies >10%
- Investigate and resolve
Verify: GA4 data aligns with other business systems within acceptable variance
Common acceptable variances:
- Sessions: GA4 counts differently than UA (okay if directionally similar)
- Conversions: 5-10% difference from ad platforms (attribution windows differ)
- Revenue: <5% difference from e-commerce platform
Red flags:
- 50%+ discrepancies (indicates tracking issue)
- Missing conversion types
- Zero revenue when sales occurred
- All traffic showing as direct (UTM tracking broken)
7.7 Create Monthly Report Template
Action: Build standardized monthly report
- Use Data Studio/Looker Studio or manual template
- Include:
- Executive summary (KPIs)
- Traffic overview (users, sessions, sources)
- Conversion performance
- Revenue (if applicable)
- Month-over-month comparison
- Key insights and recommendations
- Save as template
- Schedule monthly generation
Verify: Report template pulls GA4 data correctly
Notes:
- Automate if possible (Looker Studio)
- Share with stakeholders monthly
- Adjust template based on feedback
7.8 Document Your GA4 Setup
Action: Create comprehensive documentation
- Document in wiki, Google Docs, or similar:
- Property details: Measurement ID, data stream info
- Events catalog: All events, descriptions, when they fire, parameters
- Conversions: What's marked as conversion and why
- Custom dimensions/metrics: Name, scope, purpose
- GTM setup: Container ID, tags, triggers (or export container)
- Integrations: Connected platforms, audiences
- Access: Who has access and roles
- Change log: Major changes to implementation
- Make accessible to team
Verify: New team member can understand your setup from documentation
Notes:
- Documentation often skipped but critical
- Prevents "tribal knowledge" problem
- Essential for troubleshooting
- Update when making changes
Post-Implementation Checklist
Week 1: Monitor Closely
- Check DebugView daily
- Review Real-Time reports multiple times per day
- Test all conversion events manually
- Watch for errors or anomalies
Week 2-4: Validation Period
- Compare data week-over-week for consistency
- Cross-reference conversions with CRM/sales
- Verify revenue accuracy (e-commerce)
- Run test transactions and verify tracking
- Gather feedback from report users
Month 2-3: Optimization
- Refine events based on data value
- Remove noisy/unused events
- Add missing conversion events
- Build additional audiences
- Create custom explorations for specific questions
Ongoing: Maintenance
- Monthly data quality check
- Quarterly full audit (use our Marketing Data Audit Checklist)
- Document changes
- Review and update custom reports
- Train new team members
Troubleshooting Common Issues
No Data Showing in Reports
Check:
- GTM container published (not just saved)?
- GA4 tag firing on all pages (use Tag Assistant)?
- Measurement ID correct in GTM?
- Wait 24-48 hours for standard reports (use Real-Time for immediate validation)
- Ad blocker disabled for testing?
Fix:
- Republish GTM container
- Verify Measurement ID
- Check GTM preview mode
Events Not Firing
Check:
- Event visible in DebugView?
- Trigger conditions correct in GTM?
- Page/form actually triggering the event?
- JavaScript errors on page preventing dataLayer push?
Fix:
- Use GTM Preview mode to debug
- Check browser console for errors
- Verify trigger conditions
- Test in different browsers
Conversions Not Marked/Showing
Check:
- Event marked as conversion in Admin > Events?
- Event has fired at least once in past 24 hours?
- Correct event name (case-sensitive)?
Fix:
- Wait 24 hours after first event fire, then mark as conversion
- Verify event name exactly matches
Revenue Data Wrong
Check:
- Currency correct in purchase event?
- Decimal point in right place? (29.99 not 2999)
- Revenue field matches total order value?
- Transaction ID unique per order?
Fix:
- Review e-commerce implementation
- Check dataLayer values
- Test with small known transaction amount
Duplicate Events/Page Views
Check:
- Multiple GA4 tags firing (direct code + GTM)?
- Single-page app (SPA) pushing page views manually + automatic?
- GTM trigger firing multiple times?
Fix:
- Remove duplicate tracking code
- Disable automatic page_view for SPAs
- Adjust GTM trigger conditions
Cross-Domain Tracking Not Working
Check:
- All domains listed in cross-domain settings?
- Linker parameter present in URL (check
?_gl=)? - Same GA4 property ID on all domains?
Fix:
- Add missing domains
- Verify GTM linker configuration
- Test cross-domain navigation in DebugView
Data Sampling in Reports
Check:
- Large date range or complex exploration?
- High-traffic site exceeding thresholds?
Fix:
- Reduce date range
- Simplify query
- Use BigQuery export for unsampled data
- Upgrade to GA4 360 (enterprise paid version)
Frequently Asked Questions
How long does GA4 implementation take?
Time estimates:
- Basic website: 4-6 hours (phases 1-4, 6-7)
- With e-commerce: 8-12 hours (add phase 5)
- Complex site: 16-24 hours (multiple domains, custom tracking)
Factors that increase time:
- Custom event tracking requirements
- E-commerce implementation
- Integration with CRM/marketing automation
- Legacy UA data migration considerations
- Custom reporting needs
Recommendation: Block dedicated time rather than spreading over weeks.
Should I keep Universal Analytics running while setting up GA4?
Yes! Run both in parallel during migration.
Benefits:
- Compare data to validate GA4 accuracy
- Maintain historical continuity
- Fall back to UA if GA4 issues arise
- Learn GA4 reporting without pressure
Timeline:
- Minimum: 1 month parallel tracking
- Recommended: 3 months
- Universal Analytics stopped processing data July 1, 2023 (standard) or July 1, 2024 (360)
Note: If you're reading this after UA sunset, you can't run parallel, but use historical UA data for validation.
Do I need Google Tag Manager or can I add GA4 code directly?
GTM is strongly recommended but not required.
Use GTM if:
- You want to add/edit tracking without developer dependency
- You plan to add other marketing tags (Facebook Pixel, etc.)
- You need custom event tracking
- You want easier long-term maintenance
Direct implementation is okay if:
- Very simple site with minimal tracking needs
- You have developer resources for all changes
- You're only using basic page view tracking
Verdict: 95% of implementations should use GTM.
How do I migrate historical data from Universal Analytics?
Short answer: You don't.
GA4 and UA are different platforms - no direct migration path for historical data.
Options:
- Export UA data to BigQuery or CSV before access is lost
- Keep UA property access (read-only) for historical reference
- Use Supermetrics or similar to extract UA data to data warehouse
- Accept fresh start - Many businesses do this
Recommendation: Export critical historical data before UA access ends, then start fresh with GA4.
What's the difference between events and conversions in GA4?
Events: Any tracked user interaction (page view, click, form submit, etc.) Conversions: Events you've marked as having business value
Key points:
- All conversions are events, but not all events are conversions
- Mark events as conversions in Admin > Events
- Conversions appear in conversion reports and Google Ads
- Limit to important events (not every click)
Example:
page_view= event (not conversion)purchase= event marked as conversionform_submit= event marked as conversion
How many custom events can I create?
GA4 limits (free version):
- 500 distinct event names per property
- 500 total custom dimensions (event + user scoped)
- 50 custom metrics
Best practices:
- Don't approach limits - 20-50 custom events is typical
- Use event parameters instead of creating many similar events
- Example: One
button_clickevent withbutton_nameparameter (not separate events per button)
Can I track across mobile app and website?
Yes, using App + Web property.
Setup:
- Create GA4 property
- Add web data stream (for website)
- Add iOS data stream (for iOS app)
- Add Android data stream (for Android app)
- Implement Firebase SDK in apps
- Use same event names across platforms
Benefits:
- Unified user view across devices
- Cross-platform audiences
- Complete customer journey
Note: Requires mobile development resources for app implementation.
How do I handle staging/development environments?
Option 1: Separate GA4 Properties (Recommended)
- Create "Company - Production" property for live site
- Create "Company - Staging" property for dev/staging
- Use different Measurement IDs
- Keep test data completely separate
Option 2: Single Property with Filters
- Use one property
- Configure internal traffic filter for dev traffic
- Filter by hostname (staging.yoursite.com vs. www.yoursite.com)
- Risk: Harder to fully separate data
Verdict: Separate properties is cleaner and recommended.
What reports are different from Universal Analytics?
Major differences:
- No Bounce Rate (replaced with Engagement Rate)
- No Views (property level only, use filters/segments instead)
- Events are fundamental (not hits/sessions/pageviews hierarchy)
- Explorations replace Custom Reports
- Machine learning insights (anomaly detection, churn prediction)
- Different attribution (data-driven by default)
Recommendation: Don't try to recreate UA reports exactly. Learn GA4's structure and embrace the differences.
How do I create goals in GA4?
GA4 doesn't have "goals" - it has "conversions."
To create a conversion:
- Create/implement an event for the goal action
- Wait 24 hours for event to appear in Admin > Events
- Toggle "Mark as conversion" on the event
- Event now appears in conversions reports
Migrating UA goals:
- Map each UA goal to a GA4 event
- Implement the event
- Mark as conversion
- No automatic migration
Can I exclude internal traffic after data is collected?
No - exclusion happens at collection time, not retroactively.
Best practices:
- Set up internal traffic filter BEFORE going live
- Use "Test" data filter state initially (tags but doesn't exclude)
- Verify internal traffic is tagged correctly
- Switch filter to "Active" to actually exclude
- Can't remove already-collected internal traffic from reports
Lesson: Set up filters early!
Next Steps After Implementation
Immediate (First Week)
- Monitor Real-Time and DebugView daily
- Test all conversion events manually
- Verify data appearing in standard reports
- Share access with key stakeholders
Short-Term (First Month)
- Create custom explorations for key questions
- Build audiences for remarketing
- Set up automated reporting (Looker Studio)
- Train team on GA4 interface
Medium-Term (First Quarter)
- Validate data accuracy against other systems
- Optimize event tracking (remove noise, add gaps)
- Analyze user journeys and optimize UX
- Iterate on reports based on stakeholder feedback
Long-Term (Ongoing)
- Quarterly data quality audits
- Expand custom tracking as needs evolve
- Leverage machine learning insights
- Advanced analysis (cohorts, predictive metrics)
- BigQuery integration for advanced analytics
Download Your Checklist
What You'll Get
Download the complete GA4 Implementation Checklist package:
- Printable PDF checklist - All 58 checkpoints with checkboxes
- Excel/Google Sheets tracker - Track progress, assign owners, note issues
- GTM container template - Pre-configured tags for common events
- Event naming spreadsheet - Plan and document your events
- Video walkthrough series - Step-by-step implementation guide (3 hours)
- Troubleshooting guide - Solutions to common implementation issues
Bonus Resources Included
- UA to GA4 event mapping template - Migrate your goals
- GA4 vs UA comparison guide - Understand the differences
- Looker Studio dashboard template - Pre-built reports
- Weekly office hours invitation - Get help from experts
Ready to Implement GA4 the Right Way?
Stop worrying about missing data or broken tracking. Download the GA4 Implementation Checklist and set up Google Analytics 4 with confidence.
[Download Free Checklist]
What happens next:
- Instant download of implementation package
- Email course: "GA4 Implementation in 7 Days" (daily lessons)
- Access to GA4 implementation community
- Invitation to live Q&A sessions
Questions about GA4 implementation? Book a free 30-minute consultation with our analytics team, or explore our GA4 guides for more resources.