HubSpot onboarding and database consolidation for a fitness and tennis club
A recreational fitness and tennis membership club ran three disconnected systems for its enquiry and membership data, a lead-capture tool, a membership platform, and an internal spreadsheet, none of them talking to each other. Staff re-keyed the same member record in multiple places to keep enquiry, billing, and marketing status aligned, so one change created backlog everywhere else. We consolidated all three into HubSpot as the club's system of record, migrating and cleansing every member record by its membership status.
Executive Summary
Context
The club is a recreational fitness and tennis membership operation with more than 900 active members running gyms, pools, and tennis courts on one site. At onboarding, its enquiry, membership, and billing data lived in three separate tools with no connection between them.
What We Built
We built a single HubSpot system of record that replaced the club's enquiry tool, membership platform, and internal spreadsheet, importing and cleansing every member record against a four-way status segment: active-monthly, active-yearly, paused, and cancelled.
Tech Stack
- HubSpot Marketing Hub Professional, HubSpot Sales Hub Starter, GymSales, Club Automation, WordPress
Not a fit if your organization hasn't yet committed to a single CRM platform to consolidate onto, since this approach assumes one system of record that everyone agrees to adopt rather than syncing several in parallel. It also assumes your website already sits on the same platform as your CRM. If your site runs on a separate CMS, quick front-end changes still have to be made directly in that CMS until a migration closes the gap.
The Challenge
Before HubSpot, the club ran enquiries through one tool and membership records through a second. It kept a spreadsheet for whatever the other two didn't cover, and none of the three connected to the others. A staff member updating a cancellation in the membership platform had to remember to update the spreadsheet too, and check whether the enquiry record needed a note. So records drifted whenever someone forgot a step during a busy shift.
Membership status also carried real financial weight. An active-yearly member counted differently from an active-monthly one for revenue, and a paused member returning from a hold needed routing back into the right marketing list rather than being treated as new. The club needed one system that both sales and marketing staff could trust as the current answer.
Our Approach
The Springboard workshop mapped every field the club's three systems held before any migration began, because importing bad data into a new platform only relocates the problem. The enquiry tool didn't carry any membership status, so it couldn't serve alone as the join key between enquiries and paying members. And because the spreadsheet held whatever fell outside the other two, a straight one-to-one copy from either source would have dropped fields the other owned.
So we built a one-time import and cleanse, keyed on a four-way membership-status segment: active-monthly, active-yearly, paused on an unpaid or a paid hold, and cancelled. We ran it once in October 2020 rather than as an ongoing sync.
The trade-off is that the club gave up a live connection back to the old tools. In exchange, it got a single system of record with no reconciliation logic to maintain afterward.
Impact
One record replaces three separate updates per change
Before the import, a status change meant editing three separate records, so staff either updated all three or let two fall behind. The migration collapsed them into one HubSpot contact carrying its own status segment, so a single edit is now the only edit a change requires.
Membership status becomes a usable marketing key
Every contact now carries one of four status values, active-monthly, active-yearly, paused, or cancelled, so the club can build a list for any one segment in HubSpot rather than cross-referencing three sources by hand. That segmentation is what let the team target paused and cancelled members separately from active ones in the campaigns that followed onboarding.
Enquiry data joins the membership record instead of sitting apart
The enquiry tool didn't carry any membership status, so nobody could tell from that system alone whether an enquiry had converted. The cleanse matched enquiry records against the new status-segmented member list, so an enquiry's outcome is now visible on the same record instead of a second lookup elsewhere.
Future automation gets a single field to trigger from
Any workflow the club builds next, a renewal reminder, a win-back sequence, a pause-to-cancellation alert, can trigger off the same status segment the import established, rather than each build inventing its own way to read membership state. That field turns a one-time cleanup into infrastructure the next phase builds on.
A single property on the HubSpot contact record carries one of four values, active-monthly, active-yearly, paused, or cancelled, with paused split further into an unpaid hold and a paid hold. Consolidating the statuses into one property replaces three separate systems' own status fields with one that every list, campaign, and future workflow reads from.
Before the import ran, the team mapped which system owned each field: the enquiry tool for source and stage, the membership platform for billing and status, the spreadsheet for whatever the other two did not track. That mapping let the migration take each field from the system that actually owned it.
A single migration pass, run once in October 2020 rather than as a recurring sync, deduplicated records across all three source systems and wrote one consolidated result per member into HubSpot. The pass ran once because the systems it read from were being retired, not kept on as ongoing feeds.
Once the import completed, the club stopped entering new activity into the old enquiry tool, the membership platform, and the spreadsheet, so HubSpot became the only place a status change could happen. That cutover kept the four-way segment accurate afterward, since a status recorded in two places disagrees with itself over time.
GymSales enquiries, Club Automation membership and billing records, and an internal spreadsheet's supplementary fields all go through a single import and cleanse in October 2020. The cleanse writes one HubSpot record per member and sets a four-way status segment on it: active-monthly, active-yearly, paused, or cancelled. It ran once as a cutover rather than a sync, so nothing flows back from the old tools.
FAQ
You map each field to the system that actually owns it before writing any import logic, since two source systems will disagree on the same field more often than either is simply wrong. For this migration that meant enquiry data from the lead-capture tool, billing and status from the membership platform, and marketing detail from a spreadsheet, combined into HubSpot once rather than synced going forward.
Because every downstream list, campaign, and future workflow needs one property to filter on, not three separate systems' own status vocabularies to reconcile first. Collapsing GymSales activity, Club Automation billing state, and the spreadsheet's notes into active-monthly, active-yearly, paused (either an unpaid or a paid hold), and cancelled gave the club a single filter instead of a translation step between three vocabularies.
Continue reading