Client
Hijama Associates
Role
Automation & retention lead
Stack
Acuity · Make/Zapier · WhatsApp
Scope
End to end

Patients came once and were never contacted again

What was achieved

Profit generated
18–20%
Increase, November to December
Process improved
1,800%
More Google reviews
Process improved
Ranked #2
On Google for “hijama”

There was no follow-up after a treatment, so every month started with an empty diary and the same patients had to be won again.

What I personally did on this

Owned
Retention diagnosis · the state design · the message set
Built
The scheduling and messaging automation, and the search corrections
Collaborated with
The practice owner

Nobody sends these. The calendar does.

Before
  • Every appointment booked and chased by hand
  • Cancellations followed up manually, or not at all
  • No reactivation. A lapsed customer was simply gone
  • 3 Google reviews in total
  • Not on page one for their own category term
After
  • Booking, reschedule and cancellation all fire themselves
  • A cancellation starts a recovery sequence, not silence
  • Lapsed customers chased at 3, 5 and 8 weeks
  • 57 reviews, asked once, at the right moment
  • Second on page one for the category term
The process before the automation. A customer messages, someone writes it in the diary, a reminder goes out if anyone remembers, the treatment happens, and then nothing. Four things never happened at all: cancellation follow-up, review requests, reactivation of lapsed customers, and any search presence.
Before. Four manual steps, then a dead end. The four that drive repeat business did not exist
The retention automation as five workflows. Acuity Scheduling fires booking, reschedule, cancellation and completion events into a Make or Zapier scenario, which matches the customer by phone, clears prior state, and routes to one of five WhatsApp sequences. The post-appointment sequence runs a review ask then nudges at three, five and eight weeks. The cancellation sequence prompts a rebook at two and six weeks. Any new booking cancels every running sequence.
After. The whole system on one page. Five workflows, eleven messages, every timer measured from the customer’s own last visit

The proof, not the claim

Google search results for the single word hijama. Hijama Associates is the second result overall and the first business, sitting above two research sites and every clinic.
“hijama” · the bare category term, no location. First business result, behind one research paper.
Google search results for hijama singapore. Hijama Associates is the top website result, above the other clinics listed.
“hijama singapore” · top website result, above every competing clinic.
Google reviews panel for Hijama Associates showing a 5.0 star rating from 31 reviews, with cupping, massage and service among the most mentioned topics.
Mid-campaign: 5.0 stars, and the topics customers mention most are the service itself.
Google Maps notification showing 50 review views for Hijama Associates and a five star review.
Reviews are not vanity. They are read, and they are what a stranger decides on.
The owner, unprompted, after the first full month

“Actually yes. We do see a difference.”

Replying to my message: “From the revenue compared from November to December, we see an increase of 18 to 20%.” December is their slow month.

Where the money was leaking

Before
Customer booksBy message, by hand
Treatment happensThe part they were good at
⚠ Bottleneck Nothing No thank you, no review ask, no reason to return. The relationship ended with the appointment
After
Customer booksAcuity, self-serve
✓ Automated Confirm, prepare, remind Three touches before they arrive, none of them typed by a person
✓ The new part Review, then return One review ask, then nudges at 3, 5 and 8 weeks until they rebook
The insight the client had not priced

They were not short of customers. They were short of second visits. Hijama has a natural repeat cycle of a few weeks, so every lapsed customer was a booking the diary had already earned and then forgotten to collect.

What shaped the decisions

Why the revenue number is the honest one

December is their slow month, and the comparison runs November to December. The lift happened against the season, not with it.

What it had to do, and why it mattered

Five, and the last one is the reason it still runs.

  1. 01
    One person, however many bookings
    Customer records matched on phone number, not name or email.
    A regular who books three ways becomes three people otherwise. Duplicate records are how automations send the same person the same message three times.
    Identity
  2. 02
    Every timer starts from their last visit
    Not from a campaign date, not from enrolment.
    A shared send date treats a customer who came yesterday the same as one who came in March. Relevance is the entire difference between a nudge and spam.
    Timing
  3. 03
    A cancellation is a beginning, not an end
    Acknowledge, offer a rebook link, then prompt at 2 and 6 weeks.
    Cancelling is not the same as leaving. Most cancellations are a diary clash, and nobody was following up on any of them.
    Recovery
  4. 04
    Ask for the review once
    A tracked link sets a flag; anyone carrying it never sees the ask again.
    The second ask costs more than the first one earned. Reviews come from people who feel appreciated, not pursued.
    Reputation
  5. 05
    Rebooking silences everything immediately
    A new booking or reschedule cancels every sequence in flight.
    This is the requirement that makes it survivable. One “we miss you” to somebody who booked last week undoes every message before it.
    Credibility

Design the states first, then the messages

Most retention campaigns are a list of messages on a calendar. This one is a state machine, which is why it never contradicts itself.

Step 1

Name every state

Booked, rescheduled, cancelled, done, reviewed. A customer is in exactly one, and the system always knows which.

