Online restaurant booking service Chope raises $8M, revenue doubled in past year

As reported in Tech in Asia, 30 June 2015 by Terence Lee. More details can be found here.

Chope, a Singapore-headquartered restaurant reservation platform, has gained new ammunition to expand aggressively in China and Southeast Asia in its attempt to become the region's dominant restaurant management and marketing platform. It raised S$11 million (US$8 million) in a series C round co-led by F&H Fund Management, a fund chaired by pioneering Alibaba CTO John Wu, and NSI Ventures. The money will go entirely towards expansion.
According to accounting records which Tech in Asia obtained, the startup made about S$519,000 (US$385,000) in 2013, a 50-fold increase over the previous year. Chope co-founder Arrif Ziaudeen says the startup’s annual revenue doubled from 2013 to 2014, which means Chope made roughly US$770,000 last year. Ziaudeen can’t reveal definite figures though as the accounts are still being audited.
“We are impressed by Chope’s revenue traction since our last investment. This investment is a signal of our confidence in Chope’s team and their ambition to become the go-to restaurant booking application in Southeast Asia,” says Hian Goh, founder and general partner of NSI Ventures, in a statement.
/** * 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'); });