# Using the Google Analytics Provider in Tanstack Start Supabase Turbo

> Add Google Analytics 4 (GA4) to your MakerKit application for page views, user tracking, and conversion measurement.

*Canonical: https://makerkit.dev/docs/tanstack-supabase/analytics/google-analytics-provider*

---

Google Analytics 4 (GA4) provides web analytics focused on marketing attribution, conversion tracking, and audience insights. Use it when your marketing team needs Google's ecosystem for ad optimization and reporting.

## Prerequisites

Before starting, you need:

- A Google Analytics 4 property ([create one here](https://analytics.google.com/))
- Your GA4 Measurement ID (format: `G-XXXXXXXXXX`)

Find your Measurement ID in GA4: **Admin > Data Streams > Select your stream > Measurement ID**.

## Installation

Install the Google Analytics plugin using the MakerKit CLI:

```bash
npx @makerkit/cli@latest plugins add google-analytics
```

Our codemod will wire up the plugin in your project, so you don't have to do anything manually. Please review the changes with `git diff`.

Please add your Measurement ID to environment variables:

```bash {% title="apps/web/.env.local" %}
VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX
```

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `VITE_GA_MEASUREMENT_ID` | Yes | Your GA4 Measurement ID |
| `VITE_GA_DISABLE_PAGE_VIEWS_TRACKING` | No | Set to `true` to disable automatic page view tracking |
| `VITE_GA_DISABLE_LOCALHOST_TRACKING` | No | Set to `true` to disable tracking on localhost |

### Development Configuration

Disable localhost tracking to avoid polluting your analytics during development:

```bash {% title=".env.local" %}
VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX
VITE_GA_DISABLE_LOCALHOST_TRACKING=true
```

## Verification

After configuration, verify the integration:

1. Open your application in the browser
2. Open Chrome DevTools > Network tab
3. Filter by `google-analytics` or `gtag`
4. Navigate between pages and confirm requests are sent
5. Check GA4 Realtime reports to see your session

## Using with Other Providers

Google Analytics can run alongside other providers. Events dispatch to all registered providers:

```typescript {% title="packages/analytics/src/index.ts" %}
import { createGoogleAnalyticsService } from '@kit/google-analytics';
import { createPostHogAnalyticsService } from '@kit/posthog/client';

import { createAnalyticsManager } from './analytics-manager';

export const analytics = createAnalyticsManager({
  providers: {
    'google-analytics': createGoogleAnalyticsService,
    posthog: createPostHogAnalyticsService,
  },
});
```

This setup is common when marketing uses GA4 for attribution while product uses PostHog for behavior analysis.

## Tracked Events

With the default configuration, Google Analytics receives:

- **Page views**: Automatically tracked on route changes
- **User identification**: When `analytics.identify()` is called
- **Custom events**: All events passed to `analytics.trackEvent()`

Events from the App Events system (user.signedUp, checkout.started, etc.) are forwarded to GA4 through the analytics mapping.

## GDPR Considerations

Google Analytics sets cookies and requires user consent in the EU. Integrate with the [Cookie Banner component](/docs/tanstack-supabase/components/cookie-banner) to manage consent:

```typescript
import { useCookieConsent, ConsentStatus } from '@kit/ui/cookie-banner';
import { analytics } from '@kit/analytics';
import { useEffect } from 'react';

function AnalyticsGate({ children }) {
  const { status } = useCookieConsent();

  useEffect(() => {
    if (status === ConsentStatus.Accepted) {
      // GA is initialized automatically when consent is given
      // You may want to delay initialization until consent
    }
  }, [status]);

  return children;
}
```

Consider using [Umami](umami-analytics-provider) for cookie-free, GDPR-compliant analytics.

## Troubleshooting

### Events not appearing in GA4

- Verify your Measurement ID is correct
- Check that `VITE_GA_DISABLE_LOCALHOST_TRACKING` is not `true` in production
- GA4 has a delay of up to 24-48 hours for some reports. Use Realtime for immediate verification

### Duplicate page views

- Ensure you have not called `trackPageView` manually. MakerKit tracks page views automatically

### Ad blockers

- Ad blockers often block Google Analytics. Consider using a proxy or server-side tracking for critical metrics

{% faq
   title="Frequently Asked Questions"
   items=[
     {"question": "Does MakerKit support Universal Analytics?", "answer": "No. Universal Analytics was sunset by Google in July 2023. MakerKit only supports Google Analytics 4 (GA4)."},
     {"question": "Can I use Google Tag Manager instead?", "answer": "Yes, but you would need to create a custom analytics provider. The built-in plugin uses gtag.js directly."},
     {"question": "How do I track conversions?", "answer": "Use analytics.trackEvent() with your conversion event name. Configure the event as a conversion in GA4 Admin > Events > Mark as conversion."},
     {"question": "Is server-side tracking supported?", "answer": "No. The Google Analytics plugin is client-side only. Use the Measurement Protocol API directly if you need server-side GA4 tracking."}
   ]
/%}

## Next Steps

- [Learn about Analytics and Events](analytics-and-events) for custom event tracking
- [Add PostHog](posthog-analytics-provider) for product analytics
- [Create a custom provider](custom-analytics-provider) for other services
