ga4
Configure GA4 + GTM for Next.js SaaS: funnel tracking, scroll depth, CTA clicks, conversions, feature usage.
Skill by danzam98
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/danzam98-ga4
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: frontend, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ga4
What's inside
- Skill name
ga4- Description
- Configure GA4 + GTM for Next.js SaaS: funnel tracking, scroll depth, CTA clicks, conversions, feature usage. Use when setting up analytics, tracking conversions, or implementing A/B tests.
- License
- MIT
- Instructions
- 239 lines in SKILL.md · view on GitHub
Files (6)
- SKILL.md
- AB-TESTING.md · references/
- DEBUGGING.md · references/
- EVENTS.md · references/
- FUNNEL-ANALYSIS.md · references/
- GTM-TAGS.md · references/
SKILL.md (first lines)
# GA4 + GTM for Next.js SaaS
> **Stack**: Next.js 16 App Router + @next/third-parties + Supabase Auth + GA4 + GTM (all free)
## Table of Contents
- [Quick Start](#quick-start) | [Why GTM + GA4](#why-gtm-with-ga4) | [Workflow](#workflow)
- [Funnel Events](#funnel-events) | [dataLayer Push](#datalayer-push-pattern) | [GTM Tags](#gtm-tag-configurations)
- [Sign-up Conversion](#sign-up-conversion-tracking) | [Feature Usage](#in-app-feature-usage)
- [A/B Testing](#ab-testing-no-google-optimize) | [Validation](#validation) | [References](#references)
---
## Quick Start
```tsx
// app/layout.tsx
import { GoogleTagManager } from '@next/third-parties/google'
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<GoogleTagManager gtmId="GTM-XXXXXXX" />
</body>
</html>
)
}
```
Then in GTM: Create GA4 Configuration tag with `G-XXXXXXXXXX` Measurement ID, trigger "All Pages".
## Why GTM with GA4
GTM is a **centralized hub** for all tracking. Benefits:
| Without GTM | With GTM |
|-------------|----------|
| Hardcoded analytics calls | Configure in web interface |
| Redeploy to change tracking | Update without code deploys |
| Testing in production | Preview mode before publish |
| Scattered event code | Unified dataLayer pattern |
GTM "listens" to dataLayer and routes events to GA4. Your Next.js code stays clean.
## Workflow
- [ ] 1. Create GTM container → note `GTM-XXXXXXX`
- [ ] 2. Add `<GoogleTagManager>` to root layout
- [ ] 3. Create GA4 Config tag in GTM (Measurement ID + All Pages trigger)
- [ ] 4. Publish GTM, verify in GA4 Realtime
- [ ] 5. Add funnel events (scroll, CTA, sign_up, feature_use)
- [ ] 6. Register custom parameters in GA4 Admin > Custom Definitions
- [ ] 7. Mark `sign_up` as conversion in GA4 Admin > Events
- [ ] 8. Configure User-ID for cross-session tracking (optional)
- [ ] 9. Build funnel exploration in GA4 Explore
## Funnel Events
| Step | Event | Parameters | How |
|------|-------|------------|-----|
| 1. Landing | `page_view` | (automatic) | GA4 Config tag |
| 2. Scroll | `scroll_depth` | `scroll_percent` | GTM Scroll trigger (25/50/75/90%) |
| 3. Section View | `section_view` | `section_name` | GTM Element Visibility trigger |
| 4. CTA Click | `cta_click` | `cta_text`, `cta_position` | GTM Click trigger or dataLayer |
| 5. Sign-up | `sign_up` | `method`, `user_id` | dataLayer on Supabase auth |
| 6. Feature Use | `feature_use` | `feature_name` | dataLayer on action |
**Note**: GA4 Enhanced Measurement auto-tracks scroll at 90% only. Use GTM for granular 25/50/75/90%.
## dataLayer Push Pattern
```tsx
// Declare type for TypeScript
declare global {
interface Window { dataLayer: Record<string, any>[]; }
}
// Generic push helper
function trackEvent(event: string, params: Record<string, any>) {
window.dataLayer?.push({ event, ...params });
}
// Examples
trackEvent('cta_click', { cta_text: 'Get Started', cta_position: 'hero' });
trackEvent('feature_use', { feature_name: 'export_report' });
```
## GTM Tag Configurations
### Scroll Depth (25/50/75/90%)
1. **Variables** > Built-in: Enable `Scroll Depth Threshold`, `Scroll Depth Units`, `Scroll Direction`
2. **Trigger** > Scroll Depth: Vertical, Percentages: `25,50,75,90`
3. **Tag** > GA4 Event: `scroll_depth`, param `scroll_percent` = `{{Scroll Depth Threshold}}`
### Section Visibility
Track which landing page sections users actually see (not just scroll past):
```tsx
// Add to section elements
<section className="ga-section-tracking" data-section-name="features">
{/* content */}
</section>
```
1. **Variable** > Auto-Event Variable: Element Attribute `data-section-name`
2. **Trigger** > Element Visibility: CSS `.ga-section-tracking`, 50% visible, once per element
3. **Tag** > GA4 Event: `section_view`, param `section_name` = `{{AEV - section-name}}`
### CTA Click (Two Methods)
**Method A: No-Code (GTM only)**
```html
<button class="cta-signup" data-cta_text="Sign Up" data-cta_position="hero">
Create Account
</button>
```From danzam98/claude-skills-toolkit, MIT.
More from danzam98/claude-skills-toolkit
- 0.502score
ab-testing
danzam98
Build home-rolled A/B testing platform for Next.js 16 SaaS.
SkillCFreshness: C★ 1Claude Code +9 - 0.437score
beads-workflow
danzam98
Convert markdown plans into beads with dependencies using br CLI.
SkillDFreshness: D★ 1Claude Code +9 - 0.437score
admin-page-for-nextjs-sites
danzam98
Design cohesive Next.js SaaS admin cockpits.
SkillDFreshness: D★ 1Claude Code +9 - 0.433score
e2e-testing-for-webapps
danzam98
E2E testing for Next.js + Playwright + Supabase.
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
deep-performance-audit
danzam98
Systematic identification of optimization opportunities with proof requirements
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
deep-project-primer
danzam98
Essential first step to fully understand a project before any work
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
e2e-pipeline-validator
danzam98
Prove the entire system works with real data, no mocks allowed
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
de-slopify
danzam98
Remove telltale AI writing patterns from documentation and text
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
bug-hunter
danzam98
Explore codebase with fresh eyes to find and fix obvious bugs and issues
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
agent-swarm-launcher
danzam98
Initialize multiple agents with full context and coordination protocols
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
git-committer
danzam98
Intelligently commit all changed files in logical groupings with detailed messages
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
code-reorganizer
danzam98
Restructure scattered code files into a sensible, intuitive folder structure
SkillDFreshness: D★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- May 12, 2026 (5 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from danzam98
- 0.502score
ab-testing
danzam98
Build home-rolled A/B testing platform for Next.js 16 SaaS.
SkillCFreshness: C★ 1Claude Code +9 - 0.437score
admin-page-for-nextjs-sites
danzam98
Design cohesive Next.js SaaS admin cockpits.
SkillDFreshness: D★ 1Claude Code +9 - 0.437score
beads-workflow
danzam98
Convert markdown plans into beads with dependencies using br CLI.
SkillDFreshness: D★ 1Claude Code +9 - 0.433score
e2e-testing-for-webapps
danzam98
E2E testing for Next.js + Playwright + Supabase.
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
deep-project-primer
danzam98
Essential first step to fully understand a project before any work
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
deep-performance-audit
danzam98
Systematic identification of optimization opportunities with proof requirements
SkillDFreshness: D★ 1Claude Code +9
Cite this page
ga4 skill. Agent Mart. https://agentmart.dev/skills/danzam98-ga4 (last updated 2026-10-24)