Ga4 Events logo

Ga4 Events

Organization
cognyai
ga4-events

GA4 Event Implementation Reference — complete event taxonomy, parameter lists, implementation patterns (gtag.js, GTM, Measurement Protocol), and validation techniques

Overview

Publishercognyai
Repositoryclaude-code-marketing-skills
Skill namega4-events
Stars
111
Forks
15
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by cognyai on GitHub. Read the source before you install it.

Installation

Install the Ga4 Events AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/ga4-events
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/cognyai/claude-code-marketing-skills.git /tmp/claude-code-marketing-skills
mkdir -p .claude/skills
cp -r /tmp/claude-code-marketing-skills/skills/ga4-events .claude/skills/ga4-events
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Ga4 Events in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Ga4 Events on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Ga4 Events is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

GA4 Event Implementation Reference

Complete reference for implementing Google Analytics 4 events: automatically collected, enhanced measurement, recommended, and custom events with exact parameter lists, code examples, and validation techniques.

Full docs: https://cogny.com/docs/ga4-event-implementation

Usage

/ga4-events                          # Show event model overview
/ga4-events purchase                 # Show purchase event parameters and code
/ga4-events ecommerce                # Full e-commerce event funnel reference
/ga4-events enhanced measurement     # Enhanced measurement events list
/ga4-events custom events            # Custom event naming rules and limits
/ga4-events validation               # DebugView, Realtime, and BigQuery checks
/ga4-events gtm                      # GTM dataLayer implementation patterns
/ga4-events measurement protocol     # Server-side Measurement Protocol examples

Instructions

You are a GA4 event implementation expert. Use this reference to help users implement, audit, and validate GA4 events correctly. Provide precise, copy-paste-ready code examples.

When the user asks a question, find the relevant section below and provide actionable answers with ready-to-use code. If GA4 MCP tools are available, use them to inspect the user's actual property configuration (custom dimensions, data streams, conversion events) for context-aware advice.

If the user provides a specific event name or topic as an argument, focus on that area. Otherwise, provide an overview of the event model.

Works with

Works with zero accounts: the reference below is complete on its own. When connected, these make the answer specific to the user's setup:

JobPrimaryEnhanced when connected
What the property already collectsGA4 tool_get_metadata, tool_list_custom_dimensions, tool_list_conversion_events—
Is the event arriving?GA4 tool_run_realtime_report, tool_run_reportSegment get_events_volume (upstream of GA4)
Same action, same name everywhere—Segment list_tracking_plans → list_tracking_plan_rules; PostHog list_event_definitions
Experiment exposure event—GrowthBook list_experiments (tracking keys)

See "Live validation" under Validation and Debugging.


Event Model Overview

GA4 uses an event-based data model where everything is an event. Unlike Universal Analytics hit types (pageview, event, transaction), GA4 has a single concept: events with parameters.

ConceptUniversal AnalyticsGA4
Data modelHit-based (pageview, event, transaction)Event-based (everything is an event)
Event structureCategory / Action / Label / ValueEvent name + parameters (key-value pairs)
SessionsServer-defined, 30-min timeoutDerived from session_start event
PageviewsDedicated hit typepage_view event with page_location parameter
E-commerceEnhanced Ecommerce pluginBuilt-in recommended events with items array
Custom dataCustom dimensions/metrics (index-based)Event parameters + custom dimensions/metrics (name-based)

Every GA4 event has:

  • Event name: String identifier (e.g., page_view, purchase)
  • Event parameters: Key-value pairs (e.g., page_location, transaction_id)
  • User properties: Persistent user attributes (e.g., membership_tier)

Automatically Collected Events

Collected automatically with no configuration. Cannot be disabled.

Web

EventTriggerKey Parameters
first_visitFirst time user visits (new cookie)None
session_startNew session begins (30-min timeout)ga_session_id, ga_session_number
page_viewEvery page load (or history.pushState in SPAs)page_location, page_title, page_referrer
user_engagementPage in focus for 1+ second with interactionengagement_time_msec

Mobile (Firebase SDK)

EventTriggerKey Parameters
first_openFirst app open after installprevious_gmp_app_id, updated_with_analytics
session_startNew session beginsga_session_id, ga_session_number
screen_viewScreen transitionfirebase_screen, firebase_screen_class, firebase_screen_id
user_engagementApp in foreground 1+ secondengagement_time_msec
app_updateApp updated and launchedprevious_app_version
app_removeApp removed (Android only)None
os_updateOS updatedprevious_os_version

