Skip to content
offpeek

Revenue recovery · UAE service businesses

Your calendar is leaking money.

We find the leaks in your own booking history: no-shows, unfilled cancellations, customers who stopped coming, hours that sit dead. Then we close them for you.

Three of the four need no discount at all.

One export from whatever system you use. No login, no switch.

Leaking, this month

AED 9,500

Illustrative. A salon grossing AED 150,000 a month, at a typical no-show rate, is losing roughly AED 8,000 to 11,000 across these four leaks. We find your real number.

Tuesday · Chair 2

Illustrative day sheet. One chair, one Tuesday. Not a customer's data.
TimeSlotValue
11:00ColourBooked420
12:00Blow-dryNo-show150
13:00Cut & beardBooked120
14:00Empty110
15:00CutCancelled 13:40105
16:00ColourBooked420

Regulars who stopped coming

The fourth leak never appears on a day sheet at all.

Unrecovered, this day

AED 365

Illustrative day sheet. One chair, one Tuesday. Not a customer's data.

The four leaks

Four ways a calendar loses money.

Every service business is already losing revenue it has earned. It doesn't show up as a loss. It shows up as an empty chair, a cancelled Saturday, and a customer who quietly stopped coming. Three of these four are fixed without discounting anything.

  1. No discount

    No-shows

    Someone booked and didn't turn up. The slot was never offered to anyone else.

    Timed confirmations and reminders over WhatsApp, aimed at the bookings most likely to be missed based on that customer's own history in your export. Your front desk marks attended or no-show in one tap, which is what keeps the numbers honest.

    A no-show improvement is a rate change over time, not a booking anyone can tag. It appears in your report as recovered value, measured against your own history.

  2. No discount

    Cancellations nobody refills

    A prime slot frees up on Thursday afternoon and stays empty, because nobody knew it was available.

    When a booking cancels, the freed slot goes to the customers most likely to want it, at full price. There is no discount here, and the page they land on shows no struck-through price, because there is no concession to show.

    Of the four, this is the shortest distance between noticing and selling.

  3. No discount

    Customers who stopped coming

    They came every six weeks for a year, then stopped. Nobody followed up.

    Your export shows who has lapsed, what they used to spend, and how often they used to come. They get a message from your WhatsApp, usually just an invitation back at your normal price.

  4. Shallow, measured discount

    Hours worth discounting, and the ones that aren't

    Some hours are genuinely dead. A small, targeted incentive on those, and only those, creates business that wouldn't have happened.

    Every hour of your week is scored on absolute fill, not on how it compares to your own average, and lands in one of three tiers.

    How an hour is scored
    TierWhat it isWhat we're allowed to do
    DeadUnder about 25% fullAnything, including a broadcast. There is no full-price customer to displace.
    OrdinaryNormal fillShallow offers, aimed at chosen customers only. Never a broadcast.
    ContestedYour best, busiest hoursNever discounted. These are where we move demand from, not to.

An offer only pays if the share of bookings that are genuinely new beats the discount. We launch at around 10% off the ticket, so the bar is 10%. Offers are also floored at your variable cost: consumables, payment fees and staff commission. In UAE salons that is often 30 to 50% of the ticket, which is why a small discount can quietly lose money.

Where we can, an offer is a credit, like AED 30 toward a Tuesday, rather than a percentage off. It protects your list price, and the customer always sees the true amount they will be charged.

How it works

Export, report, switch it on.

Step 1

Send us your booking history.

One export from whatever system you already use. A CSV is fine. A messy one is fine. Appointments, services, prices, and cancellations if your system records them. We map the columns for you, and you confirm the mapping before anything is computed.

You don't switch booking systems, install anything, or give us a login.

Two questions we'll ask

  • How many staff are actually on shift, by day? Without it we infer your capacity from overlapping bookings, which under-counts a quiet business badly and hides the hours that are genuinely dead.
  • Does your export include the date each booking was made? With it we can see whether the queue for your best hours is lengthening. Useful, not required.

Step 2

Get your leak report. Free, and yours either way.

Within a few days you get a report built entirely from your own file: no-shows and what they cost you, cancelled prime slots that went unsold, dormant customers and what they used to be worth, and which hours of your week are dead, ordinary or contested. Every figure names the evidence behind it.

Every number in that report is modelled. It is what your history implies, not what we have proven, and it is labelled that way throughout. It is not a number anyone should bill on.

You can read the report, thank us, and stop.

Leak report · last 90 days
No-showsmodelled
3,200
Cancelled prime slots, unsoldmodelled
3,300
Dormant customers (34)modelled
2,000
Dead hours, Tue to Thumodelled
1,000
Monthly, modelled9,500

Illustrative fragment. Every figure in a real report is computed from your own export and carries the same modelled label.

Step 3

Approve what goes out. Nothing sends itself.

We draft the campaigns. A person approves every one before a single message leaves. Messages go from your WhatsApp to your customers, never a marketplace, never a shared list, never anyone else's customers.

Your customer gets a mobile page showing one business, and books in under a minute with guest checkout or a Google or Apple sign-in. Full-price links look like full-price links. A struck-through price appears only where there is a real concession.

You get a today view your front desk can pin to a phone, one-tap attendance marking, and a weekly report.

