Gym Membership Calculator

Convert more website visitors into gym members with transparent pricing. This calculator helps potential members understand membership costs based on their chosen plan, contract length, add-ons like personal training or classes, and any current promotions. Perfect for gyms, fitness centers, health clubs, and boutique studios looking to streamline the sign-up process.

Health & FitnessPopular

Try the Calculator

Membership Cost Calculator
๐Ÿ‹๏ธ Membership Options
 
 
โœจ Add-on Services
๐ŸŽ Promotions
 

๐Ÿ’ฐ Price Summary
$ 39.99
/mo
+
$ 0.00
/mo
$ 39.99
/mo

$ 99.00
$ 578.90
/year
You save $120 per year with your 12 month contract!
Includes: All Basic perks + unlimited group classes, locker room access
๐Ÿงพ Summary
$ 39.99
/mo
$ 138.99
Membership subject to facility rules and availability. Contract cancellation terms apply.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
export function gymMembershipCalculator(form: FormTs) {
// Monthly rates by membership tier
const tierRates: Record<string, number> = {
'basic': 29.99,
'standard': 49.99,
'premium': 79.99,
'vip': 129.99
};
 
// Contract length discounts
const contractDiscounts: Record<string, number> = {
'monthly': 0,
'6-month': 10,
'12-month': 20,
'24-month': 25
};
 
// Initiation fees by tier
const initiationFees: Record<string, number> = {
'basic': 49,
'standard': 99,
'premium': 149,
'vip': 199
};
 
form.addRow(row => {
row.addTextPanel('header', {
computedValue: () => 'Membership Cost Calculator',
customStyles: { 'font-size': '1.5rem', 'font-weight': '600', 'color': '#1e293b' }
});
});
 
form.addSpacer({ height: 20 });
 
// Membership Type Section
const membershipSection = form.addSubform('membershipType', { title: '๐Ÿ‹๏ธ Membership Options' });
 
membershipSection.addRow(row => {
row.addRadioButton('tier', {
label: 'Membership Level',
options: [
{ id: 'basic', name: 'Basic - Gym floor access, cardio & weights ($29.99/mo)' },
{ id: 'standard', name: 'Standard - Basic + Group classes, locker room ($49.99/mo)' },
{ id: 'premium', name: 'Premium - Standard + Pool, sauna, towel service ($79.99/mo)' },
{ id: 'vip', name: 'VIP - All Access + Guest passes, priority booking ($129.99/mo)' }
],
defaultValue: 'standard',
orientation: 'vertical',
isRequired: true
});
});
 
membershipSection.addRow(row => {
row.addDropdown('memberType', {
label: 'Membership Type',
options: [
{ id: 'individual', name: 'Individual' },
{ id: 'couple', name: 'Couple (+75% for 2nd member)' },
{ id: 'family', name: 'Family (up to 4 members, +50% each additional)' },
{ id: 'student', name: 'Student (-20%, ID required)' },
{ id: 'senior', name: 'Senior 65+ (-15%)' },
{ id: 'corporate', name: 'Corporate (-10%, employer verification)' }
],
defaultValue: 'individual',
isRequired: true
}, '1fr');
row.addInteger('familyMembers', {
label: 'Additional Family Members',
min: 0,
max: 3,
defaultValue: 0,
isVisible: () => membershipSection.dropdown('memberType')?.value() === 'family'
}, '1fr');
});
 
membershipSection.addRow(row => {
row.addRadioButton('contract', {
label: 'Contract Length',
options: [
{ id: 'monthly', name: 'Month-to-Month (No commitment)' },
{ id: '6-month', name: '6-Month Contract (-10%)' },
{ id: '12-month', name: '12-Month Contract (-20%)' },
{ id: '24-month', name: '24-Month Contract (-25%)' }
],
defaultValue: '12-month',
orientation: 'vertical'
});
});
 
// Add-ons Section
const addonsSection = form.addSubform('addons', { title: 'โœจ Add-on Services' });
 
addonsSection.addRow(row => {
row.addCheckbox('personalTraining', {
label: 'Personal Training Pack (4 sessions/mo, +$200)',
defaultValue: false
}, '1fr');
row.addCheckbox('nutritionCoaching', {
label: 'Nutrition Coaching (+$75/mo)',
defaultValue: false
}, '1fr');
});
 
addonsSection.addRow(row => {
row.addCheckbox('lockerRental', {
label: 'Premium Locker Rental (+$15/mo)',
defaultValue: false
}, '1fr');
row.addCheckbox('parking', {
label: 'Reserved Parking (+$25/mo)',
defaultValue: false
}, '1fr');
});
 
addonsSection.addRow(row => {
row.addCheckbox('kidsClub', {
label: "Kids' Club Childcare (+$50/mo)",
defaultValue: false
}, '1fr');
row.addCheckbox('tanning', {
label: 'Unlimited Tanning (+$30/mo)',
defaultValue: false
}, '1fr');
});
 
addonsSection.addRow(row => {
row.addCheckbox('massage', {
label: 'Monthly Massage (1 session, +$60/mo)',
defaultValue: false
}, '1fr');
row.addCheckbox('appPremium', {
label: 'Premium App Features (+$10/mo)',
defaultValue: false
}, '1fr');
});
 
// Promotions Section
const promoSection = form.addSubform('promotions', { title: '๐ŸŽ Promotions' });
 
promoSection.addRow(row => {
row.addCheckbox('waiveInitiation', {
label: 'Waive initiation fee (New Year Special)',
defaultValue: false
}, '1fr');
row.addCheckbox('firstMonthFree', {
label: 'First month free (12+ month contracts)',
defaultValue: false,
isVisible: () => {
const contract = membershipSection.radioButton('contract')?.value();
return contract === '12-month' || contract === '24-month';
}
}, '1fr');
});
 
promoSection.addRow(row => {
row.addCheckbox('referralDiscount', {
label: 'Referral discount (-$10/mo for 3 months)',
defaultValue: false
}, '1fr');
row.addTextbox('promoCode', {
label: 'Promo Code',
placeholder: 'Enter code (optional)'
}, '1fr');
});
 
form.addSpacer({ height: 20, showLine: true, lineStyle: 'dashed' });
 
// Price Summary Section
const summarySection = form.addSubform('summary', { title: '๐Ÿ’ฐ Price Summary', isCollapsible: false });
 
const getMemberTypeMultiplier = () => {
const memberType = membershipSection.dropdown('memberType')?.value() || 'individual';
const familyMembers = membershipSection.integer('familyMembers')?.value() || 0;
 
const multipliers: Record<string, number> = {
'individual': 1.0,
'couple': 1.75,
'family': 1 + (familyMembers * 0.5),
'student': 0.8,
'senior': 0.85,
'corporate': 0.9
};
 
return multipliers[memberType] || 1;
};
 
const getMonthlyBase = () => {
const tier = membershipSection.radioButton('tier')?.value() || 'standard';
const contract = membershipSection.radioButton('contract')?.value() || '12-month';
 
const baseRate = tierRates[tier] || 49.99;
const discount = contractDiscounts[contract] || 0;
const memberMultiplier = getMemberTypeMultiplier();
 
return baseRate * memberMultiplier * (1 - discount / 100);
};
 
const getAddonsTotal = () => {
let total = 0;
if (addonsSection.checkbox('personalTraining')?.value()) total += 200;
if (addonsSection.checkbox('nutritionCoaching')?.value()) total += 75;
if (addonsSection.checkbox('lockerRental')?.value()) total += 15;
if (addonsSection.checkbox('parking')?.value()) total += 25;
if (addonsSection.checkbox('kidsClub')?.value()) total += 50;
if (addonsSection.checkbox('tanning')?.value()) total += 30;
if (addonsSection.checkbox('massage')?.value()) total += 60;
if (addonsSection.checkbox('appPremium')?.value()) total += 10;
return total;
};
 
summarySection.addRow(row => {
row.addPriceDisplay('monthlyBase', {
label: 'Monthly Membership',
computedValue: () => Math.round(getMonthlyBase() * 100) / 100,
variant: 'default',
suffix: '/mo'
}, '1fr');
row.addPriceDisplay('monthlyAddons', {
label: 'Monthly Add-ons',
computedValue: getAddonsTotal,
variant: 'default',
prefix: '+',
suffix: '/mo'
}, '1fr');
});
 
summarySection.addRow(row => {
row.addPriceDisplay('monthlyTotal', {
label: 'Total Monthly Cost',
computedValue: () => {
let monthly = getMonthlyBase() + getAddonsTotal();
 
// Apply referral discount
if (promoSection.checkbox('referralDiscount')?.value()) {
monthly -= 10;
}
 
return Math.round(monthly * 100) / 100;
},
variant: 'large',
suffix: '/mo'
});
});
 
summarySection.addSpacer({ showLine: true, lineStyle: 'dashed', lineColor: '#e2e8f0' });
 
summarySection.addRow(row => {
row.addPriceDisplay('initiationFee', {
label: 'Initiation Fee',
computedValue: () => {
if (promoSection.checkbox('waiveInitiation')?.value()) return 0;
 
const tier = membershipSection.radioButton('tier')?.value() || 'standard';
return initiationFees[tier] || 99;
},
variant: 'default'
}, '1fr');
row.addPriceDisplay('annualCost', {
label: 'Annual Investment',
computedValue: () => {
let monthly = getMonthlyBase() + getAddonsTotal();
if (promoSection.checkbox('referralDiscount')?.value()) {
// Discount applies for 3 months only
monthly = (monthly - 10) * 3 + monthly * 9;
monthly = monthly / 12;
}
 
let annual = monthly * 12;
 
// Add initiation fee
if (!promoSection.checkbox('waiveInitiation')?.value()) {
const tier = membershipSection.radioButton('tier')?.value() || 'standard';
annual += initiationFees[tier] || 99;
}
 
// Subtract first month if free
if (promoSection.checkbox('firstMonthFree')?.value()) {
annual -= monthly;
}
 
return Math.round(annual * 100) / 100;
},
variant: 'default',
suffix: '/year'
}, '1fr');
});
 
summarySection.addRow(row => {
row.addTextPanel('savings', {
computedValue: () => {
const contract = membershipSection.radioButton('contract')?.value() || '12-month';
const tier = membershipSection.radioButton('tier')?.value() || 'standard';
const baseRate = tierRates[tier] || 49.99;
const memberMultiplier = getMemberTypeMultiplier();
const monthlyAtFull = baseRate * memberMultiplier * 12;
 
const discount = contractDiscounts[contract] || 0;
if (discount === 0) return 'Switch to an annual plan to save more!';
 
const savings = monthlyAtFull * (discount / 100);
return `You save $${Math.round(savings)} per year with your ${contract.replace('-', ' ')} contract!`;
},
customStyles: { 'font-size': '0.9rem', 'color': '#059669', 'font-weight': '500' }
});
});
 
summarySection.addRow(row => {
row.addTextPanel('perks', {
computedValue: () => {
const tier = membershipSection.radioButton('tier')?.value() || 'standard';
const perks: Record<string, string> = {
'basic': 'Includes: 24/7 gym access, cardio & weight equipment, free WiFi',
'standard': 'Includes: All Basic perks + unlimited group classes, locker room access',
'premium': 'Includes: All Standard perks + pool, sauna, steam room, towel service',
'vip': 'Includes: All Premium perks + 2 guest passes/mo, priority class booking, spa discounts'
};
return perks[tier] || '';
},
customStyles: { 'font-size': '0.85rem', 'color': '#475569' }
});
});
 
const finalSection = form.addSubform('final', {
title: '๐Ÿงพ Summary',
isCollapsible: false,
sticky: 'bottom'
});
 
finalSection.addRow(row => {
row.addPriceDisplay('monthlyTotalFinal', {
label: 'Monthly Cost',
computedValue: () => {
let monthly = getMonthlyBase() + getAddonsTotal();
if (promoSection.checkbox('referralDiscount')?.value()) {
monthly -= 10;
}
return Math.round(monthly * 100) / 100;
},
variant: 'default',
suffix: '/mo'
}, '1fr');
row.addPriceDisplay('dueToday', {
label: 'Due Today',
computedValue: () => {
let dueToday = 0;
 
// Initiation fee
if (!promoSection.checkbox('waiveInitiation')?.value()) {
const tier = membershipSection.radioButton('tier')?.value() || 'standard';
dueToday += initiationFees[tier] || 99;
}
 
// First month (unless free)
if (!promoSection.checkbox('firstMonthFree')?.value()) {
let monthly = getMonthlyBase() + getAddonsTotal();
if (promoSection.checkbox('referralDiscount')?.value()) monthly -= 10;
dueToday += monthly;
}
 
return Math.round(dueToday * 100) / 100;
},
variant: 'large'
}, '1fr');
});
 
finalSection.addRow(row => {
row.addTextPanel('disclaimer', {
computedValue: () => 'Membership subject to facility rules and availability. Contract cancellation terms apply.',
customStyles: { 'font-size': '0.85rem', 'color': '#94a3b8', 'font-style': 'italic' }
});
});
 
form.configureSubmitButton({
label: 'Start Membership'
});
}
 

Frequently Asked Questions

Can I offer different membership tiers?

Yes, you can create multiple membership levels with different access levels, amenities, and pricing. Common tiers include Basic, Premium, and VIP/All-Access.

Does it handle contract vs. month-to-month pricing?

Absolutely. You can set different rates for annual contracts, monthly memberships, and prepaid options with appropriate discounts.

Can I add promotions and discounts?

Yes, you can configure promotional pricing, waived initiation fees, referral discounts, and seasonal offers that update automatically.

Does it support family and corporate memberships?

Yes, the calculator supports individual, couple, family, and corporate membership types with configurable pricing for additional members.