
Den digitale, danske reklameplatform blev lanceret i oktober 2020 og har allerede 200 kunder, der har signet op til platformen. Nye initiativer skal sikre fortsat udvikling og vækst på platformen.
1. oktober 2020 gik den digitale, danske reklameplatform Publisher Platform i luften. Og forleden – efter bare seks måneder – kunne Publisher Platform høste flot, international anerkendelse.
I stærk international konkurrence med blandt andre Adform og IAS vandt den danske reklameplatform nemlig juryens særpris ‘Chair Award for Best Overall Technology for Programmatic Trading’ ved The Drum Digital Advertising Awards 2021. Publisher Platform er lanceret i samarbejde mellem TV 2, JP/Politikens Hus, Berlingske Media, Børsen, Jysk Fynske Medier og Sjællandske Medier.
- Hvad der startede som en god idé og et par kaffemøder for præcis to år siden, har nu fået en international anerkendelse, som jeg er ufatteligt stolt af, og som viser nøjagtigt, hvad vi gerne vil med vores samarbejde. Vi glæder os til fremtiden, siger Kenneth Brenøe, der er bestyrelsesformand for Publisher Platform og til daglig Head of Digital Sales & Digital Ad Development hos TV 2.
I begrundelsen for prisen skriver juryen blandt andet, at Publisher Platform er ”et enestående eksempel på, hvordan den programmatiske markedsplads kan forbedres til alles bedste”. Juryen mener, at det ”imponerende platformsamarbejde allerede kan konkurrere med de største eksisterende platforme” – og fortsætter:
”Men vigtigere er det, at samarbejdet samler publicister om at skabe en fremtid uafhængig af cookies, og at det sikrer høj standard for gennemsigtighed og kvalitetsjournalistik i stor skala. Platformens potentiale til en udvidelse til andre geografiske områder gør det til en fremtidssikret teknologi, som branchen har brug for.”
Kenneth Brenøe er bestyrelsesformand for Publisher Platform og til daglig Head of Digital Sales & Digital Ad Development hos TV 2. (Foto: Brian Buchard / TV 2)
Hver investeret krone går til annonceindkøb
Publisher Platform har fra starten ønsket at være et stærkt, dansk alternativ til Facebook og Google. Sammen repræsenterer de involverede medier en dækning på mere end 90 procent af den danske befolkning over 15 år. Med Publisher Platform slipper annoncørerne for usikkerhed om, hvor de optræder, fordi platformen sikrer nem og enkel adgang til de danske mediehuse samt garanti for kun at optræde i en dansk, journalistisk kvalitetskontekst.
På Publisher Platform går hver krone, der investeres, ubeskåret til annonceindkøb, eftersom de danske mediehuse afholder de tekniske omkostninger efterfølgende. Det står i modsætning til alle andre platforme, hvor de forskellige tech fees trækkes fra annoncørens budget, før der kan købes eksponering for det tilbageværende beløb.
Nyskabelser på vej i 2021
Flere end 200 annoncører har nu signet op til Publisher Platform, og udviklingen af platformen fortsætter.
- Med blot seks måneder i luften er vi kun lige startet – og allerede med 200 kunder. Vi har blikket stift rettet mod fremtiden og glæder os til to større lanceringer her i 2021. Den ene nyhed kommer i første halvår med indførelse af kreditkortbetaling, hvilket betyder, at vi kan invitere helt nye annoncører ind på Publisher Platform, siger Kenneth Brenøe.
Publisher Platform baserer sig på kontekstuelle data fra alle de deltagende medier. Målretning mod kontekst benytter sig ikke af cookies. I stedet køber man ind i den særlige indholdskontekst, der matcher ens brand eller kampagnebudskab. Den kontekstuelle målretning løser den stigende udfordring med, at flere og flere brugere siger nej tak til cookies, hvilket reducerer annoncørernes dækning ved traditionel målretning ganske betragteligt.
I andet halvår af 2021 kommer Publisher Platform med førstepartsdata i endnu større grad fra de enkelte medier, hvilket understreger platformens uafhængighed af cookies og tredjepartsdata. Det betyder, at man til den tid ikke alene kan købe ind på kontekstuelle data, men også på fx køn og alder.
- Samtidig glæder vi os til at kunne byde nye medier velkommen i 2021, så Publisher Platform får et endnu stærkere fundament at stå på, siger Kenneth Brenøe, der senere på foråret forventer at kunne fortælle mere om dette.
--------
Læs mere om Publisher Platform her
Læs også på mediawatch.dk (kræver login): Formand for Publisher Platform: ”Vi skal blive stærkere på datadelen”
System.Web.HttpException (0x80004005): Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\home\site\wwwroot\App_Data\TEMP\ExamineIndexes\External\_wlh.tvx'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) at Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexOutput..ctor(FileInfo path) in d:\Lucene.Net\FullRepo\trunk\src\core\Store\SimpleFSDirectory.cs:line 249 at Lucene.Net.Store.SimpleFSDirectory.CreateOutput(String name) in d:\Lucene.Net\FullRepo\trunk\src\core\Store\SimpleFSDirectory.cs:line 59 at Examine.LuceneEngine.Directories.SyncIndexOutput.Dispose(Boolean disposing) in D:\a\1\s\src\Examine\LuceneEngine\Directories\SyncIndexOutput.cs:line 111 at Lucene.Net.Index.TermVectorsTermsWriter.CloseDocStore(SegmentWriteState state) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\TermVectorsTermsWriter.cs:line 109 at Lucene.Net.Index.TermsHash.CloseDocStore(SegmentWriteState state) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\TermsHash.cs:line 117 at Lucene.Net.Index.TermsHash.CloseDocStore(SegmentWriteState state) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\TermsHash.cs:line 118 at Lucene.Net.Index.DocInverter.CloseDocStore(SegmentWriteState state) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\DocInverter.cs:line 78 at Lucene.Net.Index.DocFieldProcessor.CloseDocStore(SegmentWriteState state) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\DocFieldProcessor.cs:line 52 at Lucene.Net.Index.DocumentsWriter.CloseDocStore() in d:\Lucene.Net\FullRepo\trunk\src\core\Index\DocumentsWriter.cs:line 505 at Lucene.Net.Index.DocumentsWriter.Flush(Boolean closeDocStore) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\DocumentsWriter.cs:line 777 at Lucene.Net.Index.IndexWriter.DoFlushInternal(Boolean flushDocStores, Boolean flushDeletes) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\IndexWriter.cs:line 4305 at Lucene.Net.Index.IndexWriter.DoFlush(Boolean flushDocStores, Boolean flushDeletes) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\IndexWriter.cs:line 4197 at Lucene.Net.Index.IndexWriter.GetReader(Int32 termInfosIndexDivisor) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\IndexWriter.cs:line 392 at Examine.LuceneEngine.Providers.LuceneSearcher.ReaderReopener.MaybeReopen() in D:\a\1\s\src\Examine\LuceneEngine\Providers\LuceneSearcher.cs:line 467 at Examine.LuceneEngine.Providers.LuceneSearcher.ReaderReopener.ScheduleReopen() in D:\a\1\s\src\Examine\LuceneEngine\Providers\LuceneSearcher.cs:line 295 at Examine.LuceneEngine.Providers.LuceneSearcher.ValidateSearcher() in D:\a\1\s\src\Examine\LuceneEngine\Providers\LuceneSearcher.cs:line 226 at Examine.LuceneEngine.Providers.LuceneSearcher.GetLuceneSearcher() in D:\a\1\s\src\Examine\LuceneEngine\Providers\LuceneSearcher.cs:line 80 at Examine.LuceneEngine.Providers.LuceneSearcher.GetSearchContext() in D:\a\1\s\src\Examine\LuceneEngine\Providers\LuceneSearcher.cs:line 89 at Examine.LuceneEngine.Providers.BaseLuceneSearcher.CreateQuery(String category, BooleanOperation defaultOperation, Analyzer luceneAnalyzer, LuceneSearchOptions searchOptions) in D:\a\1\s\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 64 at Examine.LuceneEngine.Providers.BaseLuceneSearcher.CreateQuery(String category, BooleanOperation defaultOperation) in D:\a\1\s\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 49 at ASP._Page_views_partials_grid_editors_RelateredeArtiklerWide_cshtml.Execute() in C:\home\site\wwwroot\views\partials\grid\editors\RelateredeArtiklerWide.cshtml:line 22 at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) at Umbraco.Web.Mvc.ProfilingView.Render(ViewContext viewContext, TextWriter writer) in D:\a\1\s\src\Umbraco.Web\Mvc\ProfilingView.cs:line 25 at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) at System.Web.Mvc.Controller.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) at System.Web.Mvc.MvcHandler.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) at System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.<>c__DisplayClass5_0.<Wrap>b__0() at System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap[TResult](Func`1 func) at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) at System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) at System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) at System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter) at System.Web.Mvc.Html.ChildActionExtensions.Action(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues) at ASP._Page_app_plugins_leblender_editors_leblendereditor_views_LeBlender_cshtml.Execute() in C:\home\site\wwwroot\app_plugins\leblender\editors\leblendereditor\views\LeBlender.cshtml:line 6 at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) at Umbraco.Web.Mvc.ProfilingView.Render(ViewContext viewContext, TextWriter writer) in D:\a\1\s\src\Umbraco.Web\Mvc\ProfilingView.cs:line 25 at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) at ASP._Page_app_plugins_leblender_editors_leblendereditor_views_Base_cshtml.Execute() in C:\home\site\wwwroot\app_plugins\leblender\editors\leblendereditor\views\Base.cshtml:line 51