← All Posts
AI Automation · Automation Teardown

Paid For, Never Used: Automating the Unredeemed Package Credit Before It Expires

By Gideon Wafula, AI Automation Engineer September 9, 2026 9 min read

Almost every automation I have written up on this site chases money you have not been paid yet. A missed call, an abandoned form, a quote gone quiet, a policy about to lapse, a membership whose card just declined — in all of them the loss is a sale that did not close or a payment that did not land, and the business feels it in the bank account.

Prepaid packages break that pattern completely. When a client buys a six-session laser package, a ten-class pilates card, a twelve-visit grooming plan or a gift card someone bought for Christmas, the cash arrives on day one. It clears. It shows up in the month's takings. And then, in a large share of cases, three of the six sessions are never used and the balance quietly expires.

Here is the part that makes this problem survive for years inside otherwise well-run businesses: on the P&L, an expired package looks like a win. Accountants call it breakage. Deferred revenue that was sitting as a liability on the balance sheet gets recognised as income the day the package expires, without a single minute of labour, product or room time against it. It is the highest-margin line the business will ever book. Nothing in the monthly numbers tells the owner that anything went wrong.

I am Gideon Wafula, an AI automation engineer, and I build these workflows for med spas, salons, studios, clinics and grooming businesses. This one is worth its own teardown because the trigger logic is genuinely different from everything else on this site, and because the naive version of it — a reminder email on the expiry date — is close to useless.

What the breakage number is actually telling you

A client who lets a package expire has not saved you work. They have churned, and they have churned in the most expensive way available: silently, while holding a receipt.

Three things happen when a balance expires unredeemed, and none of them show up on the income statement.

The first is that you lost the visits, and everything attached to them. A client in the building buys retail, rebooks, upgrades, and refers. The revenue that arrives with a redeemed session is almost never just the session — it is the product on the way out, the next appointment made at the desk, and the next package sold at visit five. When the sessions go unused, all of that disappears too, and it never appeared as a forecast so nobody misses it.

The second is that the relationship ended without either side saying so. The client did not decide to leave. They missed a couple of weeks, felt awkward about the gap, kept meaning to book, and eventually stopped thinking about it. That is a recoverable state right up until the moment it is not.

The third is the one that actually costs money in public. Expiries are discovered by the client, usually months later, usually when they finally try to book. What follows is a refund demand, a chargeback, a one-star review naming the amount, or all three. Note that consumer protection rules in a number of US states and across the UK and EU restrict or prohibit expiry on gift cards and prepaid vouchers specifically, and the treatment of prepaid service packages varies by jurisdiction and by how the terms were written. I am not a lawyer and this is not legal advice — but if your commercial plan quietly depends on breakage, that is worth a conversation with someone who is, before it is worth a conversation with an automation engineer.

Why the expiry date is the wrong trigger

The obvious build is a scheduled reminder: thirty days before the package expires, send an email. I have seen this version many times and it barely moves anything, for a reason that is structural rather than cosmetic.

A six-session package with three sessions left and thirty days to run is not a reminder problem. It is an arithmetic problem. If the treatment protocol needs two weeks between sessions, the client physically cannot consume three sessions in thirty days. The message arrives, the client works out that the situation is unrecoverable, and the only outcome available to them is annoyance. You have not saved the balance; you have scheduled the complaint.

The trigger that works is burn rate. For every open package, you can compute the pace at which sessions are actually being consumed, compare it to the pace required to finish before expiry, and act on the gap. Sessions remaining, days remaining, minimum spacing between sessions, and the client's own observed cadence over their last few visits. A client with four of six left and five months to go is on pace and should be left alone. The same client with four of six and six weeks to go is off pace and needs contact today, when there is still a version of the schedule that works.

This also means the automation fires at wildly different times for different clients holding identical packages, which is exactly right and is the thing a calendar-based reminder can never do.

There is a second trigger worth building alongside it and it is simpler: the silent gap. A client with an open balance who has not booked in significantly longer than their own normal interval is drifting, regardless of how much time is left on the clock. That client is best reached at three weeks of silence, not at month five when the maths has already failed.

