Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Thursday, 18 July 2019

On a growth tear, work trip SaaS TravelPerk adds $60M to its Series C

Business travel SaaS startup, TravelPerk, has announced it’s more than doubled the $44M Series C round we wrote about just nine months ago — taking in a further $60M from its existing investors, which brings the round to $104M, and the business’ total raised to date to $134M.

Investors increasing the size of their Series C commitment are Kinnevik, partners of DST Global, Target Global, Felix Capital, Sunstone, and LocalGlobe.

A mere three years ago the 2015-founded, Barcelona-based startup had bagged a $7M Series A — with a pitch to take the pain out of business travel booking.

Since then it’s been on a major growth tear. Co-founder and CEO Avi Meir says this momentum is behind the Series C expansion.

“We grew faster than expected,” he tells TechCrunch. “Unit economics are fantastic. Investors have been pushing us to inject more funding, accelerate our growth, and expand faster. We weren’t looking for more runway.

“We always knew that expanding this round was an option depending on performance, and as we exceeded even our most optimistic targets, we had the choice to stay on our same path or become even more aggressive.”

“The team has grown 250% since January and bookings on the platform have increased by 300%,” he adds. “The number of active users has grown by 150% this year compared to last. When you look at those two numbers side-by-side, it demonstrates that not only are we adding customers, but our existing ones are booking more often.”

TravelPerk now has more than 2,000 customers for its business travel booking platform — including some very familiar names n the European startup scene, such as Adyen, Farfetch, Transferwise, Sumup, GetYourGuide and Glovo.

It’s not disclosing the latest valuation of the business but Meir says it’s more than doubled in the last eight months — due to “rapid growth”.

He’s also not sharing the GMV target for the year — but says it’s 300% higher than last year.

The extra Series C funds will be ploughed into further fuelling its European expansion.

It is also trailing “major product additions in the coming weeks and months” — which TravelPerk claims will bring “a new level of disruption to the pricing structure of an industry that is still dominated by outdated solutions that make business travel expensive and painful”.

It’s certainly true that won’t have to ask too many office workers before you’ll find someone more than willing to hate long and loud on legacy platforms their employer forces them to use when they need to book a work trip.

“In the coming weeks and months, we’ll be releasing products that give the business traveler more freedom and flexibility than ever before,” says Meir. “Meaning business travelers are not restricted by the rigid, outdated systems of the travel industry. With these releases, we’ll not be playing catchup with the leisure travel industry, but bringing to market features designed specifically for the business traveler.”

Given the sustained growth tear that’s encouraged its investors to increase their commitments, what about an IPO? Is that now fast looming on the horizon for TravelPerk?

“It’s a very natural path for us,” says Meir. “We don’t have a hard and fast plan, we’re focused on building a really big company that will be a market leader for years to come, and we’re certainly not at all focused on selling.”

“We want to be THE choice for the modern business traveler,” he adds. “A no-brainer choice for anyone booking, managing, reporting, or analyzing their business travel.”

Discussing the startup’s plans for the next year, he says they’ll aim to bolster their position with SMEs in Europe — and “expand outwards”

“We’re planning to have 430 people hired by the end of this year, and more than 580 by end of 2020 – that’s nearly doubling in a year,” he continues. “This is the plan as it stands today, I wouldn’t be surprised if next year is an even higher trajectory. Certainly that’s the pattern when I look back at our journey so far.”

Commenting in a statement, Antoine Nussenbaum, partner at Felix Capital added: “We are excited to see Avi and his team hitting and surpassing their objectives, as a result we are doubling up our investment as part of this large Series C.

“We’re delighted to be strengthening our relationship with TravelPerk and look forward to seeing the business continue to grow. We are particularly thrilled about the new features soon to be released which will materially transform the traveller experience — building on TravelPerk’s leadership position as the new standard for business travel.”



from TechCrunch https://ift.tt/2SpfJJD
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support