Auto-attached Parameters (every event)

language, page_location, page_referrer, page_title, screen_resolution, ga_session_id, ga_session_number, engagement_time_msec

Enhanced Measurement Events

Collected automatically when enabled in Admin > Data Streams > Enhanced Measurement. Each can be toggled individually.

EventTriggerKey Parameters
scrollUser scrolls past 90% of pagepercent_scrolled (always 90)
clickOutbound link clicklink_url, link_domain, link_classes, link_id, outbound
view_search_resultsURL contains search query parametersearch_term
video_startYouTube embed starts playingvideo_url, video_title, video_provider, video_current_time, visible
video_progressYouTube video reaches 10/25/50/75%Same as video_start plus video_percent
video_completeYouTube video reaches endSame as video_start
file_downloadClick on file link (pdf, xls, doc, zip, etc.)file_name, file_extension, link_url, link_text, link_domain
form_startFirst interaction with a formform_id, form_name, form_destination
form_submitForm submittedform_id, form_name, form_destination, form_submit_text

Note: Video tracking only works with YouTube embeds using enablejsapi=1.

Recommended Events — All Properties

EventParameters
loginmethod (STRING)
sign_upmethod (STRING)
sharemethod (STRING), content_type (STRING), item_id (STRING)
searchsearch_term (STRING)
select_contentcontent_type (STRING), content_id (STRING)
javascript
gtag('event', 'login', { method: 'Google' });
gtag('event', 'sign_up', { method: 'Email' });
gtag('event', 'search', { search_term: 'running shoes' });

Recommended Events — E-commerce

Implement in order for full funnel reporting.

view_item_list

javascript
gtag('event', 'view_item_list', {
  item_list_id: 'category_123',
  item_list_name: 'Running Shoes',
  items: [{
    item_id: 'SKU_123', item_name: 'Trail Runner Pro', item_brand: 'RunCo',
    item_category: 'Shoes', item_category2: 'Running', item_variant: 'Blue',
    price: 129.99, currency: 'USD', index: 0,
    item_list_id: 'category_123', item_list_name: 'Running Shoes'
  }]
});

select_item

javascript
gtag('event', 'select_item', {
  item_list_id: 'category_123', item_list_name: 'Running Shoes',
  items: [{ item_id: 'SKU_123', item_name: 'Trail Runner Pro', price: 129.99, currency: 'USD', index: 0 }]
});

view_item

javascript
gtag('event', 'view_item', {
  currency: 'USD', value: 129.99,
  items: [{ item_id: 'SKU_123', item_name: 'Trail Runner Pro', item_brand: 'RunCo',
    item_category: 'Shoes', item_variant: 'Blue', price: 129.99, currency: 'USD', quantity: 1 }]
});

add_to_cart

javascript
gtag('event', 'add_to_cart', {
  currency: 'USD', value: 129.99,
  items: [{ item_id: 'SKU_123', item_name: 'Trail Runner Pro', price: 129.99, currency: 'USD', quantity: 1 }]
});

remove_from_cart

javascript
gtag('event', 'remove_from_cart', {
  currency: 'USD', value: 129.99,
  items: [{ item_id: 'SKU_123', item_name: 'Trail Runner Pro', price: 129.99, currency: 'USD', quantity: 1 }]
});

view_cart

javascript
gtag('event', 'view_cart', {
  currency: 'USD', value: 259.98,
  items: [
    { item_id: 'SKU_123', item_name: 'Trail Runner Pro', price: 129.99, currency: 'USD', quantity: 1 },
    { item_id: 'SKU_456', item_name: 'Road Runner Elite', price: 149.99, currency: 'USD', quantity: 1 }
  ]
});

begin_checkout

javascript
gtag('event', 'begin_checkout', {
  currency: 'USD', value: 259.98, coupon: 'SUMMER20',
  items: [
    { item_id: 'SKU_123', item_name: 'Trail Runner Pro', price: 129.99, currency: 'USD', quantity: 1 },
    { item_id: 'SKU_456', item_name: 'Road Runner Elite', price: 149.99, currency: 'USD', quantity: 1 }
  ]
});

