Employee Health and Wellness Marketplace CXA Raises $8M Series A

CXA, a Singapore-headquartered insurance and wellness marketplace, has raised US$8 million in a series A round at an undisclosed valuation. The company had an eventful start. Not long after it was founded by employee benefits brokerage veteran Rosaline Koo, it acquired Pan Group, the third-largest home-grown group insurance brokerage in Singapore.

Koo was not able to raise money to fund her purchase, and that meant taking out a loan and putting in over US$4 million of her family’s savings to birth the venture. The bet is paying off. Since March 2014, CXA has signed up 20 new Fortune 500 corporate clients. 12 have already implemented the platform.

The startup reached US$6 million in annual revenue (US$1.5 million came from the marketplace and the rest from its brokerage business), a customer base of over 500 firms, and a stacked team consisting of three PhDs and four computing science Master’s students.

That’s enough to convince NSI Ventures, the venture capital arm of private equity firm Northstar, to lead the series A round. Also involved in this round are F&H – an investor in ecommerce sites Reebonz and Luxola as well as blogger influencer network Gushcloud – and BioVeda, a noted Singapore-based healthtech investor that’s working with the Singapore government to co-fund startups. With the money, CXA is planning to expand to 12 countries in Asia.

“We selected Northstar because of their successful track record in fintech investing, with several portfolio companies in banking, insurance, brokerage, and payments. We picked F&H because of John Wu’s connection to Alibaba, ecommerce, and China. And Bioveda for their healthcare contacts. Our angels are all owners of brokerage and flex firms in different countries so we will leverage them to expand regionally and internationally,” says Koo.

While employee benefits platforms are dime a dozen, CXA is unique in several ways. It collects employee data to tailor benefits to better suit their needs. That means staff who already have insurance can redeem something else using CXA’s platform.

Companies save money by giving employees exactly what they want instead of blanket coverage, harnessing staff data to improve their benefits package, and cutting down on paperwork by digitizing benefits administration. It’s also a health advisor, gathering employee health data – medical claims, health screening results, wellness activity tracking, and lifestyle risks are just some examples – and recommending steps to improve their wellbeing.

CXA’s business model is also noteworthy. It white-labels its platform for banks and insurance providers who in turn offer the service to small and medium enterprises as well as individuals. The acquisition of Pan Group means the company owns its distribution channel – clients who buy insurance through CXA get access to the platform free-of-charge.

/** * helper function to take the form and * get back a js object with field/value mappings * ignoring submit fields and fields whose name we can't ascertain */ function serialize(form){ return Array.prototype.slice.call(form.elements) .filter(isInputElement) .filter(isNotSubmit) .filter(hasFieldName) .reduce(function(data, node, index) { data[getFieldName(node)] = node.value return data; }, {}); } /** * Check if this form element is of type input */ function isInputElement(node) { return node.tagName.toLowerCase() === 'input'; } /** * Check if this is a 'submit' input element */ function isNotSubmit(node) { return node.type !== 'submit'; } /** * Ensure field has a derived name */ function hasFieldName(node) { return getFieldName(node) !== 'unknown'; } /** * Attempt to ascertain "name" of field. * * they don't give inputs real `name` attributes, so * best guess is to hack around the element's label text, * falling back to the placeholder text. (their html is * not semantic and often labels erroneously reference * parent divs instead of sibling input elements) * * strip out the stars they show when validation fails * * if label is misplaced _and_ there's no placeholder, * this function is insufficient */ function getFieldName(input) { if (!input.labels.length) return input.placeholder || 'unknown'; var labelText = input.labels[0].textContent.trim(); return ~labelText.indexOf(' *') ? labelText.slice(0, labelText.indexOf(' *')) : labelText; } /** * Listen for form submissions and send identify * if you'd like an event too, just delete the '//' in the track line */ document.forms[0].addEventListener('submit', function(e) { analytics.identify(serialize(e.target)); // analytics.track('Submitted Form'); });