Custom CRM for Fitness Studio Management
Built custom fitness CRM reducing daily admin time by 85% for 150+ students across 8 courses.


The Challenge
A fitness studio chain with 3 locations managing 150+ active students across 8 different course types was drowning in administrative chaos. Student data lived in 4 separate Google Sheets (one per staff member), course registrations came through Elementor forms that dumped into email inboxes with no database connection, and payment reconciliation against their Israeli payment processor (Sumit) was a weekly 4-hour ordeal of matching bank transfers to student records. Duplicate student entries were rampant ā the same person might appear 3 times with slightly different name spellings. Staff spent 3+ hours daily on admin tasks, payment reminders were sent manually (and often forgotten), and there was no single view of which students were active, which had outstanding balances, and which courses were at capacity.
Our Solution
We developed a custom WordPress plugin with a full React-based admin dashboard that became the single source of truth for all student operations. The system automatically captures leads from Elementor registration forms via webhook, runs duplicate detection using fuzzy name matching and phone number normalization (critical for Israeli phone formats), and creates unified student profiles. Payment processing integrates directly with Sumit's API via webhooks ā when a payment is received, the system auto-matches it to the correct student and course, updates their balance, and marks their enrollment as active. We built an automated 4-stage payment reminder system: friendly reminder 3 days before due date, due-date notification, 7-day overdue escalation, and 14-day final notice with admin alert. The dashboard shows real-time occupancy per course, revenue per location, and a filterable student roster with payment status indicators.

Detailed Approach
The WordPress plugin was built with a PHP backend handling data models and API endpoints, and a React frontend using TypeScript for the admin dashboard. We chose WordPress because the client's existing website ran on it, and embedding the CRM as a plugin meant zero additional hosting costs and single-login access for staff.
The data model centers on three entities: Students, Courses, and Enrollments (the join table with payment status). We built a REST API within the plugin that the React dashboard consumes, with endpoints for CRUD operations, bulk actions, and reporting queries. The duplicate detection system runs on every new registration: it normalizes Hebrew names (handling common spelling variations), standardizes phone numbers to E.164 format, and uses Levenshtein distance scoring with a configurable threshold. Matches above 80% similarity are flagged for staff review rather than auto-merged.
The Sumit payment integration listens for IPN (Instant Payment Notification) webhooks. When a payment arrives, we match it using the unique payment reference code embedded in the original payment link. The 4-stage reminder system runs as a WordPress cron job, checking due dates daily and dispatching WhatsApp messages via the WhatsApp Business API. Each reminder stage has a customizable template with merge fields for student name, amount, and course name.
Key Results
š We spent 1 week on requirements and data migration planning, including deduplicating the 4 existing spreadsheets into a clean starting dataset- ā85% reduction in daily admin time ā from 3+ hours to under 30 minutes
- āDuplicate student records eliminated ā fuzzy matching caught 47 existing duplicates on launch
- āPayment collection rate improved from 78% to 94% with automated reminders
- āCourse occupancy visibility enabled data-driven scheduling ā 2 underperforming time slots restructured
- āRegistration-to-enrollment time dropped from 2-3 days to instant
- āZero missed payment reminders since launch ā previously 20-30% were forgotten
We spent 1 week on requirements and data migration planning, including deduplicating the 4 existing spreadsheets into a clean starting dataset. Plugin development took 4 weeks. Data migration and parallel testing ran for 2 weeks before the old spreadsheets were retired.

Technology Stack
Learn More
Dive deeper into the strategies and frameworks behind this project:
Related Services & Industry
Ready for similar results?
Let's talk about how we can automate your business processes.
Get Free Automation Audit