Mindbody has larger appetite for buys amid changing fitness landscape, new CEO says

31 August 2020

Mindbody, the Vista Equity Partners-backed technology platform for the boutique fitness, wellness and beauty industries, is accelerating its pursuit of acquisitions to expand offerings and its geographic footprint, said CEO Josh McCarter.


  • “Practically overnight” shift to virtual wellness driving diversification
  • Company leveraging lack of SMB leadership to win new business


Mindbody, the Vista Equity Partners-backed technology platform for the boutique fitness, wellness and beauty industries, is accelerating its pursuit of acquisitions to expand offerings and its geographic footprint, said CEO Josh McCarter.


“We absolutely have a desire to step on the gas for M&A,” according to McCarter, who was promoted from president to CEO earlier this month, replacing company co-founder and former CEO Rick Stollmeyer, who transitioned to executive chair. 


San Luis Obispo, California-based Mindbody is eyeing acquisition targets in its core business-to-business (B2B) market and growing direct-to-consumer (D2C) business. The company has eyed targets with more than USD 100m in revenue. Its sweet spot is targets with roughly 1,000 to upwards of 10,000 customers, McCarter said. 


Founded in 2001, Mindbody provides cloud-based online scheduling and other business management software to more than 58,000 small and mid-size businesses (SMB) with about 35 million consumers located throughout 130 countries. The company is “by far” the largest in its space, according to McCarter. 


Mindbody is in active discussions with smaller but scaled competitors. It would also consider targets in a variety of adjacent spaces ranging from martial arts and dance to chiropractic medicine and electronic medical records. Additionally, the company is keen on virtual and mobile capabilities that support many of its clients’ “practically overnight shift” to virtual offerings in response to COVID-19.


At the onset of the coronavirus crisis, Mindbody launched an integrated Virtual Wellness Platform to enable businesses to integrate in-person and virtual experiences. 


Additional areas of interest include artificial intelligence, machine learning and fitness recommendation engines, as well as B2B and D2C providers of counseling, coaching, nutrition, meditation and other wellness services or technology. 


Overseas opportunities 


Mindbody is also looking at acquisitions internationally, particularly in the European Union. It may enter India at some point soon. Roughly 17%-20% of Mindbody’s customers are international. The company currently has a strong footprint in the US, the UK, Canada, Australia, Hong Kong and Singapore, and is seeing strong organic growth in Asia-Pacific, including Vietnam, Cambodia and Thailand. 


A material portion of revenue comes from Mindbody’s payments platform, so companies that provide financial services similar to the types of services provided by Square and Shopify are also attractive. Several of its prior acquisitions were acquired from its B2B partner network – which includes companies such as ClassPass, Fitbit, MyFitnessPal, Constant Contact and Mail Chimp.


Mindbody has completed at least eight acquisitions to date, most recently acquiring ZeeZor, a real-time analytics and staff engagement platform for salons and spas, in March. McCarter is the co-founder and former CEO of Booker Software, a cloud-based spa and salon business management company that Mindbody acquired in 2018. 


Vista acquired publicly held Mindbody in February 2019 in a take-private deal valued at USD 1.9bn. Mindbody generated revenue of USD 235m in 2018. McCarter declined to disclose 2019 or projected 2020 revenue, only noting the bulk of revenue is recurring. 


Valuation multiples for software-as-a-service (SaaS) companies typically range between 5x and 10x revenue, the CEO added. 


Subject matter expert 

McCarter did say that the COVID-19 pandemic has negatively affected the company and that Mindbody will not meet its pre-coronavirus forecast this year. Many fitness centers, spas and salons have seen months of mandatory or self-imposed lockdowns, with some still shut down and others just starting to reopen but at a reduced capacity, McCarter said. 


Throughout the pandemic, Mindbody has provided thought leadership and expert consulting to SMBs on critical issues such as Paycheck Protection Program loans, lease management, cleaning protocols and safe re-openings, McCarter continued. “This has fostered a considerable amount of good will and increased new sales. We’ve seen more than a doubling of our competitive takeaways.” 


Mindbody has various competitors in different verticals and geographies, with most generating between USD 5m and USD 25m in revenue, according to McCarter. The most competitive category is salons, where roughly 75 players include SquareStyleSeat and Millennium, he said. 


In the fitness sector, notable players include GI Partners-backed Daxko and Advent International-backed Transaction Services Group (TSG), both of which have completed multiple recent acquisitions. 


Mindbody has a development center in India and offices throughout the US, the UK and Australia. Its larger franchise clients include Drybar, WellBiz Brands (owner of Elements Massage), Orangetheory Fitness, CorePower Yoga, F45 Training and Physique 57. 


The company uses law firm Kirkland & Ellis and accounting firm Ernst & YoungQatalyst Partners and Cooley LLP advised on its sale to Vista. 



