GA4 & Web Analytics Literacy Series · Reference

Website Event Tracking Reference

What we track on outwardbound.org, the details each event carries, where it fires, how the data moves, and which events count as conversions for ad platforms. Use this alongside the GA4 glossary.

Request a new event ↓

1. How tracking works on outwardbound.org

Every action we measure on the site is an event. Segment collects events from the website and sends them to GA4, the ad platforms, Braze, and our Snowflake data warehouse. Segment is GA4's only feed, so if consent stops Segment from loading, GA4 doesn't see that visit.

1 · Visitor actsViews a course, filters the catalog, opens dates, applies.
→
2 · OneTrust checks consentU.S.: tracking is on unless the visitor rejects it (since July 8, 2026). EU: tracking waits for opt-in.
→
3 · Segment records itA page, track, or identify call, plus properties.
→
4 · Destinations receive itGA4 · Google Ads · Meta CAPI · Braze · Snowflake
→
5 · Teams use itReports, bidding, audiences, lifecycle messaging, analysis.
Why it matters: If an event shows up in Segment, that doesn't prove it reached GA4, Google Ads, Meta, or Braze. Each destination has its own mapping, required fields, and filters, so check each one separately.

2. Key terms

Page call

Records that a page loaded. Shows up in GA4 as page_view.

Track event

Records a meaningful action, like course_viewed or application_started.

Identify call

Links activity to a known person when they give an email or arrive from a Braze email with an identifier. It never fires without a real identifier.

Event property

Context attached to an event, such as course, School, page, filters, or consent. Properties let one event answer many questions.

Key event (GA4)

An event GA4 treats as an important outcome. Key events can be imported into Google Ads as conversions.

Conversion (ad platforms)

An event that Google Ads, Meta, or TikTok uses to measure results and optimize bidding.

Destination

Any system Segment sends events to: GA4, Google Ads, Meta CAPI, Braze, or Snowflake.

(not set)

Usually means a property was missing or couldn't be classified. It's typically a gap in measurement, not proof that nothing happened.

3. Current tracking plan

The events below are listed in the order a visitor typically moves through the site. "Status" reflects the most recent QA and handoff documentation we have. Items marked partial or open need to be revalidated in production.

Working Partial / revalidate Open issue Planned / confirm Documented conversion Recommended conversion

Event Funnel stage Where / how it fires Key properties Status Ad-platform use
page_view (page call)AllEvery page load once Segment is allowed by consent.path, page URL, title, referrerWorkingBasis for audiences and reports. Not a conversion.
course_catalog_viewedDiscoveryCourse catalog page loads.Page context, filters present on arrivalConfirm namingAudience building only.
catalog_engagedDiscoveryA visitor uses catalog filters and/or stays on the catalog for 15, 30, or 60 seconds. Also intended to trigger Braze banners.catalog_filters, page_url (required by Braze), ad_consent, engagement thresholdPartialAudience signal. Not a conversion.
course_catalog_clickedDiscoveryA visitor clicks a course in catalog results.Course slug and title, the full filter state, page URLOpen
Fires on the button but not on the course-title text.
Audience and analysis signal. Feeds the catalog filter analysis.
course_viewedConsiderationA course detail page (/course/…) loads.course_slug, course_title, page_path, page_url, ad_consent. School and program properties still need to be added or confirmed.WorkingDocumented The legacy equivalent ob_course_page_view is a GA4 and Google Ads conversion.
course_engagedConsiderationA visitor stays on a course detail page past set time thresholds (15, 30, or 60 seconds).Course context, threshold_seconds, page contextOpen
Was firing repeatedly and inflating volume.
Possible engaged-visitor audience once fixed. Not a conversion.
course_dates_modal_openedConsiderationA visitor opens the dates/sessions modal on a course page.Course slug and title, page contextWorkingStrong-intent audience.
course_session_selectedIntentA visitor picks a specific session or date.Course and session identifiers, date, course contextRevalidateRecommended Secondary key event.
application_openedIntentA visitor enters the application flow after clicking Apply.Course and session context, page URLWorkingDocumented The legacy equivalent ob_course_enrollment_page_view is a conversion. Meta CAPI mapping was set up in March 2026.
application_startedIntentA visitor begins filling out the application. An email entered here triggers an identify call.Course and session context; email identify traitWorkingRecommended Matches "Start Application" in Meta and TikTok.
application_completedConversionA visitor successfully submits an application.Course and session context, SchoolOpen
Didn't fire on a real application in March. Needs production validation.
Documented The legacy equivalent course_application_success is the primary conversion.
schedule_call_clickedIntentA visitor clicks the schedule-a-call link. Calendly isn't embedded, so this is tracked as a click.Page URL; course context (missing in early QA)OpenRecommended Secondary conversion.
schedule_call_completedConversionThe confirmation page loads.Source/referrer contextConfirm triggerRecommended if a reliable trigger exists.
lead_form_submittedConversionThe lead-form confirmation page loads.Form type, School, page contextConfirm triggerRecommended
Newsletter signup + identifyLeadA visitor submits a newsletter form, either the footer form or a School form.Email trait, School attribution, form/page sourceIdentify working
Event name still needs to be standardized.
Lead conversion candidate.
cta_clickedAnyA visitor clicks one of the defined CTAs.CTA label, destination, page pathConfirm coverageAnalysis only.
Live Chat Message ReceivedSupportA live-chat interaction occurs.Page contextRename
Should follow snake_case.
Not a conversion.
Donation eventsFundraisingDonation start and completion paths.Campaign, School, gift contextNot yet documentedFundraising conversion candidate.
Identify callIdentityFires only when an email is captured or a Braze bxid is in the URL.email, bxid → braze_idPartialImproves match rates. Not itself a conversion.

4. Properties: the detail that makes events useful

An event tells us what happened. Its properties tell us which course, School, audience, and source it belongs to. Adding properties lets us segment existing events without creating new ones.

Global and common properties

PropertyTypeExampleUse
page_urlstringhttps://www.outwardbound.org/course/blue-ridge-outdoor-educator/Required for catalog_engaged in Braze.
page_pathstring/course/blue-ridge-outdoor-educator/Page grouping and Braze page targeting.
ad_consentbooleantrueConsent record. Must be a true/false value; an empty string causes Braze to reject the event.
event_idstringunique IDRemoves duplicate conversions between browser and server-side sends (Meta CAPI).
course_slugstring/course/blue-ridge-outdoor-educator/Course-level reporting and audiences.
course_titlestringBlue Ridge – Outdoor EducatorReadable labels in reports.
threshold_secondsnumber20Engagement depth on course_engaged and catalog_engaged.
catalog_filtersstringage-rangefilter=14-16&month=Jul 2026…Catalog demand analysis. Typed as an object in Segment Protocols but sent as a string; the types need to match.

Recommended additions for granular audiences and reporting

PropertyAdd toWhy
school, program_line, course_typeAll course and application eventsSchool-level reporting; specialty audiences such as Families, Veterans, Pathfinder, and Semester.
age_range, populationCourse and application eventsAge is the most-used catalog filter (84% of user-driven clicks).
region, activity, course_duration, course_start_monthCourse and application eventsLets creative and audiences match how visitors narrow their search: age → month → length → region.
catalog_filter_age, catalog_filter_month, etc.Catalog eventsFlat values GA4 can slice directly, instead of parsing one combined string.
landing_sourceCatalog and course eventsMarks paid vs. organic arrival explicitly instead of inferring it from UTMs.
course_session_idSession and application eventsTies intent to a specific session for inventory decisions.
cta_text, cta_location, form_typeCTA and form eventsShows which placements and forms actually drive action.
Property hygiene: Strip UTMs, fbclid, ttclid, and FormAssembly tokens from catalog_filters before sending. Move ad links off the retired age-groupfilter and onto the current age-rangefilter values so paid and organic traffic use the same labels.

5. Conversions for ad platforms

In February 2025, GFM CenterTable added three conversions to GTM, GA4, and Google Ads. They match the Course View → Start Application → Application Submission funnel that Meta and TikTok use. The Segment events above are the newer tracking layer. The table below shows how the two line up and what we recommend.

Funnel stepLegacy GA4 / Google Ads conversionCurrent Segment eventMeta / TikTok equivalentRecommended role
Course viewob_course_page_viewcourse_viewedCourse viewUpper-funnel conversion. Use for audiences, not for primary bidding.
Session selectedNone foundcourse_session_selectedNoneAdd as a secondary key event.
Application startob_course_enrollment_page_viewapplication_opened / application_startedStart Application / Checkout InitiatedSecondary conversion. Decide whether "opened" and "started" both need to exist.
Application submittedcourse_application_successapplication_completedApplication SubmissionPrimary conversion for bidding, once it's validated in production.
ConsultationNone foundschedule_call_clicked / _completedNoneSecondary conversion once fixed.
LeadNone foundlead_form_submitted, newsletter signupLeadSecondary conversion.
Before renaming or retiring anything: Google Ads bidding may depend on the legacy conversion names. Map new events to the existing conversions, or run both side by side until the new ones have built up enough history.

Attribution reminder: Ad-platform conversions only count people who clicked an ad within the attribution window (for example, 7-day click / 1-day view), and ad blockers and cookie limits remove some of them. Platform numbers will always come in lower than Salesforce application totals.

6. Example payloads

course_engaged, captured from Segment PROD, March 2026
analytics.track('course_engaged', {
  ad_consent: '',                 // should be a boolean (true/false)
  course_slug: '/course/blue-ridge-outdoor-educator/',
  course_title: 'Blue Ridge – Outdoor Educator',
  event_id: '',                   // should be populated for deduplication
  page_path: '/course/blue-ridge-outdoor-educator/',
  page_url: 'https://www.outwardbound.org/course/blue-ridge-outdoor-educator/',
  threshold_seconds: 20,
  userID: 'TEST123'               // test value
});
Identify call when a Braze email link or form captures an identifier
analytics.identify('<user_id>', {
  bxid: '<Braze identifier from URL>',   // also stored as braze_id
  email: 'visitor@example.org'
  // subscriptionStatus was removed from identify calls
});
Recommended target shape: course_viewed with granular properties
analytics.track('course_viewed', {
  course_slug: '/course/blue-ridge-backpack-rock-climb/',
  course_title: 'Blue Ridge – Backpack & Rock Climb',
  school: 'NCOBS',
  program_line: 'Open Enrollment',
  course_type: 'classic',
  age_range: '14-16',
  region: 'North Carolina',
  activity: 'backpacking, rock climbing',
  course_duration: 'two weeks',
  landing_source: 'paid_social',
  page_path: '/course/blue-ridge-backpack-rock-climb/',
  page_url: 'https://www.outwardbound.org/course/blue-ridge-backpack-rock-climb/',
  ad_consent: true,
  event_id: '<unique id>'
});

Illustrative only. The values show the proposed structure, not a captured event.

7. What's next

1 · Validate

Test every critical event end to end: Segment → GA4 → Google Ads → Meta CAPI → Braze, using one shared test checklist.

2 · Fix

application_completed, schedule-call events, catalog title clicks, and course_engaged frequency.

3 · Reconcile

Map legacy conversions to the Segment events and set GA4 key events to match.

4 · Enrich

Add School, program, age, region, duration, and landing-source properties, plus flat catalog filter values.

5 · Expand

Add new events that Schools request, using the intake questions below.

8. Requesting new events (for Schools)

What action on your School's pages would you like to measure or respond to that we can't clearly see today? Example areas:

Please include with each request

  1. The visitor action and the page where it happens
  2. The decision you'll make with this data
  3. Where you need it: GA4 reporting, ad optimization, an ad audience, or Braze messaging
  4. The details (properties) that would split it into useful groups

Event request form

Prefer a full window?

Takes about 3 minutes. Tell us the visitor action, the page where it happens, the details you'd want captured, and how you'll use the data. Requests go straight to the national marketing team.

  • School and requester
  • Event name and what triggers it
  • Properties and an example URL
  • Conversion / key event and priority
Open the form in a new tab → Opens in a new tab