add_shipping_info

javascript
gtag('event', 'add_shipping_info', {
  currency: 'USD', value: 259.98, coupon: 'SUMMER20', shipping_tier: 'Express',
  items: [{ item_id: 'SKU_123', item_name: 'Trail Runner Pro', price: 129.99, currency: 'USD', quantity: 1 }]
});

add_payment_info

javascript
gtag('event', 'add_payment_info', {
  currency: 'USD', value: 259.98, coupon: 'SUMMER20', payment_type: 'Credit Card',
  items: [{ item_id: 'SKU_123', item_name: 'Trail Runner Pro', price: 129.99, currency: 'USD', quantity: 1 }]
});

purchase

javascript
gtag('event', 'purchase', {
  transaction_id: 'T12345',  // REQUIRED — unique transaction ID
  value: 259.98,             // sum of price * quantity (no tax/shipping); needed for revenue
  currency: 'USD',           // ISO 4217 — REQUIRED whenever value is set
  tax: 20.80,
  shipping: 9.99,
  coupon: 'SUMMER20',
  items: [
    { item_id: 'SKU_123', item_name: 'Trail Runner Pro', affiliation: 'Online Store',
      coupon: 'ITEM10OFF', discount: 13.00, item_brand: 'RunCo', item_category: 'Shoes',
      item_category2: 'Running', item_variant: 'Blue', price: 129.99, currency: 'USD', quantity: 1 },
    { item_id: 'SKU_456', item_name: 'Road Runner Elite', affiliation: 'Online Store',
      item_brand: 'RunCo', item_category: 'Shoes', price: 149.99, currency: 'USD', quantity: 1 }
  ]
});

Critical: purchase requires transaction_id and items. value is needed for revenue reporting, and currency is required whenever value is set (without it revenue isn't computed). GA4 deduplicates by transaction_id within 72 hours.

refund

javascript
// Full refund
gtag('event', 'refund', { transaction_id: 'T12345', value: 259.98, currency: 'USD' });

// Partial refund
gtag('event', 'refund', {
  transaction_id: 'T12345', value: 129.99, currency: 'USD',
  items: [{ item_id: 'SKU_123', price: 129.99, currency: 'USD', quantity: 1 }]
});

Recommended Events — Lead Generation

generate_lead

javascript
gtag('event', 'generate_lead', { currency: 'USD', value: 50.00 });

Recommended Events — Gaming

EventParameters
earn_virtual_currencyvirtual_currency_name (STRING), value (NUMBER)
spend_virtual_currencyvirtual_currency_name (STRING), value (NUMBER), item_name (STRING)
level_uplevel (NUMBER), character (STRING)
post_scorescore (NUMBER, required), level (NUMBER), character (STRING)
tutorial_beginNone
tutorial_completeNone
unlock_achievementachievement_id (STRING, required)
javascript
gtag('event', 'earn_virtual_currency', { virtual_currency_name: 'Coins', value: 100 });
gtag('event', 'spend_virtual_currency', { virtual_currency_name: 'Coins', value: 50, item_name: 'Power Boost' });
gtag('event', 'level_up', { level: 5, character: 'Warrior' });
gtag('event', 'post_score', { score: 15000, level: 5, character: 'Warrior' });
gtag('event', 'tutorial_begin');
gtag('event', 'tutorial_complete');
gtag('event', 'unlock_achievement', { achievement_id: 'first_blood' });

Item Parameter Reference

The items array supports these parameters per item:

ParameterTypeDescription
item_idSTRINGSKU/ID (recommended)
item_nameSTRINGDisplay name (recommended)
affiliationSTRINGStore or affiliation
couponSTRINGItem-level coupon
discountNUMBERDiscount amount
indexNUMBERPosition in list
item_brandSTRINGBrand name
item_categorySTRINGPrimary category
item_category2-5STRINGCategory levels 2-5
item_list_idSTRINGList ID
item_list_nameSTRINGList name
item_variantSTRINGVariant (color, size)
location_idSTRINGPhysical location
priceNUMBERItem price
currencySTRINGISO 4217 code
quantityNUMBERQuantity
promotion_idSTRINGPromotion ID
promotion_nameSTRINGPromotion name
creative_nameSTRINGPromotion creative
creative_slotSTRINGCreative slot

At least one of item_id or item_name is required. Max 200 items per event.

Custom Events

Use when no automatically collected, enhanced measurement, or recommended event fits.

Naming Rules

  • Max 40 characters
  • Must start with alphabetic character
  • Only [a-zA-Z][a-zA-Z0-9_]*
  • Case sensitive — Add_To_Cart and add_to_cart are different events
  • Cannot use reserved prefixes: firebase_, google_, ga_
  • Cannot use reserved event names (e.g., first_visit, session_start, app_install, in_app_purchase, etc.)

Limits

LimitValue
Distinct event names, web streamsNo limit
Distinct event names, app streams500 per app user (auto-collected and enhanced measurement events excluded)
Parameters per event25
Parameter name length40 characters
Parameter value (string)100 characters
User property name length24 characters
User property value (string)36 characters
User properties per project25

Examples

javascript
gtag('event', 'newsletter_signup', {
  newsletter_type: 'weekly_digest', signup_location: 'footer'
});

gtag('event', 'feature_used', {
  feature_name: 'export_csv', feature_category: 'data_tools', plan_tier: 'pro'
});

gtag('event', 'article_read', {
  article_id: 'post_12345', article_category: 'technology', read_time_seconds: 245
});

Custom Dimensions and Metrics

Register event parameters or user properties for reporting in Admin > Custom definitions.

Scoping

ScopeSourceUse Case
Event-scoped dimensionEvent parameterPage/action attributes
User-scoped dimensionUser propertyPersistent user attributes
Custom metricEvent parameter (numeric)Numeric aggregation

Quotas

ResourceStandardAnalytics 360
Event-scoped custom dimensions50125
User-scoped custom dimensions25100
Custom metrics50125

Processing time: 24-48 hours for standard reports (immediate in Realtime/DebugView).

javascript
// Set user properties
gtag('set', 'user_properties', {
  membership_tier: 'gold', signup_date: '2025-01-15'
});

GTM dataLayer Implementation

javascript
// Custom event
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'newsletter_signup',
  newsletter_type: 'weekly_digest',
  signup_location: 'footer'
});

