Stop Losing Leads.
Start Booking Consultations
On Autopilot.
The only multi-step consultation booking funnel built from the ground up for the fitness industry. Qualifies every lead, assigns the right rep, captures 60+ data signals, and delivers a complete lead brief to your team — before the customer even picks up the phone.
Fitness Businesses Are Losing Leads
With Every Generic Contact Form.
A name, email, and phone number is not a lead. It's a name list. Without qualification, context, intent, and behavioral data — your sales team is cold-calling warm prospects and losing high-intent buyers to competitors who respond faster with better information.
Generic Contact Forms Deliver Zero Context
A bare-bones inquiry tells you nothing. Budget, timeline, space type, equipment interest, preferred rep — all missing. Your team calls blind, wastes 20 minutes qualifying, and half the leads ghost before the second touch.
No Way to Route Leads to the Right Rep
You have four locations and eight sales reps. Every inquiry goes to a shared inbox. The rep who picks it up may be the wrong fit for that customer, that location, or that deal size. Attribution is impossible. Rep performance is unmeasurable.
High-Intent Visitors Leave Without Booking
Someone spends 8 minutes on your site, visits four equipment pages, and then leaves without filling anything out. You have no idea they were there. The abandon beacon captures those partial completions — but only if your form is built for it.
Calendar Booking Happens Outside Your Funnel
You send prospects to a third-party scheduling tool after contact. By then, 40% of them have already moved on. Scheduling needs to be inside the qualification flow — not a second step they have to find on their own.
Multi-Location Routing Done Manually
You have showrooms in four cities. Nothing in your current setup detects which one is closest to the prospect. Every lead starts without location context. Your team wastes the first 5 minutes of every call asking "where are you located?"
Attribution Is Broken. Ad Spend Is Guesswork.
You're spending on Google and Meta ads but can't tell which campaigns are generating consultations. UTMs get stripped, click IDs expire, referrer data is lost. Every lead looks like "direct traffic." Optimization is impossible.
GymSpotter Booking Form System solves every one of these with a single embeddable funnel.
Visitor In. Qualified Lead Out.
Every Time. Automatically.
A visitor lands on your booking page. Ten intelligent steps later, your team has a fully qualified lead with location, rep assignment, budget, intent, preferred contact method, scheduled date — and 60+ behavioral and browser signals. No manual work. No follow-up guesswork.
-
Location Detected Automatically
The moment a visitor lands, the system reads GTF region data, URL params, referring URL patterns, sessionStorage, and IP geolocation via BigDataCloud. If it can identify the nearest location, it pre-selects it and skips step 0 — jumping straight to step 1. The visitor never has to choose their location if we already know it.
-
Sales Rep Selected or Auto-Assigned
After location selection, the system reveals a rep picker grid filtered to that location's team — with real names, photos, and titles. Reps share personal booking links (?rep=their-slug) that auto-select them. If no rep is chosen, "No Preference" defaults in and your team assigns manually. Every booking is attributed to a specific rep.
-
8 Qualification Steps. Auto-Advancing.
Steps 1–8 cover consultation type, service interest, space type, budget range, timeline, equipment interest, customer journey stage, and contact preferences. Single-selection steps auto-advance on click — no "Continue" button needed. Progress is saved to localStorage every step so visitors can resume 48 hours later.
-
Contact Info Captured at Step 9
Name, phone, email, ZIP, how they found you, and optional notes. Phone formats in real-time. Validation fires on Continue with inline error display. Fields auto-save on blur. If the visitor abandons after entering a phone or email, the abandon beacon fires immediately — you have their contact data even if they never reach step 10.
-
Date & Time Scheduled In-Funnel
Step 10 presents a custom calendar (90-day booking window, no weekends disabled, no third-party dependency) alongside a 3-column time slot grid. Date and time selection happens inside the funnel — the visitor never leaves to a scheduling tool. Consent checkbox fires before submission.
-
Complete Payload Fires to Your Webhook
On submission, a single JSON webhook fires to n8n, Zapier, Make, HubSpot, GoHighLevel, or any custom endpoint. The payload contains all 60+ fields: every form answer, rep assignment, showroom data, UTM/GCLID/FBCLID attribution, full device fingerprint, IP geolocation, step timing data, behavioral signals, first-party cookie IDs, and the WebGL/canvas fingerprint hash.
-
Success Screen + Thank-You Page Personalized
A full-screen success animation confirms the booking before redirecting. The complete booking payload is written to sessionStorage (key: bk_thankyou_data) so the thank-you page can display personalized confirmation — name, rep, location, date, and time — without any URL parameters. Zero PII in the address bar.
What Gets Captured in Every Submission
All 10 Qualification Answers
Consultation type, service, space, budget, timeline, equipment, customer journey, contact method + time, name, phone, email, ZIP, how found, notes, date, time slot.
Rep & Location Assignment
Assigned rep ID, name, title, rep_preselected flag, showroom key, name, region, phone, email, address, and team name — fully structured for CRM routing.
Full UTM & Click ID Attribution
utm_source, utm_medium, utm_campaign, utm_content, utm_term, utm_id, gclid, fbclid, msclkid, ttclid — persisted via sessionStorage across page navigation and always present in the final payload.
IP Geolocation (15 Fields)
City, locality, region, region code, country, country code, postcode, latitude, longitude, continent, EU member flag, ISP/ASN, and nearest showroom computed via Haversine distance formula.
Browser Fingerprint (35+ Fields)
Device type, OS, browser + version, screen dimensions, viewport, pixel ratio, color depth, orientation, touch support, WebGL renderer + vendor, canvas hash, battery level + charging, JS heap size, RTT, IndexedDB, Web Workers, AudioContext, PDF viewer, and 10 more.
Behavioral & Engagement Data
Time on page, funnel duration, scroll depth %, step reached, per-step timing (ms), session ID, session start time, pages visited count, mouse/touch/keyboard detection, bot/webdriver flag, page load time, local hour and day.
First-Party Cookie Signals
GA4 client ID, GA4 session ID, GTM container IDs, Facebook Pixel _fbp, Facebook click _fbc, HubSpot UTK, and GTF region cookie — for cross-platform identity matching.
Referrer & Traffic Source
Full referrer URL, parsed referrer domain, traffic_source classification (organic, paid_search, paid_social, social, referral, internal, direct), and referrer platform (google, facebook_ads, instagram, etc).
Built for Every Fitness Business
That Books Consultations or Appointments
From a single-location personal training studio to a six-showroom commercial equipment dealer, the GymSpotter Booking Form System adapts to your business model, your team structure, and your sales process. Select your business type below.
Every Walk-in Starts Online Now. Be Ready.
Your customers research for weeks before they ever call. When they're ready, they're comparing three companies simultaneously. A multi-step qualifier that captures budget, space type, equipment interest, and preferred rep — then books a date and time — wins the appointment before your competitors even reply to a contact form.
- Budget and equipment interest captured before your team picks up the phone
- Per-showroom rep picker with photos — customers choose who they want
- Consultation type selection: in-showroom, in-home, phone, or video
- IP geolocation routes the visitor to the nearest location automatically
- 48-hour resume — customer can finish booking the next day where they left off
Stop Taking Service Requests Over Text. Qualify First.
Every service call that comes in without context costs your dispatcher 10 minutes of back-and-forth. Equipment type, failure description, warranty status, preferred technician, and preferred visit window — captured before your tech ever gets dispatched. Fewer return visits. Better first-call resolution.
- Service type qualification: repair, preventive maintenance, relocation, installation
- Equipment type and space context captured upfront
- Assign a specific technician via ?rep= URL on their personal service card
- Calendar + time slot selection eliminates all scheduling back-and-forth
- Full payload fires to your dispatch system via webhook on submission
A Discovery Call Booking Form That Actually Qualifies.
Personal training is a deeply personal decision. A generic calendar link tells your prospect nothing and tells you nothing. The booking funnel qualifies fitness goals, training history, preferred session format, budget, availability window, and specific trainer preference — giving you a client brief before the first conversation even starts.
- Fitness goals, current routine, and experience level captured upfront
- Session format selection: in-person, virtual, semi-private, or group
- Trainer selection by specialty — clients pick who they want to work with
- Budget and commitment timeline qualified before you spend time on discovery
- Abandon beacon captures leads who start but don't finish
Turn Tour Requests Into Membership Sales Appointments.
A prospect requesting a gym tour is your highest-intent lead. Instead of sending them to a generic calendar, walk them through a qualifier that captures membership tier interest, fitness goals, schedule preferences, and whether they want a personal training consultation bundled with the tour. Your sales manager shows up fully prepared.
- Membership type, commitment length, and add-on interest captured
- Route to the right membership advisor by specialty or location
- Group class interest, PT interest, and goals all qualified upfront
- Full attribution — know which ad, which page, which keyword drove the tour request
- Personalized thank-you page shows advisor name and appointment details
One Booking System. Every Location. Every Rep. Zero Chaos.
You have six locations and twenty reps. Right now, leads go to a shared inbox and someone manually figures out where to route them. The booking system auto-detects the nearest location from IP, cookies, UTMs, and referrer signals — then shows only that location's rep grid. Every lead lands in the right queue, attributed to the right person, from the first touchpoint.
- Automatic location detection — visitor never has to ask "which location is closest?"
- Per-location rep rosters — reps only appear in the grid for their assigned showroom
- ?rep= personal booking links — each rep has a trackable, shareable booking URL
- Location and rep fields in every payload — route to the right CRM queue automatically
- Each location's phone, address, hours, and email shown in the sidebar — zero confusion
Every Feature Your Fitness Business
Needs to Convert More Consultations
Not a generic SaaS booking tool bolted onto your website. Every feature was designed for the specific way fitness equipment dealers, service companies, trainers, and gym operators actually sell.
Lead Intelligence & Qualification
Know exactly who your lead is, what they want, and how serious they are — before your team says hello.
Location Detection & Rep Routing
The right lead to the right rep at the right location — automatically, without manual dispatch.
Lead Capture, Abandon Recovery & Webhooks
Capture leads at every stage of the funnel — even from visitors who never reach the submit button.
Browser Fingerprinting & Signal Collection
35+ passive browser signals collected with zero prompts, zero invasiveness, and full GDPR compliance by design.
UX, Accessibility & Responsiveness
WCAG 2.2 compliant. Mobile-first. Animated. Fast. Works on every device your customers actually use.
One System. Three Tiers.
Priced for Every Fitness Business Size.
From a solo personal trainer to a 10-location commercial equipment dealer, the GymSpotter Booking Form System scales with you. Every tier includes the full 10-step funnel, abandon beacon, and webhook integration.
Booking Form System — Starter
Perfect for single-location fitness businesses, personal trainers, and studio operators booking up to 100 consultations per month.
- Full 10-step qualification funnel
- 1 location, up to 5 reps
- Complete booking webhook (1 endpoint)
- Abandon beacon lead recovery
- UTM + click ID attribution
- Custom calendar + time slots
- 48-hour progress save & resume
- GA4 + GTM + Facebook Pixel
- Thank-you page data passthrough
- WCAG 2.2 accessible + mobile responsive
- Multi-location routing
- Browser fingerprinting payload
Booking Form System — Pro
For multi-location dealers, fitness retailers, service companies, and commercial gym operators running serious lead volume.
- Everything in Starter, plus:
- Up to 10 locations, unlimited reps
- Automatic location detection — 5-signal chain
- IP geolocation + Haversine nearest-location routing
- Personal rep booking links (?rep= param)
- Full browser fingerprinting — 35+ signals
- WebGL renderer + canvas hash
- Battery API + network RTT signals
- Multiple webhook endpoints (complete + abandon)
- Full first-party cookie signal capture
- Per-step engagement timing analytics
- Priority email support
Booking Form System — Enterprise
For national chains, franchise networks, and enterprise dealers requiring custom branding, SLA support, dedicated infrastructure, and API-level CRM integration.
- Everything in Pro, plus:
- Unlimited locations and reps
- White-label branding — your logo, your colors
- Custom domain embedding
- Direct HubSpot, Salesforce, or GoHighLevel integration
- Custom qualification steps and step logic
- SLA-backed uptime with priority incident response
- Dedicated GymSpotter account manager
- Advanced analytics dashboard
- Custom contract and billing terms
Everything You Need to Know
Before You Set Up Your Booking System
Can't find your answer? Contact our team — we respond within one business day.
The system reads five signals in priority order: (1) GTF_REGION_DATA global variable set by your site's region engine, (2) GTF_REGION_SLUG global, (3) ?location= or ?showroom= URL parameters, (4) the referring URL — if it contains a location keyword like "woodbury" or "greenwich" it maps to that showroom, and (5) IP geolocation via BigDataCloud's free reverse geocode API, which computes the nearest location via Haversine distance.
If any signal fires before IP geo returns, step 0 (the location picker) is skipped entirely and the visitor goes straight to step 1. If no signal fires by the time the page loads, step 0 shows and the visitor selects manually. IP geo continues to run async and applies automatically if it resolves before the visitor advances.
If the visitor has entered a phone number or email address (step 9), the abandon beacon fires the moment the page unloads — whether they close the tab, navigate away, or the browser is killed. The beacon uses navigator.sendBeacon() with a synchronous XMLHttpRequest fallback for older browsers.
The abandon payload contains all the same 60+ fields as the completion payload — every qualification answer, location, rep, attribution, and device signals collected up to that point — plus an abandon_step field indicating where they left. This is separate from the complete webhook so your CRM can route them differently.
Each rep in the roster has a URL-safe slug ID (e.g. "kurt-blauberg"). Their personal booking link is simply: /booking?rep=kurt-blauberg. When someone opens that link: their showroom is auto-selected based on the rep's primary showroom, a pre-selected rep banner replaces the rep grid showing the rep's name and photo, and the rep_preselected flag is set to true in the payload.
A "Change rep" link is always visible so the visitor can override the selection if needed. Personal rep links are ideal for business cards, email signatures, Google ad extensions, and retargeting campaigns where you want direct rep attribution.
The complete booking webhook fires a flat JSON object with 60+ fields including: form_type, widget_version, submission_id, submission_time, showroom_key/name/region/phone/email/address/team, assigned_rep_id/name/title, rep_preselected, consultation_type, service_interest, space_type, budget, timeline, equipment_interest, customer_type, contact_method/time, first/last/full_name, phone, email, zip_code, how_found, notes, preferred_date, preferred_time_slot, consent_given, funnel_entry_url, step_reached, all UTMs, all click IDs, traffic_source, referrer_platform, device_type, OS, browser+version, all screen dimensions, orientation, touch support, WebGL renderer/vendor, canvas hash, battery level+charging, RTT, heap size, all cookie IDs, all IP geo fields, and all engagement timing data.
Yes. The system fires standard HTTP POST JSON webhooks to any endpoint. You configure the webhook URL in the WEBHOOK_COMPLETE and WEBHOOK_ABANDON constants. n8n, Zapier, Make, GoHighLevel, HubSpot native webhooks, custom APIs — all work natively with no intermediary. The payload is a flat JSON object so no transformation is required for most CRM webhook formats.
The system also natively fires GA4 via gtag(), Google Tag Manager via window.dataLayer.push(), and Facebook Pixel via fbq() on submission — so your analytics and ad platform events fire automatically without any tag manager configuration.
Every step transition writes the full current state to localStorage — current step, showroom selection, rep assignment, all form answers, selected date, and session ID. When a returning visitor lands on the booking page within 48 hours, the system reads that state and shows a "Welcome Back" modal with their name (if entered), the step they left at, and their previous selections summarized.
Clicking "Resume My Booking" restores all previous answers, jumps to their step, and continues from exactly where they left off. A "Start fresh" link is always available to clear the saved state. After 48 hours, saved state expires and is automatically cleared from localStorage.
Yes — fully WCAG 2.2 compliant. All interactive elements have focus-visible rings, all option groups use role=radiogroup with aria-labels, all dynamic content uses aria-live regions, error messages use role=alert, and a prefers-reduced-motion media query disables all animations for users who need it. The system has been tested with VoiceOver, NVDA, and keyboard-only navigation.
On mobile (below 640px), the layout switches to a full-width stacked column design — text on top, CTA below, no side columns competing for space. The calendar and time slots reflow to 2-column grids. The dismiss button becomes a 28px overlay circle that doesn't consume layout space. Rep cards reflow to a 2-column grid on mobile.
Locations are configured in the SHOWROOMS object in the script — each with name, city, region, address, phone, email, hours, maps URL, showroom image URL, and team name. Rep roster is in the ALL_REPS array — each rep has an id (slug), name, title, photo URL, and an array of showroom keys they belong to. A rep can appear in multiple location grids by adding multiple showroom keys.
No database or admin panel required — it's a configuration object. Adding a new rep is a single array entry. Adding a new location is a single object key. The system renders grids dynamically from these arrays on each page load.