Step 2

Clear before you set

Every workflow wipes prior state before writing its own. Stale state is what makes automations send nonsense.

Step 3

One exit, everywhere

A new booking drops the customer out of every running sequence. One rule, enforced in all five.

Three questions, answered in order

01When is a customer most likely to leave a review?
What it showed

Within the hour of finishing, while they still feel the result. The ask fires 60 minutes after the appointment ends, and only once. A customer who has already reviewed gets a different message with no ask in it, because asking twice is how you lose the third.

02When does a lapsed customer actually come back?
What it showed

Hijama has a natural repeat cycle, so the nudges sit at 3, 5 and 8 weeks from the customer’s own last visit rather than on a shared campaign date. The 8-week message carries an offer with a 7-day expiry, because a win-back without a deadline is just a newsletter.

03Why was a five star practice invisible on Google?
What it showed

The site led with the business name, not the thing people search for. Titles, meta descriptions and social tags were rewritten to open with the category term and the outcall angle, and to name the specific treatments people actually type. Competitors were ranking on exact-match domains; the fix was to match their title placement without owning their domain.

Split the job in two, and it stops breaking

The automation decides who someone is. The messaging platform decides when to speak. Neither does the other one's job.

The automation owns state
  • Read the booking data
  • Decide booked, done or cancelled
  • Write that state onto the contact
  • Clear it the moment it changes
The messaging platform owns time
  • React to a state change
  • Hold the 3, 5 and 8 week timers
  • Send, and mark who reviewed
  • Drop anyone who rebooks

The first version broke in January

An earlier build let state live in more than one place, and long-running timers had no reliable way out. People who had already rebooked kept receiving messages written for people who had not.

The fault

State in two places

Two systems each believed they knew whether someone had rebooked. When they disagreed, the timer won.

The fix

One owner per fact

Exactly one system writes state. Everything else reads it. Disagreement stops being possible.

The guard

One escape hatch

Every waiting sequence checks the same single condition. A rebooking pulls the customer out of all of them.

What the rebuild carried in

391 lapsed customers were backfilled into the return sequence on day one, out of a base of 511. They had all been treated, none had rebooked, and until then nothing had ever gone back to them.

Eleven messages, each one earning its send

Written, not generated. Every one has a job, and the two that look similar are deliberately different.

The full ladder · the trigger is always something the customer did
WhenWhat it does
BookedConfirms the slot and tells them how to prepare
RescheduledConfirms the new time and repeats the prep
CancelledAcknowledges without guilt, offers a one-tap rebook
Morning ofChecklist and what to expect, sent at 8am
Done, first timeAftercare, then the review ask on a tracked link
Done, already reviewedAftercare only. The ask is removed, because they already gave it
3 weeksWhy the cycle matters, and an open door
5 weeksSocial proof, other people are back
8 weeksA dated offer that expires in 7 days
2 weeks post-cancelStill want to come in?
6 weeks post-cancelFinal touchpoint, then we stop asking
The two that look identical and are not

A customer who has already left a review gets aftercare with no review request in it. It costs one extra branch to build and it is the difference between a practice that pays attention and one that runs a mailing list.

They were selling hijama. The page said their name

A five-star practice was invisible on the term its own customers type. The title tag opened with the business name, which nobody searches for.

Title tag before
  • Opened with the business name
  • Category term buried mid-string
  • No mention of outcall or home visits
  • Treatments not named individually
Title tag after
  • Opens with the category term
  • Location second, brand last
  • Outcall stated, the real differentiator
  • Each treatment named for long-tail search
The competitor read

The clinics ranking above them held exact-match domains, which cannot be taken. What could be taken was title placement, because Google reads a title left to right and so does a person scanning results. Meta descriptions and social tags were rewritten to match, then redeployed.

What produced each result

Produced the 18–20%

The return sequence

Nudges at 3, 5 and 8 weeks from each customer’s own last visit, ending in a dated offer. 511 customers carried into it at launch.

Produced the 1,800%

The one-time review ask

Fires an hour after the appointment, with a tracked link that remembers who already reviewed so nobody is asked twice.

Produced the Ranked #2

The search rewrite

Titles, meta descriptions and social tags rebuilt to lead with the category term and the outcall angle, then redeployed.

What I would do differently

Instrument the sequence properly from day one. The revenue movement is real and the owner confirmed it, but the attribution is a month-on-month comparison rather than a controlled read. Holding back a small control group would have turned a believable number into a defensible one, and it would have cost nothing to do at the start.

Part two of two

How it was actually done

Five workflows, eleven messages, and a search rewrite that took a category term.

!Before you open this

Everything above is the bottom line. If that is what you came for, you already have it.

What follows is the full working: 6 diagrams and 10 sections of working, the analysis behind each decision, and why it went that way instead of the obvious way. It is long on purpose. It is written to be checked, not skimmed.

Only wanted the overview? Stop here. You will not miss a single result — every number is already above this line.