Skip to main content

Configuring Jodapp Key Events

Our architecture presents a unique tracking challenge: we share a single GA4 Data Stream across multiple codebases (jodapp.com running Rails/React, and gig-partners.jodapp.com running legacy Laravel).

If we tell Google Ads to optimize for generic page views, we risk mixing top-of-funnel job board traffic with bottom-of-funnel legacy app traffic. Furthermore, generic page views attract low-quality bot traffic, which harms our AdSense yield.

Key Event Naming Conventions

When using ecommerce events like view_item, view_item_list as a key event, ALWAYS ensure you are "slicing" the data based on the domain (gig-partners.jodapp.com vs jodapp.com).

As of 23 Feb 2026, we are using a SINGLE Data Stream in Google Analytics for:

  • jodapp.com
  • gig-partners.jodapp.com

Both websites are sending view_item event. However, jodapp.com should be the START of the funnel. Any paid ads should always direct users to jodapp.com (NOT gig-partners.jodapp.com)

Format

  • {ecommerce-event-name}_{domain}
GA4 Event NameDomainKey Event NameDescription
view_itemjodapp.comview_item_jodappUser viewing a single job with many shifts in jodpap.com
view_item_gig-partnersgig-partner.jodapp.comview_item_gig-partnersUser viewing a single shift for a single job in gig-partners.jodapp.com
important

Note the dash - in view_item_gig-parters. The url is gig-partners.jodapp.com NOT gig_partners.jodapp.com

The Strategy: High-Intent view_item Tracking

Instead of tracking URLs, we rely on our frontend application logic. When a user clicks into a specific job detail page, our React frontend triggers a hardcoded Google Tag Manager (GTM) dataLayer push: event: "view_item".

We use this as our Key Event for Google Ads because:

  1. Intent: It guarantees the job component fully loaded for a real user.
  2. AdSense Quality: Users who actively view job details are the highest quality audience for our AdSense blocks.
  3. Resilience: It is immune to URL changes or broken UTM marketing parameters.

This happens for both:

  • jodapp.com
  • gig-partners.jodapp.com

Implementation Steps

To ensure Google Ads only spends money to acquire users viewing jobs on the main Jodapp domain (and not the legacy Laravel app), we created a custom, domain-strict Key Event in GA4.

Step 1: Create the Custom Event in GA4

Inside GA4 (Admin > Events > Create Event), we configured a new event named view_item_jodapp with the following strict conditions:

  • Condition 1 (The Action): event_name equals view_item
  • Condition 2 (The Domain Filter): page_location starts with https://jodapp.com/

Why this matters: This ensures that if the Laravel app ever fires a view_item event, it is ignored by this specific conversion goal, keeping our ad data pure.

Step 2: Mark as Key Event

Once created, we toggle "Mark as key event" to ON.

  • Default Value: We leave this empty. Assigning arbitrary dollar amounts to top-of-funnel page views artificially inflates Return on Ad Spend (ROAS) metrics and confuses the bidding algorithm.
  • Counting Method: Set to "Once per session." If a user views 5 jobs in one sitting, we count them as 1 acquired user, not 5 separate conversions.

Step 3: Import to Google Ads

With the Key Event defined in GA4, the bridge is complete. Inside Google Ads (Goals > Conversions > Summary > Import), key_jodapp_job_view is now available to be imported and assigned as the primary optimization goal for our Website Traffic campaigns.