Export your members with plan, last visit, payment status and cancellation date, split them into segments with a spreadsheet formula, and have AI draft one short text per segment plus a reply for each cancellation reason. Market plans to repeat single-wash customers with a break-even message. Send only to members who consented, from your own system.
The costly mistake is one discount text to everyone. A member who pays and never washes needs a different message from one who sold the car, and a member who is angry about a scratch needs a person, not a text. Segment first, then write, and keep names, phone numbers and plates out of the AI chat altogether.
The numbers that follow belong to an invented site: one automatic wash with 800 members on three plans (Basic at $19.99 a month, Plus at $29.99 and Max at $39.99), single washes at $12, $16 and $22, and about $1.90 of water, chemicals and power for each wash. Every figure is illustrative, so put your own in.
The export you need, and the columns to leave behind
Your membership system already holds the facts; the job is getting them into one file with one row per member. Look for a members report with a CSV export, or ask the vendor for one. These are the columns that matter:
- member_id (an internal number) and first_name, which is there only for the text's merge field
- plan and monthly_price
- status (active, paused or cancelled) and payment_status (ok or failed)
- join_date, last_visit_date and visits_30d, the number of washes in the last 30 days
- cancel_date and cancel_reason, ideally a pick-list value as well as any free-text note
- texting_consent, yes or no, with the date it was given
If your system cannot export last-visit dates or visit counts, that is the first gap to raise with the vendor. Without them you cannot tell a member who washes every week from one who has not been through the gate since spring. Many systems recognise a member by a windscreen tag or a plate reader, and those scans are where the visit dates come from.
Leave out surnames, phone numbers, email addresses, plates, card details and any note describing an incident. You need the phone number to send a text, but your membership system's message tool or a texting service does that, not the AI chat. The AI only ever needs the shape of the data, a few invented rows and the segment counts.
Segments from a formula, with AI writing the formula
Sorting 800 rows into groups is arithmetic, and arithmetic belongs in a spreadsheet. Give the AI the column headings and three invented rows, not real members, and ask for formulas. Then run the formulas on the real file yourself. That keeps personal data out of the chat and removes the risk of a chatbot miscounting.
My members spreadsheet has these columns: A member_id, B first_name, C plan, D monthly_price, E join_date, F status (Active, Paused or Cancelled), G payment_status (OK or Failed), H last_visit_date, I visits_30d, J cancel_date, K cancel_reason, L texting_consent (Y or N).
Write a formula for column M that gives each row exactly one segment, checking in this order:
1. status Cancelled: "Cancelled 0-30 days", "Cancelled 31-90 days" or "Long lapsed", by days since cancel_date
2. status Paused: "Paused"
3. payment_status Failed: "Payment failed"
4. visits_30d is 0: "Idle"
5. visits_30d is 4 or more: "Heavy"
6. anything else: "Steady"
Then write a formula for column N: "Text" if texting_consent is Y, otherwise "Do not text".
Test both formulas on these three invented rows and show the results:
M001,Test1,Plus,29.99,2025-03-02,Active,OK,2026-10-20,5,,,Y
M002,Test2,Basic,19.99,2025-06-11,Active,OK,2026-09-01,0,,,N
M003,Test3,Max,39.99,2024-11-15,Cancelled,OK,2026-08-14,0,2026-09-02,Price,Y
It returned two formulas. Read the nested IF aloud to check the logic: cancelled members are split by how long ago they left, then paused members, then failed payments, then members with no washes, then heavy users, then everyone else.
M2: =IF(F2="Cancelled",IF(TODAY()-J2<=30,"Cancelled 0-30 days",IF(TODAY()-J2<=90,"Cancelled 31-90 days","Long lapsed")),IF(F2="Paused","Paused",IF(G2="Failed","Payment failed",IF(I2=0,"Idle",IF(I2>=4,"Heavy","Steady")))))
N2: =IF(L2="Y","Text","Do not text")
Dates must be real dates rather than text, or the subtraction fails, so check that first if the formula returns errors. Count each segment with COUNTIF, and count the reachable members with COUNTIFS on both columns. For the invented wash, the result was this.
| Segment | Rule | Members | Consent given |
|---|---|---|---|
| Heavy | Active, 4 or more washes in 30 days | 300 | 271 |
| Steady | Active, 1 to 3 washes | 330 | 297 |
| Idle | Active, no washes in 30 days | 150 | 128 |
| Payment failed | Active, card declined | 20 | 18 |
| Cancelled 0-30 days | Left in the last month | 38 | 33 |
| Cancelled 31-90 days | Left one to three months ago | 74 | 62 |
| Long lapsed | Left more than three months ago | 212 | 168 |
The sheet refreshes in seconds next month, which is the point: the segments update themselves and the AI is only needed for the words.
What a member is worth, and why the idle ones come first
Before writing a word, put a value on the problem, or you will spend an hour on a message worth a dollar. Start with what one member earns you in a month. The invented wash takes $21,792 a month from 800 members, an average plan price of $27.24. Members average 3.1 washes a month, which at $1.90 each is $5.89 of wash cost, and card fees at 3 per cent of the price (an assumption; use your processor's rate) come to $0.82. That leaves about $20.50 a member a month.
Churn is the share of members who leave in a month. Last month 38 members cancelled out of 838 at the start of the month, which is 4.5 per cent. Dividing 1 by 0.045 gives an average stay of about 22 months, so each cancellation costs roughly 22 months at $20.50, or about $450, if the pattern holds. That is a rough sum rather than a forecast, but it shows why a few hours on retention can be worth more than another poster at the pay station.
Now look at the idle segment. The 150 members who paid and did not wash for 30 days hand you $4,086 a month between them and cost almost nothing to serve. They are also the members most likely to glance at a bank statement and wonder why. Test that against your own data before you rely on it: list last quarter's cancellations and count how many had no wash in the 30 days before they left. If most did, the idle segment deserves the first message each month. If few did, your churn has another cause, such as a price rise, a new competitor or a quality problem, and a nudge will not fix it.
The full method for finding the cause is in running a churn analysis with AI, and whether AI should handle freezes and cancellations covers the policy side.
Five texts, one per segment, each with its own job
Each segment gets one message with one job. The wording below is what I would send after editing the AI's drafts, and the brackets are merge fields your texting tool fills in. Every offer names the business and ends with a way out; the failed-payment text is the exception, for the reason given below. Filled in with a six-letter first name, a 13-character business name and a 17-character link, they run between 135 and 154 characters, so each fits one 160-character segment.
Idle members (128 with consent). The job is a visit or a pause, never a discount. A member who pauses is still a member; one who is pushed into cancelling is not.
Hi [first name], it's [business name]. No wash on your membership in 30 days. Drive through any time, or pause it here: [link]. Reply STOP to opt out.
Payment failed (20 members). The job is a working card. This text is about the member's own account, and many providers treat account notices differently from marketing, so ask yours whether it can go to all 20 or only to the 18 who agreed to offers.
Hi [first name], your [business name] membership payment didn't go through. Update your card here: [link] and your plan restarts straight away.
Cancelled in the last 30 days and gave price as the reason (11 members). The job is to show a cheaper way to stay, not to plead.
Hi [first name], it's [business name]. Sorry to see you go. If it was price, Basic is $19.99 a month and can be paused: [link]. Reply STOP to opt out.
Cancelled 31 to 90 days ago (62 with consent). The job is one reason to drive back in. A free wash costs $1.90, which is the cheapest offer that still gives the member something real.
Hi [first name], it's [business name]. It's been a while, so here's one free wash, valid for 14 days: [link]. Reply STOP to opt out.
Heavy users (271 with consent). They already wash four or more times a month, so a discount would only give away margin. The job is a referral, and the reward is a free first wash for the friend.
Hi [first name], it's [business name]. Thanks for being a regular. Know someone who'd like a free first wash? Send them: [link]. Reply STOP to opt out.
Steady members (330) get no message from this routine beyond your normal seasonal notices. Long-lapsed members (212) get at most one final message a year, because repeated texts to someone who left months ago are more likely to annoy than to persuade.
Taking the pushiness out of a win-back text
Left to itself, an AI draft of a win-back text tends towards a shop-window shout. This is the kind of first draft that comes back when the prompt says only "write a win-back text for lapsed car wash members" (illustrative):
Hi [first name]! [car emoji][sparkles emoji] We MISS you at [business name]!! Come back NOW and get 50% off your next 3 months!!! Limited time only. Don't miss out!
And this is the version after four edits:
Hi [first name], it's [business name]. It's been a while: one free wash for you, valid for 14 days. [link] Reply STOP to opt out.
- The emoji went. One character outside the basic GSM-7 alphabet makes the whole message switch encoding. In the plain alphabet a single segment holds 160 characters; after the switch it holds 70, or 67 per segment once a message is split, according to Twilio's documentation. With the two emoji in place of the bracketed words, the first draft is about 130 characters: one segment as plain text, two with the emoji, and Twilio's page says you are charged for every segment. Text pasted from a word processor can also carry angled smart quotes or odd spaces that force the same switch, so paste into a plain-text field and retype any apostrophe you are unsure about.
- The discount went. Half price for three months costs half of the $27.24 average plan price three times, about $41 for each member who returns. A free wash costs $1.90. Start with the smaller offer and keep the bigger one for a member you know would otherwise leave.
- The shouting went. Capitals, repeated exclamation marks and false urgency make the message read like an advert from a stranger. A member should recognise your voice from the pay station sign.
- The basics came in. The business name, a clear next step and the opt-out line were all missing from the draft.
Put those four rules in the prompt for next time, with the edited message as the example to copy, and the first draft arrives closer to the finished one. Keep the prompt in a ChatGPT Project or a Claude Project, which hold standing instructions and example messages so you do not paste them each month. Claude's help page says Projects are open to free accounts too, with a limit of five; if your plan will not take project instructions, save the prompt and examples as a file in the project instead.
Reading cancellation reasons: from free text to seven buckets
If your cancel flow offers a pick-list you already have reasons; the free-text notes and emails are where the detail sits. Paste the notes only, without names, and ask the AI to sort them into fixed buckets so that every month's tally is comparable with the last.
Sort each cancellation note into exactly one bucket: Price; Low use or away; Moved or sold the car; Quality or damage; Payment problem; Competitor; Unknown.
Anything about damage, injury, staff behaviour or a refund dispute goes in "Quality or damage" and gets the flag MANAGER.
Return a table with: number, bucket, flag, three-word reason. Do not guess. If a note is blank or unclear, use Unknown.
1. Too expensive now, cutting back on subscriptions
2. Moving away next month
3. Sold the car
4. Hardly ever use it
5. Third time the wash left streaks and nobody answered my message
6. Switched to the one by my work
7. Card got replaced and I didn't know it had stopped
8. Your gate hit my mirror
9. Away for the winter
10.
Three of the ten came back wrong, so a person should always read the table.
- Note 7 was put under Price, presumably because the note is about money. It is a payment problem, and the right reply is a card-update link rather than a cheaper plan.
- Note 8 was labelled Quality but not flagged MANAGER, because the word "damage" never appears. A gate that hit a mirror is a possible damage claim and goes to a manager.
- Note 9 was put under Moved or sold the car. A member who is away for the winter is a pause, not a loss.
The monthly tally for the 38 members who left in the last 30 days, after those fixes: Price 11, Low use or away 9, Moved or sold the car 6, Payment problem 5, Quality or damage 4, Competitor 2, Unknown 1. Price and low use together are 20 of 38, just over half, and they are the two buckets a message can realistically move. The other 18 need a different reply, or none.
Replies by reason, and the ones that go to a manager
Each bucket gets a different reply, and one bucket gets no automated reply at all. The table sets out the aim, the offer and who presses send for the invented wash.
| Reason | Last 30 days | Aim of the reply | Offer | Who sends |
|---|---|---|---|---|
| Price | 11 | Show Basic or a pause | Basic at $19.99, or pause | AI draft, you send |
| Low use or away | 9 | Offer a pause and show the break-even | Pause for a month or two | AI draft, you send |
| Moved or sold the car | 6 | Thank them and leave the door open | None | AI draft, you send |
| Payment problem | 5 | Get the card fixed | None | System message |
| Quality or damage | 4 | Holding reply, then a call | None until it is resolved | Manager only |
| Competitor | 2 | Ask what they preferred | None | AI draft, you send |
| Unknown | 1 | One-line thanks | None | Automatic |
Three replies written from that table (illustrative, and each assumes your system really lets members pause):
Price. Hi [first name], thanks for letting us know. If price is the issue, Basic is $19.99 a month, or you can pause for a month or two instead of cancelling: [link]. Either way, thank you for being a member.
Low use. Hi [first name], thanks for telling us. If it is not earning its keep, you can pause instead of cancelling: [link]. At two washes a month Basic already costs less than paying per wash.
Moved or sold the car. Hi [first name], good luck with the move, and thank you for being a member. If you are ever back, your plan can be restarted in a minute.
The fourth reply is the holding message for the damage bucket. It does one thing: it says who will call and by when. It does not apologise for a cause, admit fault, promise payment or ask for evidence, because that is for a manager, and often an insurer, to decide.
Hi [first name], thank you for telling us. [manager name] will call you [today or tomorrow] to look into what happened. If another time suits you better, reply with one.
Never let a draft of this kind go out unread. For the payment bucket, dunning messages for failed payments goes deeper.
Selling plans to people who keep buying single washes
The other half of membership marketing is the customer who pays $16 for a Plus wash every week and does not know a plan exists. Give them their own sum. For the Plus plan at $29.99 against a $16 single wash:
| Washes in a month | Paying per wash | Plus plan | Customer saves |
|---|---|---|---|
| 1 | $16 | $29.99 | costs $13.99 more |
| 2 | $32 | $29.99 | $2.01 |
| 3 | $48 | $29.99 | $18.01 |
| 4 | $64 | $29.99 | $34.01 |
Basic and Max break even at two washes as well, which makes a one-line pitch: two washes and it has paid for itself. The same table also shows who should not be sold a plan. A customer who washes once a month pays more on a plan than per wash, and selling it to them only creates a future cancellation with the reason "low use".
Then do your own sum, because it decides how hard you can push heavy users. A Plus member who washes four times a month costs you $7.60 in wash costs and about $0.90 in card fees, leaving $21.49 of the $29.99. The plan only loses money when washes exceed (29.99 minus 0.90) divided by 1.90, which is a little over 15 a month. If your real cost per wash is $5, the same sum gives under 6 washes. Check your own cost before promoting plans to people who already come often.
To find the audience, filter your single-wash sales for customers with three or more washes in the last 45 days. That only works if your system links a single wash to a person, through a phone number entered at the pay station, an app account or a plate. If it does not, put the pitch where those customers already are: on the pay station screen, on the receipt and in the attendant's script. The text for customers you can reach reuses the sum above:
Hi [first name], it's [business name]. Four washes in six weeks is $64 at single-wash prices. Plus is $29.99 a month: [link]. Reply STOP to opt out.
An introductory price needs its own sum. A first month at $9.99 on Basic gives away $10 of the $19.99. At the site's average of 3.1 washes a month, a Basic member contributes about $13.50 a month ($19.99, less $5.89 of wash costs and $0.60 in card fees), so the second month repays the discount, provided the member stays. The number to watch is the share of new members still active after month two, not sign-ups.
The AI is useful for the plan card on the pay station screen. Give it the three plans, the break-even line and your terms, and ask for 40 words. The draft came back like this (illustrative):
Basic $19.99: unlimited exterior washes. Plus $29.99: adds wax and wheel clean. Max $39.99: adds underbody rinse and tyre shine. Wash twice a month and it has paid for itself. Cancel anytime.
Two lines needed checking. "Cancel anytime" was the AI's own addition, and it is wrong if your plans have a minimum term or a notice period. "Unlimited" needs your fair-use rule next to it, such as one wash a day. Any claim about terms has to come from your written terms, never from the draft, and the same applies to prices and what each plan includes. For setting the tiers in the first place, car wash pricing strategy for tiers and memberships works through it.
Sending rules: consent, opt-out and message length
A message that breaks a rule can cost more than a campaign earns, so set the rules before the first send.
- Consent. Text only members whose texting_consent is yes, and keep the date and the way it was given, such as a tick box on the sign-up form. Consent given years ago to a member who has since left is worth re-checking before you use it.
- Opt-out. Every marketing text carries a plain way out, and an opt-out is honoured at once. If you use two tools, such as the membership system and a separate texting service, copy each opt-out to the other the same day.
- Account messages and offers. A failed-payment notice concerns the member's own account, and many providers treat it differently from an offer. Ask yours how it does.
- Frequency and timing. I would cap marketing texts at one a month per member and send in daytime hours, so that nobody is woken by a discount.
- Length. Send yourself a test with the merge fields filled in and count the characters. Keep to 160 in plain text, with no emoji or angled quotes.
- Sender. Send from the texting tool, not a personal phone, and log who approved each message.
The rules differ from one market to another, so ask your texting provider what applies to you. A fuller treatment of consent for marketing texts is in drafting SMS marketing with AI and checking the consent rules.
What a few dozen lapsed members can and cannot tell you
Take the 62 members in the 31 to 90 day segment who consented. Suppose a text costs 5 cents each (an assumption; use your provider's rate), so the texts cost $3.10. If every one of the 62 used the free wash, that would be $117.80 more, a worst case of about $121. A member who returns and stays six months contributes about $123. So one returning member covers the worst case. How many come back is the open question, and nobody can tell you that without your own data.
To see whether the message does anything, hold out a random tenth of the segment, here six members, and send nothing to them. Compare returns after 30 days. With numbers this small, a difference of one or two members means nothing, so run the same message each month for a quarter and pool the results. Record four things for every send: returns within 30 days, free washes redeemed, opt-outs and replies that complain. A message that wins back a few members and draws a rise in opt-outs is not working.
Also watch the cancellation tally. If Price climbs after you change a plan price, the message cannot fix that, and finding the break-even churn point for a price rise is the better tool.
A monthly member review you can finish in under an hour
- Export the members file and refresh the segment formulas (10 minutes).
- Compare each segment's count with last month's, and note the biggest change (5).
- Paste the new cancellation notes, without names, and tally the buckets (10).
- Refresh the five texts and the replies, using the edited versions as examples (10).
- Read every message aloud, check the link, the opt-out line and the character count with the merge fields filled in (10).
- Schedule the sends, and log who approved them and when (10).
That is 55 minutes once the sheet and prompts exist. The owner or general manager reads every message before it goes, and the manager takes the damage and complaint bucket on the same day. Keep one row per month in a ledger: members, churn, reason tally, texts sent, returns and opt-outs. After three months the ledger will tell you more about your members than any template, including mine.
Questions car wash owners ask about texting members
Can I text lapsed members without asking again?
Only if they agreed to marketing texts when they joined, and you kept a record of when and how. Consent for account notices is not always consent for offers. Rules differ by market, so ask your texting provider what applies to you, and honour every opt-out straight away in all the tools you use.
Should the first win-back text include a discount?
Usually not. Start with the reason they left: a cheaper plan for price, a pause for low use, nothing at all for a move or a sold car. Keep a small offer, such as one free wash, for the second message. A free wash costs you the wash itself, about $1.90 in the example, while a discounted month costs far more.
Which cancellation replies should never be automated?
Anything involving damage, an injury, a complaint about staff or a refund dispute. Those go to a manager the same day, and the reply should not admit fault or promise payment until you have spoken to your insurer. A drafted holding message can say who will call and when, which is all an automated reply should do.
How many members do I need before segments are worth it?
With fewer than about 100 members, a filtered list of anyone with no wash in 30 days is enough and you can write each message by hand. Segments start to pay once you cannot read the whole list in a few minutes, because the formula does the sorting and the messages stay consistent from month to month.
Can AI read my cancellation notes safely?
Yes, if you prepare them first. Replace names with member numbers, delete plates and phone numbers, and paste only the note text. Notes can still mention a person or an incident, so read them before pasting. A business plan that does not train on your content by default is a safer home for this than a personal account.
Further reads
- Car Wash AI Receptionist: Monthly Cost for Valet and Hand-Wash Calls — Cost the phone side of the wash before you add more messages.
- How Barbers Can Win Back Lapsed Clients With Automated Messages — See the same win-back idea for a service that books by appointment.
- AI Automation for Gyms: Failed Payments, Freezes and Win-Back Texts — Another membership business handling failed payments, freezes and texts.
- How to Win Back Lapsed Customers With AI-Personalised Emails — Write the email version of a win-back to people without a mobile number.
- Car Detailing Promotion Ideas: Seven Before-and-After Posts With AI — Seven before-and-after posts for a detailing business, with the photo workflow, AI caption drafts, a four-week calendar and rules for keeping the photos honest.
- AI Marketing Campaign Examples: Five Worked Ones for Local Businesses — Five worked local campaigns, each with a prompt, assets, schedule, cost, break-even point and a simple way to check whether it paid for itself.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: Twilio's documentation on GSM-7 and UCS-2 text encoding (160 characters in one GSM-7 segment, 70 in one UCS-2 segment, 67 per segment in multi-part UCS-2 messages), and Anthropic's help page on Claude Projects (open to free accounts, up to five projects), both checked October 2026. The wash, its members, prices and costs are invented for illustration.