Skip to main content

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 a form_start or form_submit event.

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:

  1. Pre-built Reports & Insights

    • Lead generation reports
    • Conversion funnels
    • Predictive audiences (likely to convert)
    • Automated insights ("Lead generation up 23% this week")
  2. Machine Learning Models

    • Predictive metrics (conversion probability)
    • Audience suggestions
    • Anomaly detection
  3. Google Ads Integration

    • Enhanced conversions tracking
    • Smart bidding strategies
    • Similar audience creation
  4. 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_user or career_user or both

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​

  1. 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)
  2. Now you can segment ALL standard reports by these dimensions

    • Filter Leads report by user_segment = 'company'
    • Compare conversion rates between job_type = 'gig' vs job_type = 'career'
    • Analyze which lead_source drives highest value

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:

  1. Standard Events Layer (Universal Business Metrics)

    • Use for cross-channel reporting
    • Powers Google's ML models
    • Enables industry benchmarking
  2. Standard Events + Properties Layer (Segmented Analysis)

    • Same standard event, different properties
    • Maintains compatibility while adding specificity
    • Best of both worlds
  3. 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.