Top Rep Training. Course Enrollment Automation

PROVEN for Home Services. End-to-End Chain Documentation.

Live reference for the GHL Payments to LearnWorlds enrollment chain. When a customer purchases the PROVEN for Home Services course on GHL, this chain runs automatically and enrolls them in the LearnWorlds course within 30 to 60 seconds.

CHAIN STATUS: LIVE VERIFIED: 2026-05-14 PRICE: USD 997

Table of Contents

  1. Chain Flow Diagram
  2. System Inventory (IDs, URLs, locations)
  3. Tag String Convention (the linchpin)
  4. GHL Workflow [3.3.7] Step-by-Step
  5. Zapier Zap Step-by-Step
  6. LearnWorlds Automation Rule
  7. Test Procedures
  8. Troubleshooting and Common Pitfalls

1. Chain Flow Diagram

The 4-piece chain. Each box is an independent system that must be configured. The tag string is the single shared key that connects all 4 pieces.

Quick links to live systems

100%
Scroll to zoom. Drag to pan. Double-click to zoom in.

2. System Inventory

Every ID, URL, and location needed to debug, audit, or modify the chain.

GHL (Top Rep / Scaling Engine white-label)

FieldValue
Top Rep GHL Location IDdTYhTEq6MOhUBvzfpCyp
White-label hostapp.scalingengine.com (canonical: app.gohighlevel.com)
GHL Payments Product (PROVEN)6a06288607823902120abb50
GHL Workflow ID5262f353-39a4-45f1-8fd6-f5d601b9685d
GHL Workflow Name[3.3.7] PROVEN for Home Services Purchased
Workflow Deep Linkapp.gohighlevel.com/location/dTYhTEq6MOhUBvzfpCyp/workflow/5262f353-39a4-45f1-8fd6-f5d601b9685d
Workflow TriggerPayment Received
Workflow Trigger Filterpayment.global_product_ids is-in-array [6a06288607823902120abb50] AND payment.payment_status == succeeded
Workflow StatusPublished

Zapier

FieldValue
Catch-hook URLhttps://hooks.zapier.com/hooks/catch/16934346/4yn06qn/
Zapier Account16934346 (Top Rep Zapier workspace)
Zap Steps1. Catch Hook (Webhooks by Zapier) - 2. Create User (LearnWorlds) - 3. Add Tags to User (LearnWorlds 2.0.10)
Zap StatusPublished / Live

LearnWorlds

FieldValue
School URLschool.topreptraining.com
School ID65e51ff4db8f6d74873a175a
Course ID (API path)proven-for-home-service-clone
Course Slug (public URL)proven-for-home-services
Course TitlePROVEN for Home Services
Course Accessprivate during testing, change to paid at launch
Automation NameEnroll on Tag: PROVEN for Home Services
Automation Trigger Tag[customer] proven for home services
Automation ActionEnroll in product PROVEN for Home Services
Automation StatusEnabled, Asynchronous

3. Tag String Convention (the linchpin)

The tag is the linchpin. The same exact string appears in 3 places. If any one of them differs by even one character (case, brackets, hyphens, spacing), the chain silently breaks at that step. No error message. Just no enrollment.

The exact string

[customer] proven for home services

Rules

The 3 places it must match

PlaceWhere it livesVerify in
1. GHL workflow Add Tag step Step 5 of workflow [3.3.7], attributes.tags[] array Open workflow in GHL builder, click Add Tag step, see Tags list
2. Zap Add Tags to User step Zap Step 3 Configure tab, Tags input field Zapier UI, open Step 3, Configure tab
3. LW Automation Rule trigger tag LW admin, Settings > User Roles > Automations > Enroll on Tag: PROVEN for Home Services LW admin UI, click trigger block, see the tag chip on the right
Watch out: LW prefix-stripping pitfall. The LW automation tag input chip can show just proven for home services (stripped of the [customer] prefix) even when you typed it in correctly. After saving, ALWAYS reopen the automation and check the trigger tag chip shows the full bracketed string. If it's missing brackets or the [customer] prefix, the rule will never fire. This pitfall delayed our launch by an hour on May 14, 2026.