Do this before you build anything

Package balances are the least trustworthy data in a small business. The sessions were tracked on paper during a busy Saturday, the front desk deducted two by accident, a session was comped after a complaint and never recorded, a client transferred two sessions to their sister, or the package was migrated from the old booking system in 2024 with the counts flattened. Practitioners who work on this consistently report that manual package tracking leaks a few percent of package revenue outright, in sessions given away for free because nobody could prove they had already been used.

So the first afternoon is a reconciliation, not a campaign. Pull four things out of your booking or practice management system:

Then, before automating anything, have someone call twenty clients with stale balances. You are trying to establish which of four things is actually happening: they forgot; they cannot get an appointment time that works; they were unhappy with a result and have not said so; or they have moved to a competitor. Only the first is a reminder problem. If most of the calls land on the second, your constraint is the booking calendar and no message will fix it. If they land on the third, you have a service recovery problem and an automated nudge will make it worse.

This is the same discipline I apply to database reactivation — sizing the leak and finding its cause before writing a single workflow node.

The n8n build, step by step

This sits on top of whatever the business already runs: Boulevard, Mindbody, Zenoti, AestheticsPro, Vagaro, Phorest, Fresha or similar. n8n is the orchestration layer; nothing here replaces the booking system.

1. A nightly balance table, computed and stored

Every night, pull open packages into a staged table with one row per package: client identity, package type, sessions purchased, sessions used, sessions remaining, currency value of the remainder, purchase date, expiry date, last redemption date, minimum spacing rule for that treatment, and the client's median interval. Store it. Do not compute balances inside a message template. A stored table is inspectable, diffable night to night, and gives you an audit trail when a client disputes a count — which they will. Leave nulls explicit. A missing expiry date is a missing expiry date, not an assumed twelve months.

2. Burn-rate classification, deterministic

Plain arithmetic, no model involved: required pace equals sessions remaining divided by days remaining, adjusted for minimum spacing. Compare to observed pace. Bucket into on pace, drifting, off pace but recoverable, and mathematically unrecoverable. The last bucket is the important one and it must never receive an automated message. It routes to a human with the balance and the value attached, because the only good outcome there is a manager offering an extension, a partial credit or a conversion into something else — a decision with money attached that a language model has no business making.

3. Suppression, evaluated at send time

Not at selection time. Selection happens nightly, sending happens in batches, and the gap between them is where the embarrassing sends live. Suppress: clients with an appointment already booked that consumes the balance; anyone with an open complaint, refund request or dispute; anyone contacted by a human in the last seven days; clients flagged by a practitioner for any reason; medical holds, pregnancy flags and paused treatment plans where the clinic has told the client not to come in; opt-outs; deceased clients; and duplicate identities across SMS and email in the same household. One-click permanent flagging for front desk staff, and it must actually work the first time.

4. Message construction, with the numbers locked down

The model drafts tone and personalisation. It does not produce a single figure. Sessions remaining, expiry date, package name and currency value are injected as validated variables straight from the table, and any draft containing an ungrounded number, date or currency amount is rejected before send in favour of an approved template. A wrong session count in writing is not a poor customer experience, it is a statement about money that the client will screenshot.

The message itself should be short, plain, and structurally a service message: you have X sessions left, they run until this date, here are the next available times. No promotion. No discount. No scarcity language. Nothing about a new offer. The client already paid; the only appropriate posture is helping them get what they bought. Every message ends in a real booking link showing genuine availability, not an instruction to call during business hours.

5. Cadence tied to the bucket, not the calendar

Drifting clients get one gentle touch at their own silent-gap threshold. Off-pace-but-recoverable clients get a first message the moment they cross the line, and one follow-up roughly ten days later if there is no booking and still enough runway. That is it — two touches maximum on a live balance. Anything more and a service message starts reading as pressure to consume something, which is the fastest way to turn a redeemable balance into a refund request.

6. Reply handling with a fast human exit

