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

Sunday, 23 May 2021

Watching startups eat markets is good fun

Welcome back to The TechCrunch Exchange, a weekly startups-and-markets newsletter. It’s broadly based on the daily column that appears on Extra Crunch, but free, and made for your weekend reading. Want it in your inbox every Saturday? Sign up here.

Ready? Let’s talk money, startups and spicy IPO rumors.

The huge sale of Utah-based startup Divvy to Bill.com is still bouncing around my head this week, not only because the $2.5 billion exit was huge for both the company and its local scene, but also because its target market is exciting to watch.

Divvy competes in what we call the corporate spend market with a few other unicorns, including Ramp and Brex. Now with Divvy taken off the table, the pair of competitors are differentiating in a few ways that matter.

And Brex is getting back on its billboard game.

This week Brex announced that it is rolling out IRL advertising in a few American cities. Residents of San Francisco back when Brex was a baby will recall how the startup plastered its brand all over the city. Essentially, it was a cheap way to get a lot of impressions.

Now the startup is taking the strategy to Houston and Miami and D.C. Why? The Exchange caught up with Brex CEO Henrique Dubugras this week to chat about the matter. Per the executive, his company has two goals for its renewed meatspace marketing push. First, Brex wants to talk up its software game over its initial branding as a corporate card for startups. And, second, it wants business owners to know that it works with all types of companies now, not merely those with Sand Hill Road on speed dial.

The push to get the Brex name out in markets less known for their startup activity than overall business climate makes sense, if the unicorn wants to attract more nonstartup customers. But it’s the software element of its efforts that unsurprisingly caught our attention.

That’s because Brex recently rolled out Brex Premium, a package of software services that it charges around $600 per year for. Brex and rivals like Ramp and Divvy have spent lots of energy and money in recent quarters building out increasingly sophisticated software around their traditional corporate card products. The result thus far are codebases more and more able to supplant other pieces of enterprise software, like expense software.

But as Brex looks to double down via an advertising push on its decision to charge for Brex Premium — which Dubugras says is performing better than his company had initially anticipated — competitor Ramp is pushing its free software as an edge.

Ramp CEO and co-founder Eric Glyman pointed The Exchange to his company’s refreshed pricing page, which highlights its zero-cost software. And, he said in an email, the new page was “powering the fastest growth month we’ve ever had.”

Broadly, what we’re seeing with Ramp and Brex and Divvy — along with Airbase and others that also compete in the space — is a cohort of startups attacking an aged corporate issue with more nimble, lower-cost products. And proving while doing so that there was huge untapped demand for something different and better. The various players competing for the startup crown in the corporate spend world wouldn’t all be growing as rapidly as they are if that weren’t the case.

If you want more, here’s our dig into the Divvy-Bill.com deal.

More from startup-land

The Exchange was lathered up in SPACs this week, which means that we missed a host of interesting news that we otherwise would have loved to poke into. For example, here are some very neat venture rounds that it would have been fun to dig into more deeply:

  • ProducePay raised a $43M Series C: LA-based ProducePay helps food growers access capital, software and market data, linking them to food demanders (importers, etc.). Per its website, ProducePay funded a Bajío, Mexico-based asparagus growing operation to the tune of a half million dollars to hire labor and invest in its growing operation. Repayment, again per the company, starts when product ships.
  • Farming is hard, fickle, expensive and not always aligned with traditional banking requirements. Throw in an increasingly global production/consumption food network, and you can see why G2VP and IFC co-led the round.
  • Oh, and The Exchange learned that ProducePay’s reported 2020 doubling was measured in GAAP revenue terms. The startup’s gross margins “grew by over 75% from 2019 to 2020, thanks to improved underwriting policies and a more attractive cost of funds as volume scaled,” per its PR team. That’s super cool.

Another neat company that raised this week was Panther, which put together a $2.5 million round. Panther wants to help companies hire in 160 different countries. Our read of the company and its round is that, as more companies go remote-first, this sort of service is going to become a must-have. Gusto also competes in the market, so it should be an active one to watch from both VC and M&A perspectives.

Panther is based in Florida, and raised funds from, per its release, “Tribe Capital, Eric Ries, Naval Ravikant and Carta Ventures.”

One more round: Lance, a freelancer-focused neobank, raised $2.8 million this week. The round was led by, per the company, “Barclays, BDMI, Great Oaks Capital, Imagination Capital, Techstars, DFJ Frontier, New York Venture Partners” along with some angels.

Now that the fintech world has created Chime and other broad-remit neobanks, it’s not surprising to see more targeted efforts get put together. And Lance CEO Oona Rokyta is betting that the freelance world is set to grow further. Given how the labor market has evolved in the last few years, I’d hazard she’s making an intelligent bet.

To close out today, a quick note on Alpaca. It’s a startup that TechCrunch has dug into here and there, as it fits into both our general focus on API-delivered services (on-demand pricing is hot), and it exists in the consumer fintech world (powering other companies’ equities trading services). We caught up with CEO Yoshi Yokokawa this week to chat about what’s been going on at his company since we last tracked its growth rates.

After all, whatever we can learn about the world of consumer investing — and Robinhood told us quite a lot this week — is useful given the somewhat global savings/investing boom that we’ve seen in the last year or so.

Per Yokokawa, Alpaca has global plans, including rolling out with new partners on a few continents in the coming months. The company is handling 1,000 new accounts daily outside the United States, which Yokokawa expects to rise sharply in the coming months. And the company recently built out a broker API to make onboarding users simpler for its partners.

Sounds like growth to us. More when we can milk it out of, er, the alpaca.

Alex



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support