Intern
What you actually do
Test-mode fail and recover. State flips. One sender. You are not writing a novel. You are proving stop-on-success.
Library / Wire / Failed payment is a save path with a human, not a brand campaign
Subscriptions and payment plans fail quietly. Stripe retries. A customer sits in GHL as member. Access stays on. Then a chargeback. Wiring dunning means invoice.payment_failed writes a GHL state, a finite message sequence, a task for high value, and success or cancel that flips the contact. This is ops, not a 'we miss you' flow.
Subscriptions and payment plans fail quietly. Stripe retries. A customer sits in GHL as member. Access stays on. Then a chargeback. Wiring dunning means invoice.payment_failed writes a GHL state, a finite message sequence, a task for high value, and success or cancel that flips the contact. This is ops, not a 'we miss you' flow.
Stripe’s built-in emails can be the message owner or GHL can — not both. Two dunning systems is harassment.
GHL must know past_due. Otherwise your community, Skool, and onboarding keep treating them as paid.
Copy is practical: update card, what happens to access, a human if they are stuck. Not a brand story. Not a discount on day one of a failed card (that trains failure).
High AOV or B2B: a human call/WhatsApp. A sequence alone is how you lose a $12k plan to a declined card.
When they pay, stop. The usual bug is dunning continuing for a day because the success event was not wired.
Intern
Test-mode fail and recover. State flips. One sender. You are not writing a novel. You are proving stop-on-success.
Operator
Dunning is ops. Protect one sender and GHL state. Human on high AOV. Easy cancel at the end. Access truth.
CEO
Unpaid members in the CRM are a lie. past_due match is the number. Chargebacks are the expensive version of this leak.
Stripe invoice/subscription, payment_failed, payment_succeeded, GHL contact, status past_due, dunning workflow, human task threshold, access flag, Conversations.
payment_failed → GHL past_due; dunning sequence starts; active-member perks/messages that assume paid pause
payment_succeeded after fail → past_due clears; dunning stops immediately
Final fail / subscription canceled → churned; access off; finite save or stop
Amount above threshold → task for a named human the same day
Stripe-only or GHL-only. Turn the other off. Document templates so you are not surprised by Stripe’s default tone.
Why: Double dunning is how you get angry customers and chargebacks.
Done when: A failed test card produces messages from one system.
Webhooks: past_due on fail, clear on success. Store last_error if useful. Match email identity like any Stripe wire.
Why: State in Stripe and 'customer' in GHL is two books, same as unpaid Won.
Done when: Test fail flips GHL. Test success flips back. Access-related tags match.
Day 0, 2, 5 (example): pay link, access warning that is true, then cancel/stop. Do not invent a 14-email guilt novel.
Why: Endless dunning hurts domain and brand. Truthful and short is ops.
Done when: A never-pays test stops after the last step and is not still 'member'.
If amount or offer in a list: task to owner same day with phone. Workflow still runs unless they pay.
Why: High-ticket failed cards are a sales/CS job, not only an email job.
Done when: A high-amount test creates a task. A $9 test does not have to.
Stripe past_due vs GHL past_due. Access that should be off. Chargebacks tagged.
Why: Drift is how people keep logging into a campus they are not paying for.
Done when: Counts match or exceptions named.
Use Stripe test clocks or a test mode fail. Confirm one sender, GHL past_due, success stops messages, high-amount task if you have a threshold. Confirm a member-only GHL workflow would not mail them as if paid. Do not rewrite brand voice.
A retention creative project or a new campus feature until past_due is true in GHL and dunning has one owner. Features for non-payers are a leak.
Stripe emails on. GHL also 'we miss you'. Status still member. Skool access on. No human on the $8k plan. Success event not wired so they get dunned after they pay. That is how chargebacks happen.
Fail → one sender + GHL state. Success → stop. Final fail → not member. High amount → task. Monday count match.
Usually you train failed cards. Fix the card first. Discounts are a cancel conversation, not a dunning default.
The last step can be a cancel link that is easy. Hiding cancel and dunning hard is how you get chargebacks.
That is cart/checkout recovery, a different job. Dunning is for an existing obligation. Do not mix the copy.
This week
This week: one dunning sender, fail/success webhooks, finite sequence, human threshold, past_due match. No extra discount dunning.
A full calendar and an empty pipeline is two databases.
Read ↗A high score in a CSV is not a qualified opportunity.
Read ↗If the thank-you does not change the contact, the page was a brochure.
Read ↗If paid lives in Stripe and the opportunity is still open, reporting is theatre.
Read ↗Working notes
The minimum CRM, pipeline, and nurture spec before you add more pages. Request the file. It arrives by email — not a public dump, not a drip of slogans.
Email and WhatsApp stay open. A call is for installing the system — not for a tour of tools.