← Blog

GoHighLevel 10 min read

GoHighLevel communities and courses: letting members in automatically

A member pays but can’t get into the group or the course. In GoHighLevel, each has its own door. Here’s how to automate access and where members get stuck.

GoHighLevel

Illustration for the article: GoHighLevel communities and courses: letting members in automatically

What you’ll take away

You can build a community and a course in GoHighLevel in an afternoon. The harder part is making sure people get in on their own after paying, without an apology email from you. After reading this, you’ll know which door leads where and which traps to watch for before launch.

  • I’ll show you why a member of a private paid group doesn’t get into the group right after paying.
  • You’ll see how the product, the offer, and the workflow fit together for a course, and why a published course on its own lets nobody in.
  • You’ll learn why a contact with emails blocked gets access but never receives the login email.
  • And you’ll know what in a community you can translate with your own code and what in gamification you have to keep an eye on yourself.

You launch a paid group in GoHighLevel, send out the link, and the first person pays. The payment comes in, and a confirmation goes out to them. But they’re nowhere to be found in the group. Nothing broke: the group is private, and after the payment, their request to join is waiting for you.

GoHighLevel has more spots like this between payment and content. Communities and courses are two separate modules, and each lets people in through a different door. If you know the doors in advance, you can set up access so it runs on its own. I run my own community, AI Podnikatelé (Czech for “AI entrepreneurs”), in the Communities module too, and I build courses by machine through the API, so I know most of those doors from my own practice.

Community vs. course: who lets a member in

What you’re dealing withCommunityCourse
Access comes fromthe group itself; when you sell elsewhere, the Grant Group Access actionan offer, not the course itself
After paymenta public group lets them in right away, a private one waits for approvalonly a workflow with the Course Grant Offer action lets them in
Where members get stuckan unapproved join requestan offer still in draft, unpublished lessons
Leavinga canceled subscription removes them automaticallythe Course Revoke Offer action
The chain is longer for a course. A published course lets nobody in on its own. The offer opens the door.

Two doors into a paid group

You set the group’s price in its settings, on the Subscriptions tab. It can be a one-time payment or a monthly or yearly subscription. Free trial days are only available for subscriptions. Payments run through GoHighLevel’s payment module, meaning Stripe, NMI, or Authorize.net, and you can try out the whole flow in test mode before you open it to the public. I cover how to connect a gateway in my article on payments in GoHighLevel.

The group type decides when a person gets in:

  • Public paid group: the person pays and becomes a member right away.
  • Private paid group: the person pays, and their request waits on the People tab until an admin approves or rejects it.

A private group makes sense when you want to pick members by hand. But then someone has to keep approving requests, or a paying member is left waiting outside. Leaving, on the other hand, is automatic. When a member cancels their subscription, whether in GoHighLevel or directly in Stripe, they get a confirmation, you get a notification, and the system removes them from the group on its own.

Meme: a satisfied business owner carries a single little house under his arm while three other houses around him fade away. The top reads “One account, not three,” and the bottom reads “Community, courses, and email on one database. Not three windows you copy data between by hand.”

The third door goes through a workflow

Not every sale happens directly in the group. You might sell the community through a form in a funnel, give it away as a bonus with a course, or open it up after a consultation. In those cases, a workflow adds the member to the group.

GoHighLevel has two actions and two triggers for this:

  • Grant Group Access and Revoke Group Access are actions that grant or remove access.
  • Group Access Granted and Group Access Revoked are triggers that only listen for a change in access.

It’s easy to mix these up. A trigger lets nobody in, it only finds out that someone is in. A join request (Requested to Join Group) is a third thing altogether and grants no access at all. So a sensible setup looks like this: a payment or a tag starts the first workflow with the Grant Group Access action, and the Group Access Granted trigger kicks off a second one, the welcome workflow.