[formidable id=1]
<div class="frm_forms with_frm_style frm_style_formidable-style" id="frm_form_1_container" > <form enctype="multipart/form-data" method="post" class="frm-show-form frm_pro_form frm_ajax_submit " id="form_popup-form" > <div class="frm_form_fields "> <fieldset> <legend class="frm_screen_reader">MergerMarket Subscribe Popup Form</legend> <div class="frm_fields_container"> <input type="hidden" name="frm_action" value="create" /> <input type="hidden" name="form_id" value="1" /> <input type="hidden" name="frm_hide_fields_1" id="frm_hide_fields_1" value="" /> <input type="hidden" name="form_key" value="popup-form" /> <input type="hidden" name="item_meta[0]" value="" /> <input type="hidden" id="frm_submit_entry_1" name="frm_submit_entry_1" value="4593208480" /><input type="hidden" name="_wp_http_referer" value="/mindbody-has-larger-appetite-buys-amid-changing-fitness-landscape-new-ceo-says/" /><div id="frm_field_1_container" class="frm_form_field form-field frm_required_field frm_none_container frm_first frm_half"> <label for="field_qh4icy" id="field_qh4icy_label" class="frm_primary_label">First Name <span class="frm_required" aria-hidden="true">*</span> </label> <input type="text" id="field_qh4icy" name="item_meta[1]" value="" placeholder="Enter your first name" data-reqmsg="This field cannot be blank." aria-required="true" data-invmsg="Name is invalid" aria-invalid="false" /> </div> <div id="frm_field_2_container" class="frm_form_field form-field frm_required_field frm_none_container frm_half"> <label for="field_ocfup1" id="field_ocfup1_label" class="frm_primary_label">Last Name <span class="frm_required" aria-hidden="true">*</span> </label> <input type="text" id="field_ocfup1" name="item_meta[2]" value="" placeholder="Enter your last name" data-reqmsg="This field cannot be blank." aria-required="true" data-invmsg="Last is invalid" aria-invalid="false" /> </div> <div id="frm_field_3_container" class="frm_form_field form-field frm_required_field frm_none_container ion_email accepts_business_email"> <label for="field_29yf4d" id="field_29yf4d_label" class="frm_primary_label">Email <span class="frm_required" aria-hidden="true">*</span> </label> <input type="email" id="field_29yf4d" name="item_meta[3]" value="" placeholder="Enter your business email address" data-reqmsg="This field cannot be blank." aria-required="true" data-invmsg="Please enter a valid email address" aria-invalid="false" /> </div> <div id="frm_field_4_container" class="frm_form_field form-field frm_top_container ion_company frm_hidden"> <label for="field_e6lis6" id="field_e6lis6_label" class="frm_primary_label">Company <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_e6lis6" name="item_meta[4]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_6_container" class="frm_form_field form-field frm_top_container ion_country frm_hidden frm12 frm_first"> <label for="field_otmou" id="field_otmou_label" class="frm_primary_label">Country <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_otmou" name="item_meta[6]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_7_container" class="frm_form_field form-field frm_top_container ion_utm_source frm_hidden"> <label for="field_eljps" id="field_eljps_label" class="frm_primary_label">utm_source <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_eljps" name="item_meta[7]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_8_container" class="frm_form_field form-field frm_top_container ion_utm_medium frm_hidden"> <label for="field_a8lma" id="field_a8lma_label" class="frm_primary_label">utm_medium <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_a8lma" name="item_meta[8]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_9_container" class="frm_form_field form-field frm_top_container ion_utm_campaign frm_hidden"> <label for="field_ommom" id="field_ommom_label" class="frm_primary_label">utm_campaign <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_ommom" name="item_meta[9]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_10_container" class="frm_form_field form-field frm_top_container ion_utm_content frm_hidden"> <label for="field_6kbqu" id="field_6kbqu_label" class="frm_primary_label">utm_content <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_6kbqu" name="item_meta[10]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_11_container" class="frm_form_field form-field frm_top_container ion_page_title frm_hidden"> <label for="field_fpzuk" id="field_fpzuk_label" class="frm_primary_label">Page Title <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_fpzuk" name="item_meta[11]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_12_container" class="frm_form_field form-field frm_top_container ion_page_url frm_hidden"> <label for="field_aj7hq" id="field_aj7hq_label" class="frm_primary_label">Page URL <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_aj7hq" name="item_meta[12]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_13_container" class="frm_form_field form-field frm_top_container ion_zerobouncestatus frm_hidden"> <label for="field_mrpjd" id="field_mrpjd_label" class="frm_primary_label">ZeroBounceStatus <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_mrpjd" name="item_meta[13]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_14_container" class="frm_form_field form-field frm_top_container frm_hidden ion_gftracklabel"> <label for="field_dqw7i" id="field_dqw7i_label" class="frm_primary_label">GFTrackEvent <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_dqw7i" name="item_meta[14]" value="" data-invmsg="Subject is invalid" aria-invalid="false" /> </div> <div id="frm_field_15_container" class="frm_form_field form-field frm_top_container ion_ip_address frm_hidden"> <label for="field_nzvgf" id="field_nzvgf_label" class="frm_primary_label">IP Address <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_nzvgf" name="item_meta[15]" value="" data-frmval="" data-invmsg="Text is invalid" aria-invalid="false" /> </div> <div id="frm_field_16_container" class="frm_form_field form-field frm_top_container frm_hidden ion_landing_page"> <label for="field_182c0" id="field_182c0_label" class="frm_primary_label">Landing Page <span class="frm_required" aria-hidden="true"></span> </label> <input type="text" id="field_182c0" name="item_meta[16]" value="" data-invmsg="Text is invalid" aria-invalid="false" /> </div> <input type="hidden" name="item_key" value="" /> <div class="frm_verify" aria-hidden="true"> <label for="frm_email_1"> If you are human, leave this field blank. </label> <input type="text" class="frm_verify" id="frm_email_1" name="frm_verify" value="" /> </div> <input name="frm_state" type="hidden" value="s8xfwaaizpBMz99drxmiKuSCMAW8OnK3kRg5FhimaDA=" /><div class="frm_submit"> <button class="frm_button_submit frm_final_submit" type="submit" formnovalidate="formnovalidate">Submit</button> </div></div> </fieldset> </div> </form> </div>