// E-commerce — ALWAYS clear ecommerce first
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'T12345', value: 259.98, currency: 'USD',
    tax: 20.80, shipping: 9.99, coupon: 'SUMMER20',
    items: [{ item_id: 'SKU_123', item_name: 'Trail Runner Pro',
      item_brand: 'RunCo', item_category: 'Shoes', price: 129.99, quantity: 1 }]
  }
});

Measurement Protocol (Server-Side)

bash
POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_API_SECRET

{
  "client_id": "abc123.def456",
  "events": [{
    "name": "offline_purchase",
    "params": {
      "transaction_id": "OFFLINE_T789",
      "value": 250.00,
      "currency": "USD"
    }
  }]
}
python
import requests, json

url = 'https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_API_SECRET'
payload = {
    'client_id': 'abc123.def456',
    'events': [{'name': 'offline_purchase', 'params': {
        'transaction_id': 'OFFLINE_T789', 'value': 250.00, 'currency': 'USD'
    }}]
}
response = requests.post(url, data=json.dumps(payload))

Limitations: No response validation (use debug endpoint); events are joined to online activity via client_id / app_instance_id, so reuse the real _ga client ID; include session_id (within 24 hours of session start) to tie the event to a session; reserved names like first_visit/session_start can't be sent. MP is meant to supplement gtag/GTM/Firebase, not replace them. MP events do show in Realtime within seconds; add debug_mode: 1 and engagement_time_msec to see them in DebugView.

Validation Server

bash
POST https://www.google-analytics.com/debug/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_API_SECRET
# Returns validation errors instead of silently accepting

Validation and Debugging

DebugView

Enable debug mode to see events in near real-time in Admin > DebugView:

javascript
gtag('config', 'G-XXXXXXXXXX', { debug_mode: true });
// Or per-event:
gtag('event', 'purchase', { debug_mode: true, transaction_id: 'T12345', value: 99.99, currency: 'USD' });

Live validation (enhanced when connected)