The same offers can also appear on your own booking page for people already browsing, steering which slot they take rather than whether they come. No message, no send cost.

Enforced in code, not policy

  • Only customers who opted in are messaged. Opt-out is immediate and permanent: a reply of STOP stops everything, including anything already queued.
  • Nothing sends outside 08:00 to 21:00, Asia/Dubai.
  • Every link is single-use and personal, so no code ends up in a WhatsApp group.
  • A customer sees offers at a capped frequency, so nobody is trained to wait for a discount.

Honest measurement

If it didn't work, your report says so.

A salon's revenue moves more month to month on weather, school holidays and Ramadan timing than any campaign will. So “revenue went up” proves nothing, and neither does a screen full of bookings that came through our link. The only way to know whether we did anything is to keep a randomly chosen group out of every campaign and compare.

Eligible customers
MessagedHeld back, sent nothing

Both groups book

Messaged

Held back, sent nothing

The difference is the only number we report

Every campaign, not a sample of them.

  1. A randomized holdout on every campaign.

    A random share of the eligible audience is deliberately not messaged. What they book anyway is what you would have got without us. That is the baseline, and it is subtracted. For offers shown on your own booking page the coin flip happens on the slot instead of the customer: a share of eligible dead-tier slots renders with no incentive at all.

  2. The headline is net, after discounts.

    Not bookings. Not gross revenue through our link. Gross, minus what would have happened anyway, minus every dirham of incentive given away. The incentive cost is printed next to it, always.

  3. Second number: revenue per open hour.

    It is the number that actually moves when we succeed, and it can't be flattered by choosing a denominator.

  4. Small samples say directional on their face.

    Under roughly ten holdout bookings an estimate is a direction, not a measurement, and the report says so on the number itself, not in a footnote.

Which means the report can come back and tell you a campaign lost money. It has to be able to. A measurement that can only return good news isn't a measurement. When it does, we stop that campaign.

A worked example

One Wednesday, both ways.

Illustrative. Not a customer result.

An aesthetics clinic, one clinician. Round numbers chosen to show the arithmetic. Yours come from your own file.

Wednesday · one clinicianAED
Without usAED 4,300
Without us · Wednesday · one clinician
10:0012:0014:0016:0018:00
10:00. Booked either way. AED 1,400.
11:00. Empty.
12:00. No-show. Lost AED 1,800.
13:00. Empty.
14:00. Cancelled, never refilled. Lost AED 1,200.
15:00. Empty.
16:00. Empty.
17:00. Booked either way. AED 700.
18:00. Booked either way. AED 2,200.
With us · Wednesday · one clinician
10:0012:0014:0016:0018:00
10:00. Booked either way. AED 1,400.
11:00. Filled with a credit. Before the credit 1,200. AED 1,080.
12:00. Filled at full price. AED 1,800.
13:00. Empty.
14:00. Filled at full price. AED 1,200.
15:00. Filled at full price. AED 1,400.
16:00. Filled with a credit. Before the credit 1,200. AED 1,080.
17:00. Booked either way. AED 700.
18:00. Booked either way. AED 2,200.
With usAED 10,860
  1. Dead hour. Skin booster, AED 120 credit.
  2. No-show on a filler, prevented.
  3. Cancelled skin booster, refilled at full price.
  4. Lapsed patient back for botox, full price.

One clinician, one Wednesday, with all four leaks in it. A real Wednesday rarely has all four.

AED 4,400
added at full price
AED 2,160
added in the two discounted hours
AED 240
given away in credits

A credit on a dead hour brings in people who would not have come at all. It also moves a few who would have come on Saturday anyway. Only the holdout tells them apart.

The same offer across a month, with the holdout subtracted.

The same offer across a month, with the holdout subtracted.

The 200 held back booked at

12 bookings from the 400 messaged, and half of them would not have booked otherwise.

Net, after every dirham of credit+AED 5,760Directional, not precise

Almost everyone would have come anyway. Nothing on the screen looked any different.

Net, after every dirham of credit−AED 240

Revenue per open hour, that window: AED 202 to AED 266.

net = bookings × ticket × (share genuinely new − discount rate)

Questions

The things owners ask first.

Will this cheapen my brand?
Your busiest hours are never discounted. Offers are small, aimed at chosen customers, and framed as a credit rather than a markdown. Your list prices stay where they are and stay visible, and three of the four leaks involve no discount at all.
Do I need new software?
No. We work from one export and WhatsApp. You don't switch booking systems, install anything, or give us a login.
How do I know it worked?
Every campaign keeps a randomly chosen group out and sends them nothing. What that group books anyway is subtracted from what the messaged group booked. The number you get is net of every dirham of discount given away, and if it is negative the report says so.
Is my customer data safe?
Only customers who opted in are messaged, opt-outs are honoured immediately and permanently, and nothing sends outside 08:00 to 21:00 Asia/Dubai. Your customers are never shared with another business. Personal data is handled under UAE PDPL.
How long does the report take?
A few days from the export. It is free, and it is yours whether or not you switch anything on.
Does AI set my prices?
No. Pricing and slot selection are plain, deterministic code, and you can read the rule: an offer only goes out where the share of genuinely new bookings can beat the discount. AI reads messy exports and drafts message copy. A person approves every campaign.