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, 26 August 2021

Workstream’s text-based recruitment tool gets a $48M bet from BOND and beyond

It isn’t only tech giants that are struggling to fill open roles with talented individuals, it’s your local Jamba Juice, too.

Since 2017, San Francisco-based Workstream has been working on an answer to recruitment for the hourly worker. The subset of employees are in high demand right now by employers managing high turnover, as the labor market evolves amid the pandemic. These tailwinds in mind, Workstream announced today that it has landed a new round of financing to scale its recruitment efforts.

Workstream has raised $48 million in a Series B round co-led by Mary Meeker’s BOND and Coatue, with notable investors including Zoom CEO Eric Yuan and DoorDash CEO Tony Xu. Jay Simons, a GP at BOND and former president of Atlassian, joined Workstream’s board of directors. The raise comes a little over one year since Workstream raised $10 million in a Series A led by Founders Fund.

Per CEO and co-founder Desmond Lim, Workstream landed 12 term sheets in 9 days. He chalked up the interest to investors appreciating his startup’s differentiation among the flurries of other recruiting tools out there.

Even in the crowded world of recruitment software, Workstream has been able to carve out some attention for itself by focusing on text-based recruiting. Front-line and deskless workers are often the most disconnected members of the global job force due to a lack of access to company-issued e-mail addresses. Thus, by Workstream communicating with candidates over text, it is able to give workers on the go some real-time updates. This differentiation of mobile-based recruitment has helped bring down the time to hire for employers too, by bringing candidates in by going to where they already are.

Lim, who grew up in Singapore with parents who both spent their days as hourly workers, sees this strategy working. In July, his company filled more than 18,000 jobs. Down the road, Workstream wants to serve hourly workers in healthcare and retail.

“There’s a football field [of software] for hiring software engineers,” Lim said. “But if you think about hiring for this space, there’s very few of us – and I think that has really helped us to go far from a team point of view, client sales, and even trying to raise funding.

While Workstream didn’t disclose specifics on revenue, it said that it has experienced “10X” ARR in the past year. One signal that it’s doing ok? The company has 1,500 customers across 10,000 different stores, which include the likes of McDonalds, Subway, and of course, Jamba Juice. Lim claims that Workstream has 20% market share in the top 20 brands.

Workstream views itself as an end-to-end recruitment tool for the hourly worker, but its distribution is still tied to the some 25,000 job boards that it partners with to post listings. Lim said that his company is more focused on the “recruitment and engagement” bit of hiring, “helping to push people through the funnel very fast” versus trying to get them in the funnel in the first place.



from TechCrunch https://ift.tt/3jiVXyT
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support