🔴 The Critical 15 Checklist

I’ve ranked these by financial impact. Start from #1 and work your way down.

TIER 1: Fix These First (Your Wallet is Bleeding) 💸

1. Data Retention Set to 14 Months

The Problem: GA4’s default data retention is only 2 months. After that, your user-level and event-level data is DELETED. Forever.

You can’t:

  • Build audiences from old data

  • Create retroactive cohorts

  • Analyze historical user behavior

  • Run explorations on data older than 2 months

The Fix:

1. Go to Admin → Data Settings → Data Retention
2. Change from "2 months" to "14 months"
3. Click Save

Time: 30 seconds Impact: Massive - this affects ALL future analysis

⚠️ Warning: You can’t recover data that’s already been deleted. Fix this NOW.

2. Conversions Are Actually Marked as “Key Events”

The Problem: You might be tracking purchase/lead events, but if they’re not marked as “key events” (formerly conversions), they:

  • Won’t import to Google Ads

  • Won’t trigger Smart Bidding optimization

  • Won’t appear in conversion reports

The Fix:

1. Admin → Events
2. Find your conversion event (purchase, generate_lead, sign_up)
3. Toggle "Mark as key event" to ON
4. Repeat for all conversion events

Pro Tip: You can have up to 30 key events per property. Use them wisely.

Events to mark as key events:

  • purchase (e-commerce)

  • generate_lead (form submissions)

  • sign_up (account creation)

  • begin_checkout (high intent)

  • Custom conversion events specific to your business

3. Internal Traffic Filter is ACTIVE

The Problem: Your team’s browsing, testing, and QA work is being counted as real traffic. This inflates:

  • Session counts

  • Pageview numbers

  • Conversion rates (when you test checkouts)

  • Engagement metrics

The Fix:

1. Admin → Data Streams → [Your Stream] → Configure tag settings
2. Show more → Define internal traffic
3. Click "Create" and add your IP addresses:
   - traffic_type: internal
   - IP address: matches regex: YOUR_IP_HERE
4. Go to Admin → Data Settings → Data Filters
5. Find "Internal Traffic" filter
6. Change from "Testing" to "Active"

How to Find Your IP:

  • Google “what is my IP”

  • Add office IPs, home IPs, VPN IPs

Time: 5 minutes Impact: Immediately improves data quality

4. Google Ads Account Linked + Conversions Importing

The Problem: If GA4 isn’t linked to Google Ads:

  • Your conversions don’t import

  • Smart Bidding has no conversion data

  • You can’t use GA4 audiences in campaigns

  • Attribution is completely broken

The Fix:

1. Admin → Product Links → Google Ads Links → Link
2. Choose your Google Ads account
3. Enable "Personalized advertising" if you want audiences
4. After linking, go to Google Ads:
   - Tools → Conversions → Import
   - Select GA4 property
   - Import your key events as conversions

Critical: Make sure you import as “Conversions” not “All conversions” for Smart Bidding.

5. Auto-Tagging Enabled in Google Ads

The Problem: Without auto-tagging:

  • Google Ads clicks won’t be properly attributed

  • You’ll lose conversion data

  • Smart Bidding optimization fails

The Fix:

Google Ads:
1. Settings → Account Settings
2. Auto-tagging: Turn ON
3. Check "Tag the URL that people click through from my ad"

Also set in GA4:

gtag('config', 'G-XXXXXXXXXX', {
  'allow_google_signals': true,  'allow_ad_personalization_signals': true});

TIER 2: Fix These This Week (Optimization Killers) 📉

6. Purchase Event Has Unique Transaction IDs

The Problem: Duplicate transaction IDs = duplicate revenue counting. Your revenue reports will be WILDLY inflated.

The Fix:

// BAD: Same transaction ID'transaction_id': 'ORDER_12345'// GOOD: Unique transaction ID'transaction_id': 'ORDER_' + Date.now() + '_' + Math.random()
// BETTER: Use your actual order ID from database'transaction_id': orderData.id  // e.g., "ORD_2025_12345"

How to check:

1. Reports → Monetization → Ecommerce purchases
2. Look at transaction_id column
3. If you see duplicates, you have a problem

7. Revenue Numbers Match Payment Processor