4. GHL Workflow [3.3.7] Step-by-Step

Workflow has 9 sequential steps. All trigger off the payment_received event filtered to PROVEN product. Status: Published.

1Send notification to Slack
Channel: #03_payments | Integration: Top Rep Training - cthokey | Step ID: 3172019c-e044-404b-8fcf-d06be00f085c

Message: "New Sale! [PROVEN for Home Services]" with revenue, contact, company, email, phone, and Scaling Engine conversation link.

2Internal Notification (email)
Recipients: Jet Ruiz, Noah Wessel, Chuck Thokey, Chris Thokey | Step ID: 8e0ac07d-1185-4dcc-b8e1-fa5fce08cf30

Subject: New Sale! [PROVEN for Home Services] - {{contact.name}} ({{contact.company_name}}) | {{right_now.middle_endian_date}}

Body: Buyer info, order total, contact links, Scaling Engine conversation link.

3Update Field: Date Of Sales Rep Course Purchase
Field ID: WGC4yJmQCpgqhquy7wNN | Field Key: contact.date_of_sales_rep_course_purchase | Step ID: aa263e03-a655-49fe-b219-f2ff7cee48fa

Sets the field to today's date. Generic field, applies to any sales rep course purchase (Champion or PROVEN).

4Add to Sold! Workflow
Step ID: cc062c1d-bc02-4d8e-a7e4-2bf15304a6db

Cascades the contact into the post-sale follow-up workflow. Generic, no PROVEN-specific config.

5Add Tag
Step ID: 91f07702-a368-413d-b1df-8e802eeb3b45

Tags applied:

6Update Opportunity Value & Mark Won
Pipeline ID: 5ngHNDhvK2DSWK8s7gpz | Step ID: 62fdb790-a6df-4f3c-aef4-64fcf24a3ba2

Monetary Value: $997. Status: Won.

7Zap Webhook (POST to Zapier)
Step ID: ad42b94d-1f62-4f4c-9907-e5bd1f5dda1d | Method: POST | Body: empty (GHL sends default contact + payment payload)

URL: https://hooks.zapier.com/hooks/catch/16934346/4yn06qn/

8Wait 30 Seconds
Step ID: 8ee77886-fe47-4990-8cc0-9f1109abacd5

Buffer to let the Zap chain complete LW user creation + tag application + automation rule firing before sending the welcome SMS.

9SMS to Customer
Step ID: 9de40bf5-6757-485f-8d0e-0e5c093d1074

Body: Welcome message with 3 next steps. Points customer to Flight School dashboard at school.topreptraining.com/start.

5. Zapier Zap Step-by-Step

1Catch Hook (Webhooks by Zapier)
URL: https://hooks.zapier.com/hooks/catch/16934346/4yn06qn/

Listens for the POST from GHL workflow Step 7. GHL sends a flat payload with contact fields at root (first_name, last_name, email, phone, etc.) plus payment context (total_amount, global_product_ids, etc.).

2Create User (LearnWorlds)
App: LearnWorlds (2.0.10)

Required mappings:

Creates the LW user account if not already exists. Note: behavior on existing users (whether the action errors or upserts) depends on the LW Zapier app version. Test before launch.

3Add Tags to User (LearnWorlds)
App: LearnWorlds (2.0.10), action: Send Tag to LearnWorlds

Required mappings:

Adds the tag to the LW user. This is what triggers the LW automation rule to enroll them.

Side effect: LW auto-tag. When Step 2 creates a new LW user, LearnWorlds itself applies [lw] Flight School Free automatically (school-level default automation). The PROVEN buyer ends up with both [lw] Flight School Free and [customer] proven for home services. If this is undesirable, add a separate Zap step to remove [lw] Flight School Free after Step 3.

6. LearnWorlds Automation Rule

SettingValue
NameEnroll on Tag: PROVEN for Home Services
StatusEnabled
ModeAsynchronous (recommended)
Trigger EventTag is added
Trigger Tag[customer] proven for home services (full bracketed prefix required)
Run only if (filter conditions)None (no extra conditions)
ActionEnroll in products: PROVEN for Home Services (course ID proven-for-home-service-clone)

