CASE STUDY • hubspot • integration & custom build

A course platform and a CRM, wired together to track every enrollment.

Learn how an online education business connected Thinkific and HubSpot using Make as middleware—building a scalable custom enrollment object, five targeted data routing scenarios, and a comprehensive end-to-end quality pass against a 20-point testing checklist.

PROJECT SNAPSHOT

CLIENT TYPE

Online course business with an established HubSpot CRM

INDUSTRY

Online education & coaching

ENGAGEMENT

Defined-spec execution build

TIMELINE

2 Weeks, now ongoing maintenance

TOOLS

  • HubSpot

  • Thinkific

  • Make

SKILLS

  • CRM Architecture

  • Custom Objects

  • API/Webhook Integration

  • Middleware Architecture

INTEGRATIONS

  • Stripe Payments

MIGRATED FROM

  • No Migrations

- THE problem

What was broken and what they needed.

The company ran its online learning academy on Thinkific and managed its core customer relationships inside HubSpot, but the two applications were completely siloed. When a student enrolled in a class, hit a milestone, stalled halfway through a lesson, or applied a coupon code, none of that behavior reached the CRM. This left the marketing and sales teams blind to active student progression.

What made this specific engagement unique was the client's level of preparation. They didn't need assistance mapping out their business goals; they had already produced a highly detailed, 28-page technical implementation blueprint. Every custom HubSpot property, data variable, webhook payload, and middleware routing logic was completely mapped out on paper. They were looking for an advanced systems operator to build their design exactly to spec.

The core engineering restriction was deep custom-object experience. Student enrollment variables could not be dropped into flat, loose contact fields that get overwritten during future classes; the architecture required a standalone custom object table natively associated with individual profiles. The build demanded clean REST API configurations, precise webhook conditioning, and error-proof routing.

The Solution: The technical system was configured and launched exactly to the client's documentation. By building a native enrollment custom object inside HubSpot and managing Thinkific payload variables through five dedicated Make scenarios, the new pipeline automates user data delivery, flags student lesson retention issues, and maps user behavior under a single source of truth.

- THE SYSTEM

How it connects

course event webhooks routed to object + contact HubSpot form submission triggers Thinkific enrollment THINKIFIC the course platform enroll · progress · complete purchase · coupon redemption FIRES THE WEBHOOKS MAKE the middleware · 5 scenarios receives + parses each webhook conditional routing by event type REST API calls to both platforms TRANSLATES BETWEEN THE TWO HUBSPOT the CRM · system of record enrollment custom object 6 native workflows property groups on the contact WHERE IT ALL LANDS ENROLLMENT OBJECT associated to each contact one record per course enrollment enrollment · progress · completion purchase / coupon · form → enroll 5 SCENARIOS

- the build

Key highlights from the build.

01
Enrollments became a custom object — not a pile of contact fields. One learner takes many courses. Flat fields would overwrite the last one.
See the logic +Close −

Cramming recurring student data into standard contact fields ruins a CRM's long-term database integrity. Because a single user can enroll in multiple courses over their lifecycle, flat fields would let newer signups overwrite previous completion data.

We engineered a standalone HubSpot custom object with its own property schema, so the system scales sideways as new courses are added to the catalog.

HubSpot · Enrollments
EN
Enrollment — Foundations of Nutrition
Custom object · record #4827
About this enrollment
Course nameFoundations of Nutrition
Enrollment statusActive
Progress62%
Enrolled date03/14/2025
Completion date
Associations
Contact1 associated
Other enrollments2 records
HubSpot custom object · one record per enrollment
02
Five Make scenarios, each routing one kind of course event. One catch-all automation crashes under mixed payloads. Five isolated ones don't.
See the logic +Close −

Dumping diverse webhooks into a single catch-all scenario creates a fragile pipeline that crashes under mixed payloads. The middleware was divided across five isolated Make scenarios.

Each one parses a single event type \u2014 progress, enrollment, payment \u2014 so a bug in one pathway never takes down the rest.

Make · Scenarios
M
Thinkific → Enrollment created
Last run 2m ago · success
M
Progress tracking sync
Last run 11m ago · success
M
Course completion handler
Last run 34m ago · success
M
Payment & coupon redemption
Last run 1h ago · success
M
Stall / inactivity webhook
Last run 2h ago · success
Make middleware · five isolated event routers
03
Six native workflows turned synced data into action. Clean data is half the job. The CRM has to act the second a record lands.
See the logic +Close −

Syncing clean data into a CRM is only half the battle; the platform has to act the second a new record lands. We deployed six targeted object-based workflows natively inside HubSpot.

They watch the live state of a learner to fire welcome sequences, launch retention tasks the moment someone stalls, and alert sales on high-intent behavior.

HubSpot · Workflows
Student welcome sequence
1,284 enrolled
On
Enrollment record → contact sync
1,284 enrolled
On
Course stall → retention task
317 enrolled
On
Completion → next-course offer
642 enrolled
On
Paid program onboarding
208 enrolled
On
Sales alert — high-intent learner
96 enrolled
On
Six HubSpot workflows · triggered by live state
04
Contact properties were grouped, not dumped in one list. Unstructured custom fields turn a profile into a wall of noise.
See the logic +Close −

Flooding a database with custom properties without structure turns profiles into unreadable noise. We isolated the backend fields into clearly labeled HubSpot property groups.

Relationship metrics sit apart from core organizational data, so any employee opening a file sees a clean, logical breakdown instead of a wall of fields.

HubSpot · Contact
JR
Jordan Rivera
Learner relationship
Lifecycle stageCustomer
Active enrollments2
Lifetime courses4
Last activity2 days ago
Course engagement
Avg. progress71%
Completions3
Stalled courses0
Organization data
Company
SourceThinkific signup
OwnerCoaching team
HubSpot property groups · a readable profile

- THE LIFECYCLE

How the client moves through it.

Click any stage to see what the system did at that point — and which part of the operation owned it.
Marketing
HubSpot
Thinkific
Make
Coaching
Sales
◆ THE COMMIT — ENROLLMENT

- the SHIFT

What changed for the business.

FOR THE OWNER

Course activity lives in the CRM now.

Enrollment, progress, and completion all flow into HubSpot as structured records — so the CRM finally reflects where each contact actually is in their learning.

FOR THE TEAM

Automation that fires on real state.

Welcome sequences, stall detection, and sales alerts trigger off the enrollment object, not a manual guess — so the right follow-up happens the moment it should.

FOR THE LEARNER

Seamless — through the move and after.

Members kept their access, subscribers kept their billing, and buyers get instant delivery. The migration happened underneath them without anyone noticing.

READY TO WORK?

Ready to work together?

Now that you've seen what we can do for other clients,

let's get started on your project!

Helping online professionals build the backend systems that reflect the quality of the work they actually do.

EXPLORE

HighLevel resources for service pros

On this side of the internet we fully celebrate all colors, genders, and lifestyles and fully back minority and LGBTQ led businesses.

And honey, if you can’t roll with that consider this one less tab in your browser to keep open.