What gym owners want from your software
The owner of a neighborhood gym, a pilates studio or a functional training box runs the same math: keeping a member is cheaper than winning a new one. The problem is that the front desk has no time to message every member who skipped class, every plan expiring this week and every open invoice. It gets pushed to later, and by then the member has already canceled.
Your system already knows who checked in yesterday, who hasn't shown up in ten days and which plan expires on Friday. Putting WhatsApp inside the product turns those signals into conversations, without the owner opening a spreadsheet or copying numbers into a phone.
Automations by retention signal
The table sums up the rules that show up most in software for this industry. The timings are starting points; ideally the owner adjusts them in the dashboard.
| Signal in the system | When | Message |
|---|---|---|
| Plan about to end | 7 days before | Renewal notice with the next cycle price |
| Class booked | 2 hours before | Reminder with the option to release the spot |
| No check-in | 10 days in a row | Message from the coach asking if everything is OK |
| Unpaid membership | 1 and 5 days after the due date | Reminder with the location's payment link |
| New member's first week | After the 1st and 3rd check-in | Welcome and an invitation to the fitness assessment |
| Plan canceled | 45 to 90 days later | Invitation to come back, no aggressive discount |
The check-in rule usually brings the biggest return and is the simplest: one daily query on your database, one short, personal message. "We missed you in Tuesday's class" works better than any promotion.
Class booking with an interactive list
Studios and boxes run on limited spots per time slot. A member who booked and doesn't show up takes someone else's spot. A reminder with a list solves both sides: the member confirms or releases the spot with one tap.
await dapi.interactive.sendList({
sessionId: 'downtown-location',
to: '15551234567',
title: "Today's class, 6:30 PM",
description: 'You have a spot booked in Functional. Can you make it?',
buttonText: 'Reply',
sections: [{
title: 'Booking #5521',
rows: [
{ rowId: 'r5521:confirm', title: "I'm coming, hold my spot" },
{ rowId: 'r5521:release', title: "I can't, release the spot" },
],
}],
})
// in the webhook (event: messages.received, data.type: list_response)
const [bookingId, action] = payload.data.data.selected_row_id.split(':')
if (action === 'release') await releaseSpot(bookingId) // notifies the waitlistPutting the booking ID inside the rowId means you don't have to store conversation state: the reply already says which booking and which action. Other interactive formats are in WhatsApp buttons and lists, and time slot reminders in other industries are in appointment reminders.
Late payments without embarrassing the member
Chasing members for money is delicate: the front desk knows people by name and nobody wants an awkward conversation at the counter. An automatic message takes that weight off. Tone matters more than frequency: a neutral reminder on day one and the location's payment link on day five solve most delays caused by forgetting. Whatever is left goes to a human conversation. For the full payment reminder flow, see payment reminders on WhatsApp.
Implementation plan
- One connection per location. In the gym settings, the owner connects the front desk WhatsApp by scanning a QR code your platform generates through the API.
- Opt-in at sign-up. A field on the member profile, already filled in on the membership form, authorizes the messages.
- One daily job. A scheduled routine runs the retention rules and publishes the messages to a queue, spread out over business hours.
- Real-time events. Class bookings and confirmed payments send right away, straight from the event in your system.
- Replies in the dashboard. The incoming messages webhook feeds a simple screen so the front desk sees who replied, without relying only on the location's phone.
Infrastructure that doesn't become your support team's problem
When a location's WhatsApp stops sending, the owner calls your support, not the API provider. That's why connection behavior matters: on D-API each location runs isolated, with its own IP and auto-reconnect, and the status event tells your system when something needs the owner's action, like scanning the QR code again.
The D-API WhatsApp API bills per connection, not per message, which makes the cost of each gym in your base predictable. For the product model with WhatsApp built in, see WhatsApp API for SaaS. Talk to sales for a 14-day free trial.