Located in LW admin: Settings > User Roles > Automations.

7. Test Procedures

Synthetic test (no real customer needed)

Fire a flat GHL-shaped payload directly at the Zap catch-hook. This bypasses GHL entirely and tests just Zap to LW.

// .mjs script, run with `node test.mjs`
const ZAP_URL = 'https://hooks.zapier.com/hooks/catch/16934346/4yn06qn/';
const TEST_EMAIL = `paul+proven-test-${Date.now()}@paulai.tech`;
const payload = {
  contact_id: 'TEST_' + Date.now(),
  first_name: 'Paul',
  last_name: 'Test',
  full_name: 'Paul Test',
  email: TEST_EMAIL,
  phone: '+15555550199',
  company_name: 'Test Co.',
  tags: '[customer] course, [customer] proven for home services',
  total_amount: '997',
  payment_status: 'succeeded',
  global_product_ids: '6a06288607823902120abb50',
  product_name: 'PROVEN for Home Services',
  workflow_id: '5262f353-39a4-45f1-8fd6-f5d601b9685d',
  workflow_name: '[3.3.7] PROVEN for Home Services Purchased',
  location_id: 'dTYhTEq6MOhUBvzfpCyp',
};
const res = await fetch(ZAP_URL, {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify(payload),
});
console.log(res.status, await res.text());

Then verify enrollment in LW via API:

// Uses .scripts/learnworlds/ toolkit
import { apiFetch } from './auth.mjs';
const enrollees = (await apiFetch(
  `v2/courses/proven-for-home-service-clone/users?items_per_page=100`
)).data;
console.log('PROVEN enrollees:', enrollees.length);
console.log(enrollees.find(u => u.email === TEST_EMAIL));

Live in-GHL test

  1. Open GHL contacts. Click + Add Contact. Fill name, email, optional phone. Save.
  2. Open the new contact. Click Workflows tab. Click Add to Workflow. Select [3.3.7] PROVEN for Home Services Purchased.
  3. Watch the chain fire (full notifications go out: Slack, internal email, opportunity, SMS). Within 60 seconds the contact's email should appear as enrolled in the LW PROVEN course.

Real $1 test purchase

Most realistic test. Make an actual GHL Payments purchase using a $1 test SKU on the PROVEN product. Validates that GHL sends the exact webhook payload shape the Zap expects (versus a synthetic guess).

8. Troubleshooting and Common Pitfalls

SymptomLikely CauseFix
Customer paid, no LW enrollment, no Slack alert GHL workflow trigger filter doesn't match payment Check workflow [3.3.7] trigger filter. Verify payment.global_product_ids still set to 6a06288607823902120abb50.
Slack + email fire, but no LW enrollment Zap not receiving payload OR Zap step failing Check Zapier Run history for the catch-hook. If no event, verify GHL workflow Step 7 webhook URL is correct. If event present but Zap failed, check error message on the failed step.
Zap runs successfully, LW user created and tagged, but NOT enrolled in PROVEN LW automation rule trigger tag mismatch (most common) Open the LW automation, click the trigger block. Verify the tag chip shows full [customer] proven for home services (with brackets and prefix). LW UI sometimes strips the prefix on save.
Zap Step 2 (Create User) errors with "user already exists" Repeat purchaser already has an LW account Verify Champion zap behavior for handling existing users. Likely needs "Continue on error" config OR a Find User step before Create User.
SMS Step 9 doesn't send Contact has no phone number, OR GHL SMS provider misconfigured Verify the contact has a valid phone number. Check GHL SMS settings for the location.
Internal email Step 2 has wrong recipients after team change Hardcoded user list in workflow step Edit Step 2 in workflow [3.3.7]. Update the Selected Users list (Jet, Noah, Chuck, Chris).
Debugging order (when chain breaks): Always check in this order. Each step's success is a precondition for the next.
  1. GHL workflow execution log (workflow [3.3.7] > Execution Logs tab)
  2. Zapier task history (Zap > Task History)
  3. LW user existence and tag list (use .scripts/learnworlds/ toolkit)
  4. LW course enrollment (cross-check enrollee list)
  5. LW automation rule state and trigger tag (re-open in admin UI)