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();

Saturday, 27 March 2021

With an ARR topping $250 million, LA’s vertical SAAS superstar ServiceTitan is now worth $8.3 billion

Who knew building a vertical software as a service toolkit focused on home heating and cooling could be worth $8.3 billion?

That’s how much Los Angeles-based ServiceTitan, a startup founded just eight years ago is worth now, thanks to some massive tailwinds around homebuilding and energy efficiency that are serving to boost the company’s bottom line and netting it an unprecedented valuation for a vertical software company, according to bankers.

The company’s massive mint comes thanks to a new $500 million financing round led by Sequoia’s Global Equities fund and Tiger Global Management.

ServiceTitan’s backers are a veritable who’s who of the venture industry, with longtime white shoe investors like Battery Ventures, Bessemer Venture Partners and Index Ventures joining the later stage investment funds like T. Rowe Price, Dragoneer Investment Group, and ICONIQ Growth.

In all, the new $500 million round likely sets the stage for a public offering later this year or before the end of 2022 if market conditions hold.

ServiceTitan now boasts more than 7,500 customers that employ more than 100,000 technicians and conduct nearly $20 billion worth of transactions providing services ranging from plumbing, air conditioning, electrical work, chimney, pest services and lawn care.

If Angi and Thumbtack are the places where homeowners go to find services and technicians, then ServiceTitan is where those technicians go to manage and organize their own businesses.

Based in Glendale, Calif., with satellite offices in Atlanta and Armenia, ServiceTitan built its business to solve a problem that its co-founders knew intimately as the children of parents whose careers were spent in the HVAC business.

The market for home services employs more than 5 million workers in the US and represents a trillion dollar global market.

Despite the siren song of global expansion, there’s likely plenty of room for ServiceTitan to grow in the U.S. Home ownership in the country is at a ten-year high thanks to the rise of remote work and an exodus from the largest American cities accelerated by the COVID-19 pandemic.

A focus on energy efficiency and a desire to reduce greenhouse gas emissions will likely cause a surge in residential and commercial retrofits which will also boost new business. Indeed these trends were already apparent in the statistic that home improvement spending was up 3 percent in 2020 even though the broader economy shrank by 3.5 percent.

“We depend on the men and women of the trades to maintain our life support systems: running water, heat, air conditioning, and power,” said Ara Mahdessian, co-founder and CEO of ServiceTitan. “Today, as both homeownership rates and time spent at home reach record highs, these essential service providers are facing rising demand from an increasingly tech-savvy homeowner. By providing contractors with the tools they need to deliver a great customer experience and grow their businesses with ease, ServiceTitan is enabling the hardworking men and women of the trades to reach the level of success they deserve.”



from TechCrunch https://ift.tt/31qqpx2
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support