The Problem: If GA4 revenue doesn’t match Stripe/PayPal/etc:

  • Your attribution is wrong

  • You’re making decisions on bad data

  • You can’t trust your ROAS

The Fix: Do a monthly reconciliation:

Step 1: Export GA4 Revenue
- Reports → Monetization → Ecommerce purchases
- Date range: Last month
- Total revenue = $______

Step 2: Check Payment Processor
- Stripe/PayPal dashboard
- Same date range
- Total revenue = $______

Step 3: Compare
- If within 2-5% difference: OK (expected variance)
- If >5% difference: You have a tracking problem

Common causes of mismatch:

  • Refunds not tracked

  • Test transactions included

  • Currency conversion issues

  • Time zone differences

8. UTM Parameters Standardized Across All Campaigns

The Problem: Inconsistent UTM parameters = broken attribution. You’ll see:

  • “google / cpc” vs “Google / CPC” (treated as different sources)

  • “email” vs “email_campaign” vs “Email Marketing”

  • Impossible to aggregate campaign performance

The Fix: Create a UTM naming convention document:

Source (utm_source):
✅ facebook, google, linkedin, twitter
❌ Facebook, FACEBOOK, fb

Medium (utm_medium):
✅ cpc, email, social, organic
❌ paid, paid-search, PPC

Campaign (utm_campaign):
✅ q4_promo_2025
❌ Q4 Promo 2025!

Rules:
- Always lowercase
- Use underscores, not spaces
- No special characters
- Be consistent

Tool: Use a UTM builder to enforce standards

  • Create a Google Sheet with formulas

  • Use a URL builder tool

  • Train your team

9. Enhanced Measurement Configured (Not Just “On”)

The Problem: Enhanced measurement is enabled by default, but you need to REVIEW what it’s tracking. You might be:

  • Tracking irrelevant video embeds

  • Capturing unwanted file downloads

  • Missing custom site search

The Fix:

1. Admin → Data Streams → [Your Stream] → Enhanced measurement
2. Click the gear icon ⚙️
3. Review each option:

Page views: ✅ Keep ON
Scrolls: ✅ Keep ON (90% depth)
Outbound clicks: ✅ Keep ON
Site search: ⚠️ Configure search query parameter
Video engagement: ⚠️ ON only if you embed videos
File downloads: ⚠️ Review file extensions

Site Search Configuration: If you have internal search (e.g., yoursite.com/search?q=marketing):

  • Query parameter: q (or whatever yours is)

  • This enables automatic search tracking

10. No PII (Personal Identifiable Information) in Events

The Problem: Sending PII to GA4 violates:

  • Google’s Terms of Service

  • GDPR (up to €20M fines)

  • CCPA

  • Your user’s trust

Never Send to GA4:

  • Email addresses

  • Phone numbers

  • Full names

  • Social security numbers

  • Credit card info

  • Passwords (seriously, I’ve seen this)

The Fix: Audit your custom events:

// BAD: Sending emailgtag('event', 'form_submit', {
  'user_email': '[email protected]'  // ❌ NEVER DO THIS});// GOOD: Hash or use IDgtag('event', 'form_submit', {
  'user_id': 'user_abc123',  // ✅ Hashed or anonymized ID  'form_type': 'contact'});

TIER 3: Fix These Before Month-End (Missing Money) 💰

11. Conversion Values Assigned to All Key Events

The Problem: Without conversion values:

  • You can’t calculate ROAS

  • You can’t optimize for value

  • All conversions look equal (they’re not)

The Fix: Calculate your lead values:

Formula:
Lead Value = (Annual Revenue ÷ Total Customers) × Conversion Rate

Example:
- Annual Revenue: $500,000
- Total Customers: 200
- Conversion Rate: 5%
- Lead Value = ($500,000 ÷ 200) × 0.05 = $125 per lead

Then assign to events:

