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

Friday, 27 August 2021

Zeal banks $13M to offer employers a ‘build your own’ payroll product infrastructure

Embedded fintech company Zeal secured $13 million in Series A funding to continue developing its platform for building individualized payroll products.

Spark Capital led the Series A, with participation from Commerce Ventures and a group of individual investors, including Marqeta CEO Jason Gardner and CRO Omri Dahan, Robinhood founder Vlad Tenev, UltimateSoftware executives Mitch Dauerman and Bob Manne and Namely founder Matt Straz. The latest round now gives the company $14.6 million in total funding, which includes a $1.6 million seed round in 2020, CEO Kirti Shenoy told TechCrunch.

The Bay Area company’s origin was as Puzzl, a payment processing startup for the gig economy, founded in 2018 by Shenoy and CTO Pranab Krishnan. It was part of Y Combinator’s 2019 cohort. The pair had to pivot the company after needing to move some of its thousands of 1099 contractors to W2 employee status.

They went looking for payroll processors that could handle high volumes of payroll automatically, like ADP or Paycor, but found they didn’t match some of the capabilities Shenoy and Krishnan wanted, including to pay workers daily and customize earning components.

To ensure other companies didn’t run into the same problem, they decided to build a payroll API that enables their customers to build their own payroll products, even being able to pay their workers everyday. Traditionally, companies would layer together antiquated third-party payroll tools and spend millions of dollars on consulting fees. Zeal’s API tool modernizes the payroll process and takes on the payroll liability while managing the back-end payment logistics, Shenoy said.

Currently, enterprises use Zeal to pay large volumes of workers and keep payment data on their own native systems, while software platforms that sell business-to-business services use Zeal to build their own payroll product to sell to their customers.

“Our mission is to touch every American paycheck with our tax and payment technology, ensuring that American employees are paid correctly and efficiently,” Krishnan said.

And that is a complex goal: there are 200 million American employees, over $8.8 trillion of payroll is processed annually in the U.S. and the country’s 11,000 tax jurisdictions produce over 25,000 income tax code changes a year.

Meanwhile, Shenoy cited IRS data that showed more than 40% of small and medium businesses pay at least one payroll penalty per year. That was one of the drivers for Zeal’s latest product, the Abacus gross-to-net calculator, which payroll companies can use to ensure they are compliant in paying their income taxes.

The co-founders intend to use the new funding to build out their team and strengthen compliance measures to ensure its track record with enterprises.

“We are starting to win more enterprise deals and moving millions of dollars each day,” Shenoy said. “This has been a legacy space for so long, so companies want to work with a provider to move fast.”

Shenoy predicts that more companies will shift to hyper-customized experiences in the next five to 10 years. Whereas the default was a company like ADP, companies will want to control their own data and build products so their customers can do everything payroll-related from one platform.

As part of the investment, Spark Capital’s partner Natalie Sandman has joined Zeal’s board of directors. She previously invested in other embedded fintech companies like Affirm and Marqeta and thinks there are new experiences in the sector that APIs can unlock.

Sandman felt the payroll-building pain points herself when she worked at Zenefits. At the time, the company was trying to do the same thing, but there were no APIs to connect with. There were all of these spreadsheets to transfer data, but one wrong deduction would trickle down and cause a tax penalty.

Shenoy and Krishnan are both “customer-obsessed,” she said, and are balancing speed with thoughtfulness when it comes to understanding how their customers want to build payroll products.

She is seeing a macro shift to audience-driven human resources where bringing new employees online will mean embedding them into products that will be more valuable versus the traditional spreadsheet.

“To me, it is a no-brainer that APIs provide flexibility in the way wages and deductions need to be made,” Sandman said. “You can lose trust in your employer. Payroll is at the deepest trust point and where you want transparency and a robust solution to solve that need.”



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support