How to Set Up Recurring Billing When Reselling GoHighLevel

Intermediate6 min readUpdated on 08/08/2026

If you're reselling GoHighLevel under a white-label arrangement, one of the most critical operational tasks is configuring recurring billing for your clients. Without a reliable billing setup, you risk revenue gaps, manual invoicing headaches, and client churn caused by unclear payment expectations. This guide walks through the key steps and considerations for getting recurring billing right inside the GoHighLevel ecosystem.

Understanding the Billing Architecture in GoHighLevel

Before touching any settings, it helps to understand how billing is layered in GoHighLevel's white-label (Agency) model.

GoHighLevel operates on a SaaS Mode model for agencies. When you enable SaaS Mode, you can charge your sub-accounts (clients) directly through the platform using Stripe as the payment processor. This means:

  • Your agency account is billed by HighLevel Inc. on its own schedule.
  • Your clients are billed by you, through your connected Stripe account.
  • HighLevel Inc. has no direct billing relationship with your end clients.

This separation is important. You set your own prices, your own billing intervals, and your own plan names. However, Stripe must be connected and configured correctly before any recurring charge can be processed.

Note: SaaS Mode availability and specific features may vary depending on your agency plan tier. Verify what is included in your current plan before proceeding.

Step 1 — Connect and Configure Stripe

Recurring billing in GoHighLevel's SaaS Mode runs entirely through Stripe. If Stripe is not connected, no automated recurring charge will fire.

  1. Log in to your Agency Dashboard.
  2. Navigate to SettingsPayments (or Billing depending on your current interface version).
  3. Click Connect with Stripe and complete the OAuth flow on Stripe's side.
  4. Once connected, confirm that the Stripe account shown is the one you intend to use for client billing — not a test account.
  5. Enable Stripe Test Mode first if you want to validate the flow before going live. Switch it off before charging real clients.

Common mistake: Connecting a personal or unverified Stripe account. Stripe may place holds on payouts for new accounts with sudden recurring revenue. Make sure your Stripe account is fully verified and in good standing before onboarding clients.

Step 2 — Create and Configure SaaS Plans

With Stripe connected, you can define the plans your clients will subscribe to.

  1. In the Agency Dashboard, go to SettingsSaaS Configurator (the label may differ slightly across interface versions).
  2. Click Add Plan or Create New Plan.
  3. Fill in the following fields:
  • Plan Name — This is what your client sees on the subscription portal.
  • Price — Set your monthly or annual amount. GoHighLevel supports both billing intervals.
  • Features/Limits — Define limits such as number of sub-accounts, contacts, or AI credits, depending on what your plan tier allows.
  1. Save the plan. The plan will be created as a corresponding product and price object inside your connected Stripe account.
  2. Repeat for each tier you want to offer (e.g., Starter, Growth, Pro).

Setting Up Annual vs. Monthly Billing

GoHighLevel's SaaS Configurator generally allows you to define both monthly and annual pricing for each plan. Annual plans typically require you to create a separate plan entry with the annual price and interval selected. If your interface only shows monthly, check whether your agency plan tier unlocks annual billing options — this may vary.

Step 3 — Assign a Plan to a Client Sub-Account

Creating plans does not automatically enroll clients. You must assign a plan to each sub-account.

  1. From the Agency Dashboard, open the sub-account you want to configure.
  2. Go to Sub-Account SettingsSaaS or Billing.
  3. Select the plan you created in Step 2.
  4. Choose whether to start the subscription immediately or set a trial period.
  5. Enter or confirm the client's billing email — this is where Stripe will send payment receipts.
  6. Click Save or Activate Subscription.

Once activated, Stripe will create a subscription object and charge the client on the defined interval automatically. You can verify this in your Stripe Dashboard under Subscriptions.

Important: If a client already has a card on file from a previous one-time charge, that card is not automatically used for the new subscription. The client may need to complete a checkout flow to authorize the recurring charge.

Step 4 — Client-Facing Checkout and the Subscription Portal

GoHighLevel provides a white-labeled client portal where clients can manage their own payment method, view invoices, and upgrade or downgrade plans.

  1. In SaaS Configurator, locate the Client Portal or Subscription Portal settings.
  2. Customize the portal with your agency's branding — logo, colors, and domain if applicable.
  3. Share the portal URL with new clients as part of your onboarding process.

Clients can update their credit card through this portal without you needing to intervene. This is the recommended approach over manually entering card details on a client's behalf, both for security and for PCI compliance reasons.

Common Errors and Troubleshooting

Even with a correct setup, billing issues do arise. Below are the most frequently reported problems and how to address them.

Subscription not activating after plan assignment Confirm that Stripe Test Mode is turned off if you are in production. Also verify that the plan in GoHighLevel maps to a live (not archived) product in Stripe.

Client is charged but sub-account features are not unlocked This often happens when the plan limits were not saved correctly during plan creation. Go back to the plan in SaaS Configurator, confirm the feature toggles, and re-save. If the issue persists, check GoHighLevel's support documentation or open a ticket — do not assume the problem resolves itself.

Stripe webhooks failing GoHighLevel relies on Stripe webhooks to receive subscription status updates. If webhooks are misconfigured or blocked, the platform may not reflect payment success or failure accurately. In your Stripe Dashboard, go to DevelopersWebhooks and confirm the endpoint registered by GoHighLevel is active and receiving events.

Client disputes or chargebacks If a client initiates a chargeback through their bank, Stripe will notify you. GoHighLevel does not automatically pause the sub-account in all cases. Monitor your Stripe dashboard for dispute notices and handle them according to Stripe's dispute process.

Currency mismatch Stripe charges are processed in the currency configured on your Stripe account. If your clients are in different regions, confirm that your Stripe account supports multi-currency or that clients are aware of potential conversion fees. GoHighLevel itself does not handle currency conversion.

When GoHighLevel's Built-In Billing May Not Be the Best Fit

GoHighLevel's SaaS billing works well for agencies managing a focused set of clients on standardized plans. However, it may not be the right solution if:

  • You need complex billing logic such as usage-based metering beyond what the platform exposes.
  • You operate in a market where Stripe is not available or where local payment methods are required.
  • You need robust dunning management (automated retry sequences for failed payments) beyond what Stripe's default settings provide.
  • You already have a mature billing platform (e.g., Chargebee, Recurly) and prefer to keep billing centralized there.

In those cases, you can manage subscriptions externally and manually control sub-account access inside GoHighLevel, though this requires more operational overhead.

Setting up recurring billing correctly from the start reduces manual work, minimizes payment failures, and gives clients a predictable experience. Take time to test the full flow in Stripe Test Mode before onboarding your first paying client.

Still stuck?

If this walkthrough did not solve your case, describe your exact scenario. Every question we receive becomes a new tutorial here.

Send my question