Google Analytics Overview
We use Google Analytics to track:
- user acquisition (how we get users)
- user behaviour (how users use our platform)
- conversion (how many users applied and completed a job)
About Events
An event allows you to measure a specific interaction or occurrence on your website or app. For example, you can use an event to measure when someone loads a page, clicks a link, or completes a purchase, or to measure system behaviour, such as when an app crashes or an impression is served.
Google Events Families
- Automatically collected events
- Collected by default when you set up Google Analytics on your website or app.
- Enhanced measurement events
- Collected when you set up Google Analytics on your website or app and enhanced measurement is enabled.
- Recommended events
- Events that you implement, but that have predefined names and parameters.
- These events unlock existing and future reporting capabilities.
- Custom events
- Events that you define.
- Make sure you only create custom events when no other events work for your use case.
- Custom events don't show up in most standard reports so you need to set up custom reports or explorations for meaningful analysis.
jodapp-google-events-map.gsheets lists all the events in Jodapp's content.
Automatically Collected Events & Enhanced measurement events
These are automatically collected by the Google Tag script.
Do note that form_start and form_submit will only work if jodapp-web implements a <form> html.
- For example, a
<Button>that calls a function that calls an endpoint will not be registered as aform_startorform_submitevent.
Recommended Events - What GA4 Standard Events Actually Unlock
Google recommends a set of recommended events to send to "unlock" prebuilt reports.
- For all properties
- For online sales
- For lead generation
- For games (not applicable for Jod)
For each family, Google recommends events that we should track to get pre-built reports and insights in Google Analytics.
When you use standard events like generate_lead, purchase, sign_up correctly, you get:
-
Pre-built Reports & Insights
- Lead generation reports
- Conversion funnels
- Predictive audiences (likely to convert)
- Automated insights ("Lead generation up 23% this week")
-
Machine Learning Models
- Predictive metrics (conversion probability)
- Audience suggestions
- Anomaly detection
-
Google Ads Integration
- Enhanced conversions tracking
- Smart bidding strategies
- Similar audience creation
-
Cross-property Benchmarking
- Industry comparisons
- Performance benchmarks
Jodapp Context
Jodapp has two distinct funnels:
- Partner/Worker Funnel (Primary)
- Company Funnel (Secondary)
We will need to implement a way to "slice" event data based on the user persona.
Using Custom Dimensions
We have multiple types of users in Jodapp:
- org_user
- seeker
- who can be either
gig_userorcareer_useror both
- who can be either
We can create a new "property" when we send events in the dataLayer:
window.dataLayer.push({
event: 'generate_lead',
lead_id: `APP-${Date.now()}`,
lead_source: 'job_application',
user_persona: 'gig_user', // custom dimension 'gig_user | career_user'
job_id: job.id,
job_type: job.type, // 'career' or 'gig'
job_title: job.title,
company_name: job.company_name,
value: job.potential_earnings,
currency: 'SGD'
})
For example, we would send generate_lead event when:
- org_user signs up
- gig_user applies for a gig_job
- career_user applies for a career_job
Any form submission that represents a 'Conversion' without 'Immediate Payment' is a Lead.
Use Standard Events + Properties
DO THIS: Use standard events with custom parameters
// Company generates a lead (signs up to post jobs)
{
event: 'generate_lead',
lead_id: 'LEAD-ORG-001',
lead_source: 'org_signup', // Custom parameter
user_segment: 'company', // Custom parameter
company_size: 'medium', // Custom parameter
industry: 'fnb', // Custom parameter
value: 500, // Potential LTV
currency: 'SGD'
}
// Worker generates a lead (applies to job)
{
event: 'generate_lead',
lead_id: 'APP-GIG-789',
lead_source: 'job_application', // Custom parameter
user_segment: 'worker', // Custom parameter
job_type: 'gig', // Custom parameter
job_category: 'logistics', // Custom parameter
value: 80, // Potential earnings
currency: 'SGD'
}
NOT THIS: Custom events that break standard reporting
// ❌ These custom events won't appear in standard reports
{ event: 'generate_lead_org' }
{ event: 'generate_lead_gig' }
{ event: 'generate_lead_career' }
How to Configure Custom Dimensions in GA4
-
In GA4 Admin → Custom Definitions → Custom Dimensions
- Create dimension:
user_segment(scope: Event) - Create dimension:
lead_source(scope: Event) - Create dimension:
job_type(scope: Event) - Create dimension:
job_category(scope: Event)
- Create dimension:
-
Now you can segment ALL standard reports by these dimensions
- Filter Leads report by
user_segment = 'company' - Compare conversion rates between
job_type = 'gig'vsjob_type = 'career' - Analyze which
lead_sourcedrives highest value
- Filter Leads report by
Jodapp Analytics Blueprint: Two-Sided Marketplace
Jodapp is a marketplace. We are a two sided-business:
- Business-to-Business (B2B): We market to companies that want to fulfil daily Jobs
- Business-to-Consumer (B2C): We market those jobs to users looking for work
Here's exactly how to think about events for your marketplace:
Core Standard Events (Both Sides)
// ACQUISITION
sign_up → Both companies and workers creating accounts
login → Return user engagement
// DISCOVERY
view_item_list → Browsing (jobs for workers, candidate pools for companies)
view_item → Viewing details (job posting or candidate profile)
search → Using filters/search
// INTENT
add_to_wishlist → Saving/bookmarking (workers save jobs, companies save candidates)
share → Social sharing of jobs
// CONVERSION (Lead)
generate_lead → Primary conversion signal (application or signup to post)
// CONVERSION (Transaction)
purchase → ONLY actual money received (credit purchases)
// ENGAGEMENT
engagement → Time-based engagement metrics
Custom Events (Marketplace Specific)
// FULFILLMENT (Post-Match Events)
job_posted → Company posts a job
job_expired → Job listing expires
application_viewed → Company views application
application_shortlisted → Company shortlists candidate
interview_scheduled → Interview arranged
offer_extended → Job offer made
offer_accepted → Worker accepts offer
// COMPLETION (Value Realization)
job_started → Worker begins job
clock_in → Gig worker clocks in
clock_out → Gig worker clocks out
job_completed → Job successfully finished
credits_consumed → Credits deducted from company
worker_paid → Worker receives payment
Thinking Framework: The 3-Layer Model
Think of your analytics in 3 layers:
-
Standard Events Layer (Universal Business Metrics)
- Use for cross-channel reporting
- Powers Google's ML models
- Enables industry benchmarking
-
Standard Events + Properties Layer (Segmented Analysis)
- Same standard event, different properties
- Maintains compatibility while adding specificity
- Best of both worlds
-
Custom Events Layer (Business-Specific Actions)
- Unique to your marketplace mechanics
- Track operational metrics
- Build custom funnels
Implementation Example: Company Lead Generation
When a company clicks "Post a Job" on /employers/sign-up:
// Step 1: Page view
{
event: 'virtual_page_view',
page_location: 'https://jodapp.com/employers/sign-up',
page_title: 'Post Full-Time Jobs - Sign Up',
user_segment: 'company'
}
// Step 2: Form start
{
event: 'form_start',
form_id: 'org_signup_form',
form_name: 'Company Registration',
user_segment: 'company'
}
// Step 3: Lead generation (form submission)
{
event: 'generate_lead',
lead_id: 'LEAD-ORG-' + timestamp,
lead_source: 'org_signup',
user_segment: 'company',
company_name: 'ABC Logistics',
industry: 'logistics',
estimated_monthly_hires: 5,
value: 2000, // Estimated LTV based on industry/size
currency: 'SGD'
}
// Step 4: Sign up completion
{
event: 'sign_up',
method: 'email',
user_segment: 'company',
user_id: 'ORG-123' // Your internal ID
}
The Key Insight
You don't need to choose between standard and custom. Use standard events as your foundation with custom properties for segmentation, then layer custom events on top for marketplace-specific behaviors.
This approach:
- ✅ Preserves all GA4's built-in functionality
- ✅ Enables precise segmentation
- ✅ Tracks marketplace-specific metrics
- ✅ Scales as your business grows
Remember: GA4 allows up to 500 distinct event names and 25 parameters per event. You have plenty of room to be specific while maintaining standards.