What your gym CRM's source report can and can't tell you
Of the 13 gym CRMs here, 9 state that they record where a lead came from. One, Kuviro, states ad spend and cost per member against billed revenue: first-touch only, one send-back (the paid membership), rollup gated to its Scale tier. Only 3 state a send-back to Google or Meta: PushPress Grow, GoHighLevel and Kuviro. None states a renewal.
Updated
How to read this table
A source report is the page in your CRM that says where each lead came from: the form they filled in, the ad they clicked, the friend who referred them. The table below shows, for 13 platforms a gym might run, what that report states on the vendor's own site and where it stops. Five columns follow the money. Source attribution: is a source recorded at all, and by which attribution model (first touch credits the first ad a person clicked, last touch the most recent)? Ad spend and cost per member: does what the ads cost appear beside what they produced? Revenue credited to the source: is money credited to the ad, and is that money a payment or a pipeline value? Per-location split: does a multi-location operator get each site on its own line? Stages sent back: which events go back to Google and Meta as offline conversions, the signal their targeting learns from, and what triggers them?
Every cell links to the vendor page it was read from and the date we read it, 11 or 12 September 2026, and quotes the vendor’s own words where they exist. A dash (—) means not stated on the vendor’s site on the date checked. It is not a claim the feature is absent, and nothing here is inferred, rated or scored. The counts in the first paragraph are taken from the table.
The matrix
| Tool | Source attributionand model | Ad spend and cost per member | Revenue credited to the source | Per-location split | Stages sent back to Google/Metatrigger |
|---|---|---|---|---|---|
| PushPress GrowMarketing and CRM add-on to PushPress Core | Attribution Report: a Source Report (referrer and campaign, with counts) and a Conversion Report; first- or last-touch model not statedhelp.pushpress.com · | —; Google Ads and Facebook Ads reports cover campaigns, ad groups, ads and keywords; ad spend and cost per member not statedhelp.pushpress.com · | Opportunity value: the Conversion Report shows "the dollar amount of revenue closed" against opportunities; no join to Core billing revenue statedhelp.pushpress.com · | —pushpress.com · | Google Ads: an "Imported Lead" conversion from the "Add to Google Adwords" workflow step, only for contacts created from a URL carrying a gclid; Meta: a Conversions API trigger on Form Submitted, Survey Submitted, Two-Step Order or Appointment; no paid-membership or renewal event statedhelp.pushpress.com · |
| Kilo / Gym Lead MachineGym marketing and sales platform: website, CRM and automation | "Lead Source Reporting": "which funnels, forms, ads, or campaigns convert best"; model not statedusekilo.com · | —; "Ads Reporting: Track Facebook and Google ad performance directly inside GLM"; cost per lead and cost per member not statedusekilo.com · | —; the dashboard shows "sales won"; a tie to Kilo GMS billing revenue per ad not statedusekilo.com · | —; multi-location pricing on request; per-location reporting not statedusekilo.com · | —usekilo.com · |
| Keepme AntaresAI agent platform for multisite fitness operators | —; lead channels are listed generically as "forms, ads, calls, emails, social channels, and walk-ins"keepme.ai · | —keepme.ai · | —; twelve member-management integrations (Mindbody, Glofox, ABC Ignite, Xplor Gym and others); revenue credited to an ad not statedkeepme.ai · | —; works "across multiple locations, channels, teams, and systems"; per-club reporting not detailedkeepme.ai · | —keepme.ai · |
| Xplor ClubReady / Club OSCRM and member management (Club OS); club and franchise management (ClubReady) | Club OS: "capturing and tracking leads from all of your key channels", Facebook Ads lead capture and lead-to-member lifecycle tracking; ClubReady: leads "at the club or enterprise level"; source model not statedclub-os.com · | —club-os.com · | —; "tracking revenue attributed to each campaign" refers to Club OS email and SMS campaigns; an ad-level join not statedclub-os.com · | Club OS dashboards "from a corporate or local perspective"; ClubReady reports at club or enterprise levelclub-os.com · | —club-os.com · |
| GymdeskGym management: billing, scheduling and CRM | Per-form source ("a Google form, a Meta form, a Yelp form"); the dashboard shows "leads and conversion rate by source"; funnel Leads → Booked → Attended; UTM or ad-level capture not statedgymdesk.com · | —gymdesk.com · | —; the Marketing Dashboard "tracks data exclusively from leads, not existing members"; revenue by source not stateddocs.gymdesk.com · | —; extra locations share "the same member database, staff accounts and reporting"; per-location source reporting not statedgymdesk.com · | —; the integrations named are ActiveCampaign and Zapiergymdesk.com · |
| GymLeadsSales CRM for gyms | "Track where leads are coming from"; Facebook Lead Ads and Messenger capture; model not statedgymleads.net · | —gymleads.net · | —; hand-offs to Mindbody, PerfectGym and GymVue member systems; revenue credited to a source not statedgymleads.net · | "Complete overview of all clubs with in-depth reporting"gymleads.net · | —gymleads.net · |
| ABC Glofox / IgniteMember management (Glofox); club management (Ignite) | Glofox: "Track the source of every lead"; support articles on manually capturing a lead source and a Lead Conversion Report; Ignite: not statedglofox.com · | —glofox.com · | —; live dashboards show "transactions, recurring revenue, refunds, and balances owed"; revenue by lead source not statedglofox.com · | —; "Scale from one location to hundreds… all on a single platform"; per-location source reporting not statedglofox.com · | —; Facebook and Mailchimp are listed as integrations; no conversion or Conversions API statementglofox.com · |
| NaamlyGym management for training gyms: CRM, campaigns and billing | —naamly.com · | —naamly.com · | —; in-platform billing; a join to an ad not statednaamly.com · | —naamly.com · | —naamly.com · |
| GoHighLevelAgency CRM and marketing platform; a gym is one sub-account | Attribution Source on every contact, first and latest, recorded when the contact submits a form, survey, calendar booking, chat widget or order form; single-touchhelp.gohighlevel.com · | —; Client Spend per campaign ("Cost of all the ads + Management Fees", markup set by the agency), CPA and ROI are stated; cost per member is nothelp.gohighlevel.com · | Opportunity value: dashboard revenue "represents the sum of the Monetary value of WON opportunities, rather than the actual payment received"help.gohighlevel.com · | Per sub-account: the location dashboard reports one sub-account; a roll-up across locations not statedhelp.gohighlevel.com · | "Add to Google Ads" fires only on Form Submission, Order Purchase, Number Pool Calling, Survey Submission and Chat Widget, never on a pipeline stage; the Meta Conversions API action can fire a Lead event on Pipeline Stage Change; no paid-membership or renewal eventhelp.gohighlevel.com · |
| MindbodyStudio and gym management platform with integrated payments | —; reporting covers revenue, attendance, utilization, payroll, promotions, inventory and membership status, with no lead-source dimensionmindbodyonline.com · | —; no ad-spend, ROAS or cost-per-member dimension on the reporting pagemindbodyonline.com · | —; revenue by service, product, employee and location, not by lead source or admindbodyonline.com · | Revenue by location in its own reports, for businesses running on Mindbodymindbodyonline.com · | —; Google Ads and Meta Ads appear only as third-party tools you can connect; no offline-conversion upload or Meta Conversions API documentedmindbodyonline.com · |
| Zen PlannerGym management (Studio) plus Engage marketing and a digital-marketing service | —; Engage: "Track and manage leads… from inquiry to enrollment" and "Full visibility into your marketing funnel"; lead source, UTM or ad level not statedzenplanner.com · | —; the Digital Marketing service lists "In-depth performance metrics"; no product-level ad-spend or cost-per-member reportzenplanner.com · | —; Studio billing and payment processing; revenue by lead source not statedzenplanner.com · | Reports "Share with multiple locations"zenplanner.com · | —; "Drive Growth with Facebook" is ad campaigns from Engage, not a conversion send-backzenplanner.com · |
| WellnessLivingBusiness management platform with a Marketing Suite | "Automatically track where each lead came from" and "Track Every Lead From First Click to Client"; model, UTM or ad level not statedwellnessliving.com · | —wellnessliving.com · | —; "revenue tied directly to your WellnessLiving activity" is per email or text campaign; ad-level revenue not statedwellnessliving.com · | Enterprise: "Parent/HQ Account", "Multi-Location Reporting", "Cross-Location Visits"wellnessliving.com · | —wellnessliving.com · |
| KuviroMindbody/Mariana Tek replacement — attribution on Growth+ | First-touch: click IDs (gclid, fbclid) captured on arrival and bound to the email or phone on the trial form; "We tie first-touch attribution to your actual paid members"kuviro.co · | "Ad attribution, which ad made which member" and "Cost-per-member & ROAS by campaign", on Growth ($749 per location per month, billed annually) and Scalekuviro.co · | Paid memberships: trials, memberships and post-trial revenue read from Mindbody or Mariana Tek, Stripe checkouts, or the sale at its own front deskkuviro.co · | Priced per location; "Multi-location rollup ✕ ✕ ✓": Scale only (custom, from $1,500 per location, annual)kuviro.co · | Paid membership only: "We pass real purchase events back through the Conversions API"; no lead, booked, showed or renewal stage statedkuviro.co · |
Kuviro is not a CRM you keep beside your billing system; it replaces Mindbody or Mariana Tek, and its attribution starts at $749 per location per month on Growth (kuviro.co · 2026-09-12). Multi-location rollup is on its Scale tier alone (kuviro.co · 2026-09-12).
Where every source report stops
Start with what the source is. In GoHighLevel, PushPress Grow, Gymdesk and GymLeads it is a field written when something is submitted. GoHighLevel records an Attribution Source when a contact submits a form, survey, calendar booking, chat widget or order form (help.gohighlevel.com · 2026-09-11). PushPress Grow’s form submissions record “the URL, source, campaigns, and keywords” (help.pushpress.com · 2026-09-12). Gymdesk gives each capture form its own source, “a Google form, a Meta form, a Yelp form” (gymdesk.com · 2026-09-12). GymLeads captures Facebook Lead Ads and Messenger and reports “where leads are coming from” (gymleads.net · 2026-09-12). That tells you which door the lead came through. It does not tell you what the lead cost, or whether the lead paid.
Where a source report shows revenue, read what the number is. GoHighLevel’s dashboard revenue “represents the sum of the Monetary value of WON opportunities, rather than the actual payment received” (help.gohighlevel.com · 2026-09-12). PushPress Grow’s Conversion Report shows “the dollar amount of revenue closed” against opportunities (help.pushpress.com · 2026-09-12). Both are the value someone put on a deal, not the payment that cleared at the front desk, and neither states a join to the billing ledger. Club OS and WellnessLiving credit revenue to campaigns, and the campaigns are their own emails and texts (club-os.com · 2026-09-12) (wellnessliving.com · 2026-09-12). Mindbody’s reporting page lists revenue, attendance, utilization, payroll, promotions, inventory and membership status, with no lead-source, ad-spend, ROAS or cost-per-member dimension (mindbodyonline.com · 2026-09-12).
Then the send-back, the part that teaches Google and Meta who to find more of. GoHighLevel’s “Add to Google Ads” action fires only on Form Submission, Order Purchase, Number Pool Calling, Survey Submission and Chat Widget, never on a pipeline stage (help.gohighlevel.com · 2026-09-12); its Meta Conversions API action can fire a Lead event on a pipeline stage change, so what Meta receives is still a lead (help.gohighlevel.com · 2026-09-12). PushPress Grow’s Google step imports an “Imported Lead” conversion, for contacts created from a URL carrying a gclid (help.pushpress.com · 2026-09-12), and its Meta trigger fires on Form Submitted, Survey Submitted, Two-Step Order or Appointment (help.pushpress.com · 2026-09-12). Kuviro sends the confirmed membership back through the Conversions APIs and nothing before or after it (kuviro.co · 2026-09-12). The other 10 state no send-back at all, and no vendor in the table states a renewal going back.
Kuviro alone states that walk-in and phone joins are matched: “When that email or phone signs a membership at the counter, over the phone, or on a walk-in, the sale is written against the same record” (kuviro.co · 2026-09-12). That record lives at Kuviro’s own front desk, which means moving booking, billing and check-in onto Kuviro to get it.
None of this is a fault in the CRM. A CRM’s job is follow-up: the text that goes out two minutes after the enquiry, the tour that gets booked, the lead that gets chased until they show. Attribution, matching each paying member back to the click or call that started them, is a different job, and it needs the billing system and the ad account in the same picture as the CRM.
What fills the gap
Adsu sits beside the CRM you already run. It reads GoHighLevel for the enquiry and the appointment, reads the system your members pay through (Stripe, Square, Mindbody, WellnessLiving, PushPress, Zen Planner or Naamly) for the payment and the location that took it, and takes campaign identity and spend from your own Google Ads and Meta accounts. From those three it follows one person from the click or the call to the enquiry, the appointment booked, the appointment showed, the membership paid and every renewal after it, and reports cost per appointment, cost per show, cost per member and ROAS, one line per campaign per location.
Appointment booked, appointment showed and membership paid go back to Google Ads and Meta as the conversions to optimize for, so the platforms learn who pays rather than who fills in a form. Keep the CRM you have and the billing system you have; nothing moves. One plan covers every location, priced by the member revenue Adsu tracks (pricing). How AI ad tracking works walks the chain step by step, and gym marketing attribution explains why the join has to happen at the payment. If we can’t verify a stage, we don’t count it.
Keep your CRM, add the chain
Six of the systems in the table connect to Adsu today. Each page below says what the connection supplies, how it connects, what the vendor reports on its own, and what Adsu adds.
Stays the lead lane: contacts, appointments, source fields and lead identity. Adsu adds the payment and the location behind each one, and sends showed and paid back.
MindbodyStays the billing system. Adsu reads the real transactions, refunds and the revenue-bearing location, so the member and every renewal are credited to the ad.
PushPressStays where members are managed and billed. Adsu resolves the member identity behind supported payment flows, so a charge becomes a person credited to a click or call.
WellnessLivingStays the booking and payment system. Adsu reads the payment that cleared and the location that took it, and credits both to the campaign.
Zen PlannerStays your membership and billing system, in Adsu’s Billing & members group. Adsu adds the ad-side dimensions: which campaign, at what cost, per location.
NaamlyStays the training gym’s CRM, campaigns and billing. Adsu adds the join from each payment to the click or call that produced it, and the report per location.
Questions, answered.
It tracks which ad produced the contact and which opportunities were marked won. As of September 2026 its “Add to Google Ads” action “only works for Form Submission, Order Purchase, Number Pool Calling, Survey Submission, and Chat Widget” (help.gohighlevel.com/support/solutions/articles/155000003368), so a membership paid at the front desk never reaches Google as a conversion, and its dashboard revenue “represents the sum of the Monetary value of WON opportunities, rather than the actual payment received” (help.gohighlevel.com/support/solutions/articles/155000002087). Adsu keeps HighLevel as the lead lane, reads the payment from your billing system, and sends booked, showed and paid back, per location.
Not as a payment. As of September 2026 Grow’s Google Ads workflow step creates a conversion Google labels “Imported Lead”, and “the contact record/opportunity must have been created from a URL with a gclid parameter” (help.pushpress.com/en/articles/6273551), so a member who came from a Meta ad, a phone call or a walk-in cannot be sent at all. Its Meta trigger fires on Form Submitted, Survey Submitted, Two-Step Order or Appointment (help.pushpress.com/en/articles/6273507). Neither article states a membership-paid or renewal event. Adsu resolves the member behind a PushPress payment and sends the membership paid back to Google and Meta whether the join started with a click or a call.
No. As of September 2026 Mindbody’s reporting page lists revenue, attendance, utilization, payroll, promotions, inventory and membership status, and no lead-source, ad-campaign, ad-spend, ROAS or cost-per-member dimension (mindbodyonline.com/business/reporting). There is no Meta Conversions API or Google offline-conversion article on mindbodyonline.com; Google Ads and Meta Ads appear only as third-party tools you can connect. Mindbody knows who paid and at which studio, which is the half of the join Adsu reads: it takes the payment from Mindbody, the enquiry from HighLevel and the click from your ad accounts, and reports cost per member per campaign, per location.
No. Adsu is not a CRM and does not replace one; it reads yours. HighLevel is the CRM in Adsu’s docs, connected as a live OAuth connection that supplies contacts, appointments, source fields and lead identity, and your billing system supplies the payment. Kuviro’s engineering post argues the opposite road, that attribution “only works because one system owns booking, POS, and check-in” (kuviro.co/blog-attribution-engine.html, as of September 2026), which means moving your front desk. Adsu leaves the front desk where it is. If your gym runs one of the other CRMs in this table, tell us when you book a demo and we will tell you straight what Adsu can read in your stack.
Six of the 13: HighLevel as the CRM, and Mindbody, WellnessLiving, PushPress, Zen Planner and Naamly in the Billing & members group, alongside Stripe and Square. Kuviro is a platform you would move to rather than connect. Kilo, Keepme, Club OS, ClubReady, Gymdesk, GymLeads and Glofox are not on Adsu’s integrations list as of September 2026. A gym on one of them often still bills through a system Adsu reads: GymLeads, for one, hands members to “member management systems like MindBody and PerfectGym” (gymleads.net/integrations, as of September 2026), and Mindbody is a system Adsu reads. If the payment clears in Stripe or Square, Adsu reads that directly.
Related
Hyros, CallRail, WhatConverts, ConversionLoop, Kuviro, HighLevel and Mindbody beside Adsu: gym billing, calls, per-location split, stages sent back.
Best ad tracking software for gymsThe honest options by stack: HighLevel, Mindbody, Stripe, PushPress, Zen Planner or an agency roster, and when your CRM alone is enough. Updated 2026.
Gym marketing attributionWhat marketing attribution means for a gym: follow each click or call to the member who paid, per location, and tie Meta and Google spend to real revenue.
Cost per memberCost per member is ad spend divided by new paying members, per channel and per location. The formula, a worked example, and what to ask your agency for.
Offline conversion trackingOffline conversion tracking is sending an ad platform a conversion that happened off your website: a consult, a show, a payment. The front-desk join.
Gym franchisesThe franchisor sees spend, the franchisee sees joins. Adsu shows which location's ads produced which memberships, on one plan with no per-location fees.
The proof
- Net members
- +21
- Lifetime value added
- $67,000+
Bobby & Maria Gasdia, Big Day Fitness, 2 locations
Stop paying for leads. Start paying for members.
Early access is opening in small groups. Applying takes two minutes, and we’ll tell you straight whether your stack is ready to connect.