Any inbound reply stops the sequence, without exception. Scheduling questions can be handled in the booking flow. Anything touching a disputed session count, a refund, dissatisfaction with a result, a medical concern or an extension request goes to a named human within the hour, with the balance history attached so they are not asking the client to explain their own account. Clinical and treatment questions never get a model-generated answer.

The guardrails I will not move on

The model writes copy and interprets replies. It never states a session count, a price, a treatment outcome, a medical suitability judgement, or a policy decision about extending an expiry. Those come from the table or from a human.

On consent: in the US, SMS to clients requires prior express consent, a working opt-out honoured immediately, and sends confined to local daytime hours. In the UK and EU, servicing an existing purchase and marketing a new product are not the same lawful basis, and the fact that this message is genuinely the former is a reason to keep it rigorously free of upsell rather than an excuse to slip one in. Where a med spa or clinic is holding health information, the workflow should read the minimum it needs and put no treatment detail whatsoever in a message body — the same standard I apply in the no-show reduction build.

And a circuit breaker: if opt-outs or complaints on this workflow cross a threshold you set in advance, it pauses itself and pages someone. An automation touching money people have already handed over does not get to fail quietly.

Cost, and the four numbers to watch

Running costs land around 30 to 120 USD per month for the platform, model usage and messaging. The one-time work is where the expense sits: connecting to the booking system, and the reconciliation pass over existing balances. On a book holding tens of thousands in unredeemed packages, that arithmetic is not close.

Baseline these four before you switch anything on, so you can tell whether the build created anything:

The honest caveat

This automation cannot make a package worth finishing. If clients are abandoning a six-session series because the results were not what they expected, or because the practitioner they liked left, or because the only appointments available are Tuesday at 2pm, a well-written reminder will simply help them reach that conclusion sooner and ask for their money back faster. That is still valuable — it converts a slow, invisible loss into a fast, visible one you can act on — but it is not the outcome anyone is hoping for, and you should know which situation you are in before you build. That is what the twenty phone calls are for.

The pattern ports further than you would think. Anywhere a customer pays in advance for something consumed over time, the same burn-rate logic applies: pilates and yoga class packs, personal training blocks, physiotherapy and massage courses, dog grooming plans, car wash and detailing memberships, prepaid legal or accounting hour banks, tanning and IV drip packages, and gift cards of every kind. It is closely related to the failed-payment recovery build in membership businesses and to salon rebooking, but it inverts the usual question. Instead of asking how to get paid, you are asking how to earn what you were already paid — and the client who helps you do it is the one who stays.

Need this set up for your business?

Gideon Wafula builds custom AI automation systems, n8n, WhatsApp, Voice AI, and more.

See Services →

Frequently Asked Questions

Why automate reminders for packages the customer already paid for?
Because an unredeemed package is not free money. It is deferred revenue you have not yet earned, and the client attached to it has usually stopped coming without telling you. Getting the sessions consumed is what converts that balance into earned revenue, keeps the client in the building where rebooking and add-on purchases happen, and prevents the refund requests, chargebacks and public complaints that follow an expiry the client did not see coming.
What triggers the automation, the expiry date or something else?
Burn rate, not the expiry date. The useful signal is sessions remaining measured against the time left and the pace the client has actually been consuming them. A client with four of six sessions left and five months to run is fine. The same client with four left and six weeks to run is off pace and needs contact now. Firing on the expiry date alone means every message goes out too late to be acted on.
How much does a package redemption automation cost to run?
Roughly 30 to 120 USD per month for the automation platform, model usage and messaging, once it is running. The real expense is one-time: connecting to the booking or practice management system, and reconciling package balances that are frequently wrong before any message goes out. On a book of prepaid packages worth tens of thousands, the running cost is not the deciding factor.
Is a package reminder a marketing message or a service message?
Treat it as a service message about an existing transaction and write it that way, with no upsell, no promotion and no scarcity language. That framing is both the honest one and the safer one under consent rules, but it does not remove the obligations: US SMS still needs prior express consent, working opt-out and local-hours restrictions, and in the UK and EU servicing an existing purchase and marketing a new one are not the same lawful basis. Never bundle an offer into the same message.