Meme: a CRM contact card for Petra Nováková with the tags Member, Course 101, and Subscriber, showing progress of 3 of 6 lessons and a welcome automation running after she was added to the community. The text at the bottom reads “Every member is also a contact in your CRM. You know their email and where they got stuck in the course.”

The chain is longer for courses, and I got to know it best while building courses through the API. That way, I upload a 19-lesson course in a single import instead of six hours of clicking. And imported courses are exactly where you can see what access is made of.

How much clicking a course import saves

6 hours
of clicking, replaced by one import of a 19-lesson course
That’s why I build courses by import, not by clicking. Just don’t run it twice: every run creates a new course.

Offer

Your ticket to a course in GoHighLevel. The course itself is just a product with lessons and lets nobody in, even when it’s published. A person only gets access to an offer that contains the course. One offer can include several courses.

The whole chain:

  1. The product, meaning the course with its categories and lessons.
  2. The offer, which a course created by hand in the app gets automatically. A course uploaded by import doesn’t have one, so you have to create it.
  3. A workflow with the Course Grant Offer action, which lets the person into the offer. The Course Revoke Offer action takes them out again.

Three traps lie along the way. An offer in draft won’t show up in the dropdown of the Course Grant Offer action, so publish it. Publishing the offer doesn’t let anyone in or send anything, by the way. The second trap: a published category doesn’t publish its lessons. Each lesson has to be switched on separately.

The third trap surprised me the most. A contact with emails blocked (DND) gets access to the course but doesn’t receive the system email with the login. I verified this with a pilot test: the blocked card got access and no email, while a control card without the block got the email within ten seconds. So for people who haven’t given you consent yet, sort out consent first and only then add the tag that triggers access.

Test it on your own contact

Before you let the access workflow loose on people, leave it as a draft and run it with Test Workflow on your own contact. Then log in as a member and go through the first lesson. An admin in preview doesn’t see what a member sees, and ten minutes of testing saves dozens of apology emails.

Moving from Skool and other platforms

Meme: a frightened business owner clings to the chimney on the roof of a little house that stands entirely on a giant stranger’s palm. The top reads “A house on someone else’s land,” and the bottom reads “A group on someone else’s platform sits on borrowed land. Someone else sets the rules and your reach.”

A ready-made importer, which you’ll find in the group settings, brings a group over from Skool. It works in two steps. First, it generates a CSV of members, and some of them are missing an email address. You fill those in, but don’t change the profile ID, because that’s what members are matched by. Only once the members are in do the posts follow, and they get matched to their authors.

Courses from other platforms come over by import through the API. The lesson description is saved as HTML, not Markdown, and the import isn’t idempotent: every run creates a new course. Run it twice and you have the course twice. I describe how to decide what’s even worth moving from a big library in my article on migrating lessons.

Meme: a smiling business owner carries a tall stack of boxes from an apartment block to his own lit-up little house. The top reads “Move under your own roof,” and the bottom reads “Bring your members and courses under your own brand. The import brings them along, so you don’t rebuild.”

Gamification without illusions

Points in a community come from likes: every like on your post or comment is one point. There are nine levels at most, and you can rename them, but not the point thresholds. Level 2 takes 5 points, level 9 takes 33,015. A level applies only within one group; in another group, the member starts again from level 1.

Meme: the AI Podnikatelé community window with the post “New program opens on Monday” delivered to all 1,240 members and a leaderboard of the week’s most active members, with “Petra N. reached level 4” below it. The text at the bottom reads “Your space, your rules. Every member sees your post, and no feed can bury it.”

Rewards are the weaker spot. You can add three at most, only as text, and you can’t tie them to a level. If you promise “a bonus course at level 5,” you’ll have to unlock it by hand.

In your language and under your brand

Communities in GoHighLevel speak English. You can write channel and level names in your own language (Czech, in my case), but system labels like Members stay in English. For the rest, there’s custom code. Each group has fields for custom CSS and JavaScript in its settings, on the Branding tab under Advanced Options. The code only loads after you turn on the Live Mode switch, and if you break something, the group’s address with ?customCode=false loads it without the code.