If Cogny isn't connected, skip this and note what connecting adds.

  1. GA4: tool_run_realtime_report (property_id, metrics: [eventCount], dimensions: [eventName]) right after a test, then tool_run_report over 7 days with dimensions: [eventName] to see steady-state volume.
  2. Segment (if the site sends through Segment): get_events_volume (start_time, end_time, group_by: [eventName], or event_name: "Order Completed"). Events in Segment but missing in GA4 mean the GA4 destination mapping is wrong, not the site code.
  3. Name drift: Segment list_tracking_plan_rules (tracking_plan_id from list_tracking_plans) and PostHog list_event_definitions (project_id, search). Map each to its GA4 name in one table (Segment Order Completed → purchase, Product Added → add_to_cart) and flag actions with no GA4 equivalent.
  4. GrowthBook exposures: list_experiments (status: running) gives each test's tracking key. GA4 should receive experiment_viewed with experiment_id = that key and variation_id; register both as event-scoped custom dimensions, or the GA4 split is invisible.

Name the tool on every count; Segment counts calls, GA4 counts events after its own filters.

BigQuery Validation Queries

Event volume audit:

sql
SELECT event_name, COUNT(*) as event_count, COUNT(DISTINCT user_pseudo_id) as unique_users
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
GROUP BY event_name ORDER BY event_count DESC

Missing purchase parameters:

sql
SELECT 'missing_transaction_id' as issue, COUNT(*) as count
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
  AND event_name = 'purchase'
  AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'transaction_id') IS NULL
UNION ALL
SELECT 'missing_currency', COUNT(*)
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
  AND event_name = 'purchase'
  AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'currency') IS NULL

Duplicate transactions:

sql
SELECT transaction_id, COUNT(*) as dupes
FROM (
  SELECT (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'transaction_id') as transaction_id
  FROM `project.analytics_123456789.events_*`
  WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))
                          AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
    AND event_name = 'purchase'
)
WHERE transaction_id IS NOT NULL
GROUP BY transaction_id HAVING COUNT(*) > 1
ORDER BY dupes DESC

Naming convention audit:

sql
SELECT event_name, COUNT(*) as event_count,
  CASE
    WHEN LENGTH(event_name) > 40 THEN 'exceeds_40_chars'
    WHEN REGEXP_CONTAINS(event_name, r'^(firebase_|google_|ga_)') THEN 'reserved_prefix'
    WHEN NOT REGEXP_CONTAINS(event_name, r'^[a-zA-Z][a-zA-Z0-9_]*$') THEN 'invalid_characters'
    WHEN event_name != LOWER(event_name) THEN 'mixed_case_warning'
    ELSE 'valid'
  END as naming_issue
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
GROUP BY event_name HAVING naming_issue != 'valid'

Parameter truncation check:

sql
SELECT event_name, ep.key, MAX(LENGTH(ep.value.string_value)) as max_len,
  COUNTIF(LENGTH(ep.value.string_value) >= 100) as at_limit
FROM `project.analytics_123456789.events_*`, UNNEST(event_params) as ep
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
  AND ep.value.string_value IS NOT NULL
GROUP BY 1, 2 HAVING max_len >= 100

Common Pitfalls

  1. Case sensitivity — Purchase != purchase. Always use snake_case.
  2. String truncation at 100 chars — URLs and long values get silently cut.
  3. Custom dimension quotas — 50 event-scoped, 25 user-scoped (standard). Plan carefully.
  4. Duplicate purchases — Always include transaction_id for dedup (72-hour window).
  5. Missing currency — value without currency is ignored in monetization reports.
  6. Stale dataLayer — Always push { ecommerce: null } before ecommerce events in GTM.
  7. PII in parameters — No emails, phone numbers, or names. Violates GA4 ToS.
  8. Dynamic event names — Fragments reporting (and burns the 500-name limit on app streams). Use parameters instead.

Resources

Frequently asked questions

What does the Ga4 Events AI skill do?

GA4 Event Implementation Reference — complete event taxonomy, parameter lists, implementation patterns (gtag.js, GTM, Measurement Protocol), and validation techniques

Why use Ga4 Events on TypingMind?

Because you install it once and use it with any model. Ga4 Events is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Ga4 Events in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/ga4-events. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Ga4 Events?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Ga4 Events?

As many as you like. As long as a model supports skills, you can use Ga4 Events with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Ga4 Events AI skill free?

It is published on GitHub by cognyai. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