A payment problem in GoHighLevel costs you twice: the sale fails, and the customer often doesn't try again. Most failures come from a short list of causes: test mode, the wrong Stripe account, card declines, bank authentication, or a workflow that doesn't fire after payment. This guide shows how to find which one, and how to fix it.
1. Start in Stripe, not GoHighLevel
GoHighLevel sends the payment to Stripe, and Stripe decides whether it succeeds. Open the Stripe dashboard, go to Payments, find the attempt by the customer's email, and read the reason. Stripe shows the exact decline code, whether its fraud screening (Radar) blocked it, and whether bank authentication was needed. If there's no attempt in Stripe at all, the problem is on the GoHighLevel side (sections 2–4).
2. Test mode vs live mode
- Payments in test mode never charge real cards. Check the payment settings and order forms are set to live.
- Products and prices created in test mode don't exist in live mode. Recreate them in live mode and reselect them on the order form or checkout.
- Test with a real card for a small amount, then refund it.
3. The wrong Stripe account is connected
- Each sub-account connects its own payment account under its payment integrations. A sub-account copied from a snapshot doesn't bring its Stripe connection with it.
- Agency vs client: in SaaS mode the agency's Stripe bills clients for their subscription, while each client's own Stripe takes payments from their customers. Mixing these up sends money to the wrong place.
- Reconnect if Stripe access was removed, or the Stripe account was changed or closed.
4. Checkout and order form problems
- Product missing or "not found": the product or price was deleted, archived or created in test mode.
- Currency mismatch: check the sub-account's currency, the product's price currency and what your Stripe account accepts.
- Payment form not loading: test in a private window; ad blockers and strict browser privacy settings can block payment scripts.
- Apple Pay and Google Pay missing: they only show on supported browsers and devices, and Apple Pay may need your domain registered with Stripe.
5. Card decline codes and what to do
| Stripe code | Meaning | What to tell the customer |
|---|---|---|
| generic_decline / do_not_honor | The bank declined without saying why | Call the bank, or use another card |
| insufficient_funds | Not enough money or credit | Use another card or pay later |
| incorrect_cvc / incorrect_number | Card details typed wrong | Re-enter the details carefully |
| expired_card | Card has expired | Use a current card |
| card_velocity_exceeded | Too many attempts or over the card's limit | Wait, or contact the bank |
| authentication_required | The bank requires verification (3D Secure) | Complete the bank pop-up or app approval |
| fraudulent / blocked by Radar | Stripe's fraud screening stopped it | Review the payment in Stripe before allowing it |
Repeated declines from many customers at once point to an account problem rather than the cards (section 7).
6. UK and EU cards: bank authentication (3D Secure)
Under strong customer authentication rules, many UK and European card payments need the customer to approve them in a bank pop-up or app. If they close it, it times out, or a browser blocks the pop-up, the payment fails. Ask the customer to retry in a normal browser window with pop-ups allowed and their banking app to hand. Saved cards for subscriptions are usually authenticated once, at the first payment.
7. Stripe account restricted or payouts paused
If Stripe needs more information (identity documents, business details, website policies), it can restrict charges or pause payouts. Check the Stripe dashboard for notices and complete them. Make sure your site shows a refund policy, contact details and what you sell, because Stripe checks these.
8. Payment succeeded but nothing happened in GoHighLevel
- The workflow didn't trigger: check you used a payment or order trigger, and its filters (product, form or amount) match this purchase.
- The payment was taken outside GoHighLevel, for example directly in Stripe or another checkout, so GoHighLevel never saw it as an order.
- The contact didn't match: the customer used a different email at checkout, creating a second contact. Search by both.
- See GoHighLevel workflow not working for drafts, filters and re-entry settings.
9. Failed subscription renewals
- Turn on Stripe's automatic retries for failed payments, and its emails asking customers to update their card.
- In GoHighLevel, send your own friendly message and an update-card link when a payment fails, and alert your team for high-value customers.
- Decide what happens if payment never arrives: pause access, downgrade or cancel. For agencies in SaaS mode, the same applies to client subscriptions; see SaaS mode workflows.
10. Duplicate charges and refunds
Double charges usually come from a customer clicking pay twice or submitting the form again after a slow response. Check Stripe for both charges before refunding, and refund the duplicate from GoHighLevel's transactions or from Stripe. Refunds take several business days to reach the customer's card.
Before you launch any checkout
- Live mode on, products recreated in live.
- The right Stripe account connected to the right sub-account.
- One real purchase, then a refund.
- The post-payment workflow fires and the receipt arrives.
- A failed-payment message is set up.
Payments still failing?
I'm Arslan Mumtaz, a software engineer who builds and fixes GoHighLevel checkouts, subscriptions, SaaS rebilling and payment workflows. See pricing ($20/hr for fixes) or book a free call. Related: 400 and 404 errors and SMS not sending.
Frequently asked questions
Why are payments failing in GoHighLevel?
The most common causes are payments or products still in test mode, the wrong Stripe account connected to the sub-account, card declines such as insufficient funds or incorrect CVC, bank authentication (3D Secure) not completed, and a Stripe account restricted until it gets more information.
Which payment processors work with GoHighLevel besides Stripe?
GoHighLevel also supports processors such as PayPal, Authorize.net and NMI. Check the payment integrations in your sub-account for the current list.
Why didn't my GoHighLevel workflow run after a payment?
Check the workflow is published and uses a payment or order trigger whose filters match the product, that the payment was taken through GoHighLevel rather than directly in Stripe, and that the customer didn't use a different email that created a second contact.