The most common request is hiding the member count, so nobody multiplies it by the membership price. GoHighLevel can’t do that natively, but one line of CSS can. It’s cosmetic, not security, though: the number still comes from the server, and the member list on the Members tab stays visible. In the JavaScript field, I also avoid the < and & characters, because code that worked in the browser console didn’t take effect there.

Courses have their own CSS and JavaScript fields in the course appearance settings. With them, you can recolor the player to match your brand and use your own script to translate even buttons like Mark As Complete. I’ve written up separately everything in GoHighLevel that needs translating into Czech.

What a GoHighLevel community can do and what you need to watch yourself

  • Paid membership one-time, monthly, or yearly, with trial days on subscriptions.
  • When someone cancels a subscription, the system removes them from the group on its own.
  • Points for likes and nine levels you can rename.
  • An importer that brings a group over from Skool, posts included.
  • You can’t tie a reward to a level, so you unlock it by hand.
  • System labels like Members stay in English, and you translate them with custom code.
Membership, cancellations, and migration are covered. Rewards and translation are on you.

Who it’s not worth it for yet

If you’re gathering your first few dozen people and still looking for a topic, stay where you meet them. A Facebook group is good for meeting people. Moving pays off once the community brings in income and losing it would hurt. Whether you go with GoHighLevel or another course platform depends mainly on who your contacts should belong to.

Meme: a desperate business owner in a suit presses his palm against a glass wall, behind which a crowd of his group’s members is having fun, and he holds an envelope he has no one to send to. The top reads “When your audience is ‘borrowed’,” and the bottom reads “If your group got shut down today, how many members could you reach tomorrow? Without email, none.”

Be careful with a course in the middle of a run, too. I wouldn’t move people from a program that’s currently running until it ends. A coach or instructor who also wants bookings and payments will find the whole path in my article GoHighLevel for coaches.

Access in a nutshell

  1. A public paid group lets a member in right after payment; a private one waits for your approval.
  2. A sale outside the group is completed by a workflow with the Grant Group Access action.
  3. A course is opened by an offer and the Course Grant Offer action; a published course on its own isn’t enough.
  4. A contact with emails blocked gets access, but not the login email.
  5. Before launch, go through the whole path on your own contact as a member.

You can build a community and a course quickly. Where you lose money and trust is at the doors, and those are worth one extra afternoon. If you already have GoHighLevel up and running and need to finish the access setup, I can help at €80–160 an hour, with no retainer.

FAQ

How do I let a member into a paid community in GoHighLevel?

In a public paid group, a person becomes a member right after paying. In a private one, their request waits until an admin approves it. When you sell the community elsewhere, for example through a form in a funnel, a workflow with the Grant Group Access action adds the member to the group.

Why can’t a member see the course after paying?

A course on its own lets nobody in, even when it’s published. Access is granted through an offer and a workflow with the Course Grant Offer action. A course uploaded by import has no offer, so you have to create one and publish it.

Can I move a community from Skool to GoHighLevel?

Yes, GoHighLevel has an importer for Skool groups. It first brings over the members from a CSV file where you fill in missing email addresses, and only then the posts, which get matched to the members.

Can I hide the member count in a GoHighLevel community?

Not natively. You can do it with one line of custom CSS in the group settings. But it’s cosmetic, not security: the number still comes from the server, and the member list on the Members tab stays visible.

Who shouldn’t bother with a community in GoHighLevel?

Anyone who is still gathering their first few dozen people and looking for a topic. Until the community brings in income, a place where you meet people is enough. Moving pays off once losing the community would hurt.

Want something like this?

I built this system to order, and I can build one for you too. Tell me what caught your eye.

Keep reading

Looking for something specific?

Describe what you’re dealing with in one sentence, and I’ll find the articles that help.