GoHighLevel + Stripe: Setup, Rebilling & Subscriptions Guide

GHL Prime TeamJune 15, 20268 min readSaaS Mode

Stripe is the engine behind almost every dollar that moves through GoHighLevel. Get the GoHighLevel Stripe integration right and you can take card payments, run recurring subscriptions, and bill your own SaaS clients without touching a separate billing tool. Get it wrong — test keys in live, the wrong Stripe account, missing webhook events — and payments silently fail while you wonder where the revenue went.

This guide walks through both jobs Stripe does inside GHL: collecting client-facing payments, and powering SaaS Mode agency billing. We’ll cover setup, subscriptions, where Stripe webhooks fit, the connection problems we see most often, and how to fix them.

The two distinct jobs Stripe does in GoHighLevel

It helps to keep these separate in your head, because they live in different places and have different rules.

  • Client-facing payments: selling your own products and services — one-time charges, invoices, and subscriptions — through order forms, the payments area, and invoicing. This is connected inside a sub-account.
  • SaaS Mode agency billing: charging the agencies and businesses you resell GoHighLevel to. This is connected at the agency level and is what makes rebilling and recurring plan charges work.

Both run on Stripe, but you configure them independently. A common mistake is assuming one connection covers both — it doesn’t.

How to connect Stripe to GoHighLevel

To handle gohighlevel payments in a sub-account, go to Payments > Integrations. Alongside Stripe you’ll see PayPal, Authorize.net, NMI, and Square, but Stripe is the primary processor and the only one that supports SaaS Mode. Click Connect with Stripe, log into (or create) your Stripe account, and authorize the connection so the two systems sync.

Once connected, one detail catches people out: GoHighLevel only tracks transactions created through GoHighLevel after you connect. Payments you took directly in Stripe before the integration will not back-fill into your GHL reporting. Your numbers start from the connection date forward.

Test mode vs live mode

Stripe gives you two sets of API keys: test and live. Test mode lets you run fake card numbers through your funnels to confirm everything works before real money is involved. When you’re ready to sell, you must switch to live keys. Leaving test-mode keys connected in a live environment is the single most common reason “working” checkouts take no money — the page submits, but nothing ever hits a real card.

Selling products, invoices, and subscriptions

With Stripe connected, you can sell in several ways:

  • Order forms: attach a product to a funnel or standalone order form for a one-time or recurring charge at checkout.
  • Invoices: send one-off or recurring invoices from the Payments area — useful for services billed manually or on a schedule.
  • Products & subscriptions: define products with recurring pricing so Stripe charges the customer automatically each cycle.

How GHL Stripe subscriptions actually work

When a customer buys a recurring product, GoHighLevel creates a subscription in Stripe and Stripe handles the recurring charge on each billing cycle. GHL reads the initial subscription state directly from Stripe at signup — that verified response is the source of truth for whether the subscription started cleanly. From there, Stripe keeps GoHighLevel updated about renewals, failed payments, and cancellations as they happen. This is exactly where webhooks come in.

Where Stripe webhooks fit

A webhook is just a message Stripe sends to GoHighLevel when something happens — a payment succeeds, a subscription renews, a card is declined, a customer cancels. For stripe webhooks ghl you generally don’t configure these by hand; the official connection wires them up for you. Their job is to keep GHL in sync after the initial sale and to act as a fallback if the first verification ever fails.

When webhook events go missing, you get ghosts: a subscription that renewed in Stripe but still shows as failed in GHL, or a cancellation that never updated the contact. If your records and Stripe disagree, missing or misrouted webhook events are usually the cause — and reconnecting the integration through the proper flow re-establishes them.

SaaS Mode billing and rebilling

SaaS Mode is how you resell GoHighLevel as your own branded platform and bill clients on a recurring plan. To connect Stripe to GoHighLevel for this, you link Stripe at the agency level — Stripe is currently the only supported provider for SaaS billing. SaaS Mode and rebilling require the $497 Agency Pro plan; they are not available on the $97 or $297 tiers.

Rebilling lets you charge clients for usage — email, phone, SMS, AI, premium workflow actions — with your own markup on top of the wholesale cost. You enable it in agency settings, toggle on rebilling, and set a markup. Recurring plan charges and usage billing both flow through that agency Stripe connection.

One hard rule trips up almost everyone the first time: both the agency account and each client sub-account must use live Stripe keys. If a sub-account is connected with test-mode keys, new sub-accounts won’t generate from your SaaS order form and billing won’t trigger. Rebilling is deep enough to deserve its own treatment, but the foundation is always a clean, live Stripe connection on both sides.

Common connection problems and how to fix them

  • Test-mode keys in a live environment: checkouts succeed visually but take no money, or SaaS sub-accounts never generate. Switch to live keys on every account involved.
  • Wrong Stripe account connected: payments land in the wrong place, or agency and sub-account use mismatched accounts. Disconnect and reconnect the intended account.
  • Failed or declined payments: often expired cards, insufficient funds, or Stripe’s fraud rules. Check the failure reason in the Stripe dashboard before assuming GHL is broken.
  • Missing webhook events: GHL and Stripe records drift out of sync. Reconnect through Payments > Integrations to restore the event flow.
  • Currency mismatch: your Stripe account currency must match what your products and plans charge in, or transactions get rejected.

When in doubt, treat the Stripe dashboard as the source of truth for what actually happened, and GoHighLevel as the system that should reflect it. Most “GHL bug” reports turn out to be a key, an account, or a webhook issue.

Frequently asked questions

Can I use one Stripe account for both client payments and SaaS billing?

You can use the same Stripe business, but the connections are configured separately — one in the sub-account for client payments, one at the agency level for SaaS Mode. Connecting one does not automatically cover the other.

Do I need Agency Pro just to take client payments?

No. Connecting Stripe in a sub-account to sell products, invoices, and subscriptions works on standard plans. The $497 Agency Pro plan is required specifically for SaaS Mode and rebilling.

Why do my GHL reports not match my Stripe totals?

Usually because GoHighLevel only tracks transactions created through GHL after you connected, or because some webhook events didn’t arrive. Pre-connection Stripe payments never sync in.

Is Stripe the only payment option?

For SaaS Mode, yes. For client-facing payments you can also use PayPal, Authorize.net, NMI, or Square, but Stripe is the most capable and the default choice for subscriptions.

Get your payments built right the first time

A clean Stripe setup is the difference between a SaaS that bills clients automatically and one that quietly loses revenue. We connect Stripe, configure subscriptions and rebilling, and test every flow in both modes before you go live. If you want this done correctly from day one, explore our SaaS CRM launch service or get in touch and we’ll map out your payments and billing setup.

Need help implementing this in GoHighLevel?

Our team builds, automates, and scales GoHighLevel systems for agencies every day. Book a free call and we'll map out exactly what to ship next.

Book a free call