Spitakolus Tracking & Analytics
๐ฏ Overview
All Spitakolus projects share tracking infrastructure with project separation via hostname routing.
Golden Rule: Data flows correctly when hostname conditions are set properly.
๐ Shared Infrastructure IDs
| System | ID | Purpose | |--------|-----|---------| | GTM Web Container | GTM-PD5N4GT3 | Shared, hostname routing | | GTM Server Container | GTM-THB49L3K | Server-side tracking | | Server URL | gtm.nastahem.com | First-party domain | | BigQuery Project | nastahem-tracking | Shared data warehouse |
GA4 Properties (per project)
| Project | Measurement ID | Domain | |---------|----------------|--------| | Flocken | G-7B1SVKL89Q | flocken.info | | Nรคsta Hem | G-7N67P0KT0B | nastahem.com |
๐ง GTM Architecture
GTM-PD5N4GT3 (Shared Web Container)
โโโ Tags
โ โโโ Google Tag - Flocken
โ โ โโโ Tag ID: G-7B1SVKL89Q
โ โ โโโ Condition: Page Hostname = flocken.info
โ โ
โ โโโ Google Tag - Nรคsta Hem
โ โโโ Tag ID: G-7N67P0KT0B
โ โโโ Condition: Page Hostname = nastahem.com
โ
โโโ Triggers (hostname-based)
โโโ Page View - Flocken (hostname = flocken.info)
โโโ Page View - Nรคsta Hem (hostname = nastahem.com)
Hostname Routing Rules
ALWAYS use hostname conditions:
- โ
Page Hostname equals flocken.info - โ
Page Hostname equals nastahem.com - โ Never use URL-based conditions
- โ Never omit conditions (causes cross-contamination)
๐ BigQuery Structure
nastahem-tracking/
โโโ flocken_raw/ # Raw GA4 export
โโโ flocken_curated/ # Cleaned data
โโโ flocken_marts/ # Business metrics
โ
โโโ nastahem_raw/ # Raw GA4 export
โโโ nastahem_curated/ # Cleaned data
โโโ nastahem_marts/ # Business metrics
Dataset Naming Convention
Format: [project]_[type]
| Type | Purpose |
|------|---------|
| _raw | Raw GA4 export (events_YYYYMMDD) |
| _curated | Cleaned, standardized events |
| _marts | Business intelligence metrics |
Important: Location = EU
All datasets MUST be created with location='EU' for GDPR compliance.
๐ Consent Mode v2
All projects use Consent Mode v2 with default denied:
window.dataLayer.push({
'event': 'consent_default',
'analytics_storage': 'denied',
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'functionality_storage': 'granted',
'security_storage': 'granted'
});
Cookie Banner Updates Consent:
- User accepts โ
gtag('consent', 'update', {...}) - Tracking only fires AFTER consent granted
GTM Tag Consent Controls
Every Google Tag must have these consent controls enabled:
ad_storageโad_personalizationโad_user_dataโanalytics_storageโ
๐ท๏ธ Event Naming Convention
Standard Events (GA4 Enhanced Measurement)
page_view- Page loadsscroll- 90% scroll depthclick- Outbound linksfile_download- File downloadsvideo_start,video_progress,video_complete
Custom Events Format
Format: [action]_[object]
Examples:
sign_up- User registrationapp_install- App installationlisting_created- New listingmessage_sent- Message sent
UTM Parameters
Always include for attribution:
utm_source- Traffic sourceutm_medium- Marketing mediumutm_campaign- Campaign name (use cid!)utm_content- Ad variation
๐ Adding New Project to Tracking
Step 1: Create GA4 Property
- Google Analytics โ Create Property
- Save Measurement ID (G-XXXXXXXXXX)
Step 2: Add to GTM
- GTM โ Container GTM-PD5N4GT3
- Create new Google Tag with Measurement ID
- CRITICAL: Add hostname trigger condition
Step 3: Create BigQuery Datasets
CREATE SCHEMA `nastahem-tracking.[project]_raw` OPTIONS(location='EU');
CREATE SCHEMA `nastahem-tracking.[project]_curated` OPTIONS(location='EU');
CREATE SCHEMA `nastahem-tracking.[project]_marts` OPTIONS(location='EU');
Step 4: Link GA4 โ BigQuery
- GA4 โ Admin โ BigQuery Linking
- Project: nastahem-tracking
- Location: EU
- Dataset: [project]_raw
โ ๏ธ Common Mistakes to Avoid
| Mistake | Consequence | Fix | |---------|-------------|-----| | Missing hostname condition | Data goes to wrong GA4 | Always add hostname trigger | | Wrong Measurement ID | Data lost | Double-check ID | | Dataset location != EU | GDPR violation | Always use EU | | Consent not implemented | Legal issues | Use Consent Mode v2 | | Hardcoded tracking IDs | Works in dev, fails in prod | Use environment variables |
๐ Debugging Checklist
When tracking isn't working:
- GTM Preview Mode: Is the right tag firing?
- Hostname check: Is the condition correct?
- Consent check: Did user accept cookies?
- Network tab: Are requests going to google-analytics.com?
- GA4 Realtime: Is data appearing?
- BigQuery: Is export enabled and working?
๐ Growth Loop Integration
Tracking is the foundation of the AI Growth Loop:
- Data Collection โ GTM + GA4 + BigQuery
- Analysis โ Query BigQuery for patterns
- AI Generation โ Use insights for new ads
- Optimization โ Track performance, pause losers
Every event you track becomes data for the Growth Loop.
๐ Detailed Documentation
- GTM_SHARED_CONTAINER.md
- BIGQUERY_SHARED_PROJECT.md
- Project-specific: See each project's
docs/tracking/folder
Scan to join WeChat group