gtag('event', 'generate_lead', {
  'currency': 'USD',  'value': 125,  // ✅ Estimated lead value  'lead_type': 'demo_request'});gtag('event', 'sign_up', {
  'currency': 'USD',  'value': 50,  // ✅ Trial signup value  'signup_type': 'free_trial'});

12. Form Submissions Tracked as “generate_lead”

The Problem: Contact forms are KEY conversions, but many sites:

  • Don’t track them at all

  • Track them as generic “form_submit” (not a standard event)

  • Don’t assign value

The Fix:

// On form submissiondocument.getElementById('contactForm').addEventListener('submit', function(e) {
  gtag('event', 'generate_lead', {
    'currency': 'USD',    'value': 100,  // Your lead value    'form_id': 'contact_form',    'form_type': 'contact',    'form_location': 'homepage'  });});

Mark as key event:

  1. Admin → Events → Find “generate_lead”

  2. Toggle “Mark as key event”

13. Checkout Funnel Exists (E-commerce)

The Problem: Without a checkout funnel, you can’t:

  • See where users drop off

  • Identify bottlenecks

  • Optimize conversion rate

  • Calculate abandonment rate

The Fix: Create a funnel exploration:

1. Explore → Create new exploration
2. Choose "Funnel exploration"
3. Add steps:
   - Step 1: view_item (Product page)
   - Step 2: add_to_cart (Add to cart)
   - Step 3: begin_checkout (Start checkout)
   - Step 4: purchase (Complete purchase)
4. Save and review weekly

What to look for:

  • Biggest drop-off point (usually Step 2→3)

  • Cart abandonment rate

  • Device differences (mobile vs desktop)

14. Test Transactions Filtered Out

The Problem: Your test orders are counted as real revenue. You’re inflating:

  • Revenue numbers

  • Conversion rates

  • Order counts

The Fix:

Option 1: Use a test transaction ID pattern

// Test ordersif (isTestOrder) {
  gtag('event', 'purchase', {
    'transaction_id': 'TEST_' + Date.now(),  // Starts with TEST_    // ... rest of data  });}

Then create a filter in GA4:

Admin → Data Settings → Data Filters → Create filter
Parameter: transaction_id
Match type: begins_with
Value: TEST_
Action: Exclude

Option 2: Separate test environment Use a different GA4 property for staging/dev.

15. Currency Set Correctly

The Problem: If your GA4 property currency doesn’t match your actual currency:

  • Revenue reports will be wrong

  • Google Ads ROAS will be wrong

  • You’ll make bad optimization decisions

The Fix:

1. Admin → Property Settings
2. Currency: Select your currency (USD, EUR, INR, etc.)
3. ⚠️ NOTE: You can change this, but historical data won't be recalculated

Also, ALWAYS specify currency in events:

gtag('event', 'purchase', {
  'currency': 'USD',  // ✅ Always specify  'value': 99.99});

Your Week 1 Action Plan

Today (30 minutes):

  • [ ] Set data retention to 14 months

  • [ ] Mark your conversions as key events

  • [ ] Enable internal traffic filter

This Week (2 hours):

  • [ ] Link Google Ads account

  • [ ] Enable auto-tagging

  • [ ] Check for duplicate transaction IDs

  • [ ] Reconcile GA4 revenue with payment processor

Before Month-End:

  • [ ] Create UTM naming convention document

  • [ ] Review enhanced measurement settings

  • [ ] Audit events for PII

  • [ ] Assign values to all conversions

  • [ ] Set up form tracking

  • [ ] Build checkout funnel (e-commerce)

  • [ ] Filter out test transactions

  • [ ] Verify currency settings

📥 Download This Week’s Mini-Checklist

I’ve created a downloadable checklist with just these 15 critical items.

Week_1_Critical_15_Checklist.csv

Week_1_Critical_15_Checklist.csv

1.99 KBCSV File

Import it into:

  • Google Sheets

  • Excel

  • Notion

  • Your project management tool

🚀 What’s Coming Next Week

Week 2: E-commerce Tracking Masterclass

If you sell products online, next week’s edition is ESSENTIAL. I’ll cover:

  • The complete e-commerce event flow (view_item → purchase)

  • How to fix revenue attribution

  • Cart abandonment tracking

  • Product performance analysis

  • Why your revenue numbers are probably wrong

About This Series:

This is Week 1 of a 4-week GA4 Audit Series:

  • Week 1: GA4 Audit Essentials (You are here)

  • Week 2: E-commerce Tracking Masterclass

  • Week 3: Privacy-First Analytics

  • Week 4: Advanced GA4 Features

Resources Mentioned: