Data Model & WordPress Integration

How we model our training courses in HubSpot, how we connect HubSpot to our website, and one design decision we want you to sanity-check.

Marketing & Sales Hub Professional~11.4k contactsToP / HUE facilitation training

Why we're hereThree things to validate

The model

Does our object structure for cohort-based courses make sense — and is the native Courses object the right home for it?

Linking by association

We connect records only through associations — avoiding copying data between them. Is that the right call?

WordPress integration

Our course-creation flow drives the website (events + tickets) from HubSpot. Is the approach sound?

The modelOne Course at the center

A Course = one cohort: a dated, located class (TFM, HCS, MToP…). Everything else hangs off it.

  • Contacts — the attendees
  • Deals — the orders / buyers
  • Companies — districts & institutional buyers
  • Products & Line Items — the tickets & revenue
  • Sessions — for multi-day courses (e.g. MToP)

HubSpot is the source of truth. The website reflects it.

COURSEthe cohort — cohort_code
↑ associated to ↓
Contactsattendees
Dealsorders
Companiesorgs
Productstickets

Our biggest question for youAssociations vs. “stamping” — are we right?

Question 1. We link a contact to a course by associating them to the Course record — not by copying the course details onto the contact. Is that the right call?

Our approach today

One association per relationship. The data lives once, on the Course — always current, never duplicated onto contacts or deals.

Question 2 — if the need arises

If we do need course data on a contact (e.g. an email token), is the right move an automatic workflow that re-stamps on every change — so the copied value triggers on any update and can never go stale?

HubSpot's guidance favors associations over duplicated properties — so we think we're right. The open question is the escape hatch: when a stamp is unavoidable, are workflow-maintained stamps that refresh on any change the pattern you'd use?

WordPress integrationHubSpot authors, the website reflects

HubSpot Coursecreated & owned here
WordPress Event + Ticketsbuilt automatically from the Course
Registrationwebsite checkout
Back into HubSpotattendee linked to the Course

Down: Course → Website

Create the Course in HubSpot → the event page, dates, venue, and tickets appear on hue.life. No one hand-builds events anymore.

Back: Registration → HubSpot

Someone registers → they come back as a Contact associated to that Course, with the order as a Deal. The link closes the loop.

WordPress integrationEstablished plugins + one custom bridge

Off-the-shelf plugins

  • The Events Calendar — the public event pages & calendar
  • Event Tickets Plus — turns each tier into a sellable ticket
  • WooCommerce — checkout, payment & orders
  • MakeWebBetter — the established WooCommerce↔HubSpot sync; brings orders, contacts & line items back into HubSpot

HueLife Course Sync

The one piece we built — a thin bridge.

  • Reads the HubSpot Course → builds & updates the event + tickets
  • After MakeWebBetter syncs an order, it adds the association linking the attendee to the Course

Off-the-shelf for events, ticketing, checkout & the HubSpot sync — plus a thin custom bridge so HubSpot stays the single source of truth. Is that the right division of labor — and is MakeWebBetter the sync you'd use?

The course-creation processFrom one HubSpot record to a live, sellable event

1Author the Coursecode, type, dates, venue, tiers
2Flip wp_readythe go-live switch
3Plugin builds itTEC event + the right tickets
4Goes live on hue.lifepublished from the Course
5Reviewed on websitestaff confirm the page looks right
6Registrations flow backattendee associated to the Course
7Stays in syncedit → updates; cancel → off calendar

Orange = HubSpot owns it · purple = the website. One record in, a live sellable event out.

The fields built to make this workA handful of Course fields drive the website

FieldWhat it drives on the website
cohort_codeThe unique class ID — ties the event, tickets & orders together
class_templateWhich content template the event page is built from
has_tiersWhether to build 4 tier tickets or a single ticket
session_start / end, venue_*Event date, time & location
wp_readyThe go-live switch — nothing builds until it's on
external_event_idWritten back by the plugin — the link to the live WP event
event_urlWritten back too — the public link to the live event page on hue.life

These exist specifically to serve the integration. Everything else about a cohort is either a normal Course field or lives on the association. Are we missing anything — or carrying fields we shouldn't?

A field-hygiene question for youWhere did 615 contact properties come from?

Only about a third are ours by hand. The rest are HubSpot defaults and one integration's auto-installed bundle.

SourceFields
HubSpot defaults (every portal ships these)407
MakeWebBetter e-commerce bundle — auto-installed102
Team — course / email project53
Forms & campaigns, 2024–26 (registration, scholarship, a book push)~50

The flag

Half of our 208 custom fields are MakeWebBetter's auto-installed e-commerce set — abandoned cart, RFM, ROI tracking, products-bought.

A sample showed ~80% completely empty — they power cart-recovery & RFM features we don't run.

Question: keep the full bundle, or trim it back?

What we'd love your read onThe questions that matter to us

1 · The Courses object. Right home for a cohort on Professional — or would you model it differently?

2 · Associations, exclusively. Are we right to link everything by association and refuse to duplicate data onto records?

3 · The integration split. Off-the-shelf plugins for events/tickets/checkout + MakeWebBetter for the WooCommerce↔HubSpot sync + a thin custom bridge, HubSpot as source of truth — sound architecture, and the right sync plugin?

4 · The fields. Is our small set of website-driving Course fields the right set — too many, too few, or named wrong?

1 / 0
← → arrows or space · F fullscreen