Skip to main content
Sleek gym interior

GymRetentions — The AI SaaS that predicts gym member churn before it happens.

Prevent churn, save thousands, and grow retention effortlessly.

Learn More
Tech dashboard interface

AI Risk Flags

Predict who's likely to quit

Intercom panel interface

Smart Retention Actions

Free class, trainer check-in, discount

Black flat screen computer monitor

Revenue Dashboard

See at-risk revenue instantly

Get Started Today

Transform your gym's retention strategy with AI-powered insights.

Gym fitness tech Man doing yoga Yoga practice

Dashboard

Total Members

0

At-Risk Members

0

At-Risk Revenue

$0

Add New Member

Name Last Visit Date Monthly Fee Risk Score Suggested Action Actions
+ atRisk.reduce((sum, m) => sum + m.monthlyFee, 0).toLocaleString(); } function renderTable(filteredMembers = members) { const tbody = document.getElementById('memberTable'); tbody.innerHTML = ''; filteredMembers.forEach(member => { const risk = calculateRisk(member.lastVisit); const row = ` ${member.name} ${new Date(member.lastVisit).toLocaleDateString()} ${member.monthlyFee.toLocaleString()} ${risk.score} ${risk.score === 'High Risk' ? 'Free class + trainer check' : risk.score === 'Medium Risk' ? 'Discount offer' : 'Continue engagement'}
`; tbody.innerHTML += row; }); } function addMember() { const name = document.getElementById('memberName').value; const lastVisit = document.getElementById('lastVisit').value; const monthlyFee = parseFloat(document.getElementById('monthlyFee').value); if (name && lastVisit && monthlyFee) { members.push({ id: memberIdCounter++, name, lastVisit, monthlyFee }); updateSummary(); renderTable(); document.getElementById('memberName').value = ''; document.getElementById('lastVisit').value = ''; document.getElementById('monthlyFee').value = ''; } } function scheduleAction(memberName, action) { document.getElementById('modalText').textContent = `✔️ ${action} scheduled for ${memberName}`; document.getElementById('actionModal').classList.remove('hidden'); document.body.style.overflow = 'hidden'; } function closeModal() { document.getElementById('actionModal').classList.add('hidden'); document.body.style.overflow = ''; } document.getElementById('searchInput').addEventListener('input', (e) => { const searchTerm = e.target.value.toLowerCase(); const filtered = members.filter(m => m.name.toLowerCase().includes(searchTerm)); renderTable(filtered); const noMemberFound = document.getElementById('noMemberFound'); if (searchTerm && filtered.length === 0) { noMemberFound.classList.remove('hidden'); } else { noMemberFound.classList.add('hidden'); } }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeModal(); }); document.getElementById('actionModal').addEventListener('click', (e) => { if (e.target.id === 'actionModal') closeModal(); });