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, 17 January 2020

Funnel closes $47M Series B to prepare marketing data for better reporting and analysis

Funnel, the Stockholm-based startup that offers technology to help businesses prepare — or make “business-ready” — their marketing data for better reporting and analysis, has closed $47 million in Series B funding.

Leading the round is Eight Roads Ventures, and F-Prime Capital, with participation from existing investors Balderton Capital, Oxx, Zobito, and Industrifonden, in addition to Kreos Capital.

Funnel says it will use the injection of capital to accelerate its plans in the U.S. where the company is seeing “strong demand” from enterprises. It will also invest in its technical teams to further its vision of “creating a single source of truth of marketing, sales and other commerce data”.

Founded in 2014 by Fredrik Skantze and Per Made, who are also behind Facebook advertising tool Qwaya, Funnel set out to let marketers automate their online marketing data from multiple platforms in real-time, so that they can more accurately analyse their online marketing spend.

Initially that included visualising the marketing data, but now the company has decided to focus solely on collecting the data from all of the disparate marketing channels, and cleaning it up and normalizing it so that it can be imported into popular business intelligence tools to be analysed.

“[We have] shifted away from visualizing the marketing data to ‘just’ collecting and making it business-ready as we have seen that to be the real pain point for customers,” Funnel co-founder and CEO Fredrik Skantze tells TechCrunch.

“Visualization is done well in existing business intelligence tools once the data is properly prepared. Automating the collection and preparation of the data has proven to be a very hard thing to do right and we wanted to make sure we were the best at this which we now confidently can say we are as we hear that again and again from customers”

To that end, Skantze explains that Funnel has direct connections to tools like Tableau and Google Data Studio. The idea is that customers can instantly visualize the data in the tools they are already familiar with.

Since we last covered Funnel mid 2017, the overarching trend has been an explosive growth in digital marketing. Skantze says that in 2017, 39% of worldwide marketing spend was digital and was mostly e-commerce, gaming and app companies who were putting the majority of their budgets online. Since then, forecasts have been repeatedly adjusted upwards, and in 2020, leading markets like the U.K. are now approaching 70% for digital marketing.

“That means the big brands are putting their big budgets online,” he says. “These brands are moving their marketing online because of the performance promise of digital marketing. But delivering on that performance promise requires being data-driven. This is a huge shift for these organizations that they are gradually coming to grips with as they are traditionally more branding focused. It requires creating new roles like marketing analytics, marketing technologists and putting in place a data infrastructure. This is complex”.

That, of course, plays nicely into the hands of Funnel, which is seeing enterprises far beyond e-commerce and apps utilise its wares. “We have spent the last year building out the enterprise readiness of our product and offering [features] like security certifications and enterprise features to be ready to take on these customers,” adds Skantze.

Meanwhile, during the last year, the Funnel team has grown from 73 to 140, and the company signed new office space for a total of 400 people across Stockholm and Boston, ready for further expansion.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support