perty:"strictDefine",value:o})}catch{}try{o({property:"defineStrictObject",value:c})}catch{}try{o({property:"defineStrictMethod",value:a})}catch{}var i=["toString","toLocaleString","valueOf","constructor","prototype"];function c(e){let{context:t,property:r,propertiesToExclude:n=[],skipPrototype:a=!1,hardenPrototypePropertiesToExclude:s=[]}=e;if(!r)return Error("property is required");let u=(t||globalThis)[r],p={},f=l(t,r);u&&("object"==typeof u||"function"==typeof u)&&Reflect.ownKeys(u).forEach(e=>{if(!n.includes(e)&&!i.includes(e)){let t=l(u,e);if(t&&(t.writable||t.configurable)){let{value:r,get:n,set:i,enumerable:c=!1}=t,a={};void 0!==r?a.value=r:n?a.get=n:i&&(a.set=i);try{let t=o({context:u,property:e,...a,enumerable:c});p[e]=t}catch(r){if(r instanceof TypeError)try{p[e]=t.value||t.get||t.set}catch{}else throw r}}}});let d={originalObject:u,originalProperties:p};if(!a&&u?.prototype!==void 0){let e=c({context:u,property:"prototype",propertiesToExclude:s,skipPrototype:!0});e instanceof Error||(d.originalPrototype=e?.originalObject,d.originalPrototypeProperties=e?.originalProperties)}return o({context:t,property:r,value:u,enumerable:f?.enumerable}),d}function a(e,t){let r=(t||globalThis)[e],n=l(t||globalThis,e);return r&&n&&(n.writable||n.configurable)?(Object.freeze(r),o({context:globalThis,property:e,value:r})):r}function l(e,t){if(!(!e||!t))try{return Reflect.getOwnPropertyDescriptor(e,t)}catch{return}}function s(e){return e.startsWith("//")&&/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/g.test(`${location.protocol}:${e}`)&&(e=`${location.protocol}${e}`),!e.startsWith("http")||new URL(e).hostname===location.hostname}function u(e){if("string"!=typeof e)return e;try{return decodeURIComponent(e).toLowerCase().trim()}catch{return e.toLowerCase().trim()}}function p(e,t){return e instanceof Headers?e.forEach((r,o)=>{f(o,t)||e.delete(o)}):Object.keys(e).forEach(r=>{f(r,t)||delete e[r]}),e}function f(e,t){return!t.has(u(e)||"")}function d(e,t){let r=!0,o=u(function(e){let t,r;if(globalThis.Request&&e instanceof Request)t=e.url;else if("function"==typeof e?.toString)t=e.toString();else throw Error("Unsupported type for url");try{return new URL(t).pathname}catch{return(r=t.replace(/#.+/gi,"").split("?").shift()).startsWith("/")?r:`/${r}`}}(e));return o&&t.some(e=>o.includes(e))&&(r=!1),r}var y=["true","b","c","new","enabled"];let b=[],g=(e,t)=>{let r;return b.includes(t)||!0===(r=e[t])||"string"==typeof r&&y.includes(r.toLowerCase())};performance.mark("overrideGlobals started");let{experiments:m}=window.viewerModel,v=g(m,"specs.thunderbolt.securityExperiments");try{let e,t;!function(){let e=globalThis.open,t=document.open;function r(t,r,o){let n="string"!=typeof t,i=e.call(window,t,r,o);return n||t&&s(t)?{}:i}o({property:"open",value:r,context:globalThis,enumerable:!0}),o({property:"open",value:function(e,o,n){return e?r(e,o,n):t.call(document,e||"",o||"",n||"")},context:document,enumerable:!0})}(),v&&function(){let e=document.createElement,t=Element.prototype.setAttribute,r=Element.prototype.setAttributeNS,n=Element.prototype.removeAttribute,i=(Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow")?.get,Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"src")),c=i?.get,a=i?.set,l=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"sandbox")?.get,s=DOMTokenList.prototype.add,p=DOMTokenList.prototype.remove,f=DOMTokenList.prototype.toggle,d=DOMTokenList.prototype.replace,y=Object.getOwnPropertyDescriptor(DOMTokenList.prototype,"value"),b=y?.get,g=y?.set,m=new WeakSet;o({property:"createElement",context:document,value:function(n,i){let c=e.call(document,n,i);return"iframe"===u(n)&&(o({property:"srcdoc",context:c,get:()=>"",set:()=>{console.warn("`srcdoc` is not allowed in iframe elements.")}}),o({property:"setAttribute",context:c,value:function(e,r){if("srcdoc"===e.toLowerCase())return void console.warn("`srcdoc` attribute is not allowed to be set.");t.call(c,e,r);e.toLowerCase()},enumerable:!1}),o({property:"setAttributeNS",context:c,value:function(e,t,o){if("srcdoc"===t.toLowerCase())return void console.warn("`srcdoc` attribute is not allowed to be set.");r.call(c,e,t,o);t.toLowerCase()},enumerable:!1})),c},enumerable:!0})}(),g(m,"specs.thunderbolt.hardenFetchAndXHR")&&v&&function(e,t,r){let n=fetch,i=XMLHttpRequest,c=new Set(t);function a(){let t=new i,o=t.open,n=t.setRequestHeader;return t.open=function(){let n=Array.from(arguments),i=n[1];if(n.length<2||d(i,e))return o.apply(t,n);throw Error(r||`Request not allowed for path ${i}`)},t.setRequestHeader=function(e,r){f(decodeURIComponent(e),c)&&n.call(t,e,r)},t}o({property:"fetch",value:function(){var t;let o=(t=arguments,globalThis.Request&&t[0]instanceof Request&&t[0]?.headers?p(t[0].headers,c):t[1]?.headers&&p(t[1].headers,c),t);return d(arguments[0],e)?n.apply(globalThis,Array.from(o)):new Promise((e,t)=>{let o=Error(r||`Request not allowed for path ${arguments[0]}`);t(o)})},enumerable:!0}),o({property:"XMLHttpRequest",value:a,enumerable:!0}),Object.keys(i).forEach(e=>{a[e]=i[e]})}(["/_api/v1/access-tokens","/_api/v2/dynamicmodel","/_api/one-app-session-web/v3/businesses"],["client-binding"]),function(){if(navigator&&"serviceWorker"in navigator)navigator.serviceWorker.register,o({context:navigator.serviceWorker,property:"register",value:function(){console.log("Service worker registration is not allowed")},enumerable:!0})}(),e=[],t=(t=[]).concat(["TextEncoder","TextDecoder"]),v&&(t=t.concat(["XMLHttpRequestEventTarget","EventTarget"])),t=t.concat(["URL","JSON"]),v&&(e=e.concat(["addEventListener","removeEventListener"])),e=e.concat(["encodeURI","encodeURIComponent","decodeURI","decodeURIComponent"]),t=t.concat(["String","Number"]),v&&t.push("Object"),t=t.concat(["Reflect"]),e.forEach(e=>{a(e),["addEventListener","removeEventListener"].includes(e)&&a(e,document)}),t.forEach(e=>{c({property:e})}),v&&function(){return e("setTimeout",0,globalThis),e("setInterval",0,globalThis);function e(e,t,r){let n=r||globalThis,i=n[e];if(!i||"function"!=typeof i)throw Error(`Function ${e} not found or is not a function`);o({property:e,value:function(){let r=Array.from(arguments);if("string"!=typeof r[t])return i.apply(n,r);console.warn(`Calling ${e} with a String Argument at index ${t} is not allowed`)},context:r,enumerable:!0})}}()}catch(t){window?.viewerModel?.mode.debug&&console.error(t);let e=Error("TB006");window.fedops?.reportError(e,"security_overrideGlobals"),window.Sentry?window.Sentry.captureException(e):globalThis.defineStrictProperty("sentryBuffer",[e],window,!1)}performance.mark("overrideGlobals ended")})(); //# sourceMappingURL=https://static.parastorage.com/services/wix-thunderbolt/dist/overrideGlobals.inline.b271af7d.bundle.min.js.map
top of page

Danish Advertising Market Grew More Than Expected in 2025

  • Writer: GDR
    GDR
  • May 19
  • 2 min read

- But The Real Story Is Where Growth Came From!


The Danish advertising market surprised positively in 2025, outperforming earlier expectations, despite cautious spending patterns highlighted earlier in the year.


The Scandinavian Institutet för Reklam- och Mediestatistik IRM had initially forecasted modest growth, but the market accelerated as the year progressed.


IRM had initially forecast modest growth, but the market accelerated as the year progressed.
IRM had initially forecast modest growth, but the market accelerated as the year progressed.

More than a rebound story

At GDR, we see this as more than a rebound story.


The strongest signal is not simply that brands spent more. It is that advertisers increasingly prioritise measurable activation, smarter targeting, and audience quality over broad reach alone.


Across the Nordics and beyond, marketers are under growing pressure to prove effectiveness.


That is shifting budgets toward data-driven media strategies, behaviour-based audience activation, and channels where outcomes can be tied more directly to business results.


The market is evolving

At the same time, the market is clearly evolving:


  • Third-party identifiers continue to weaken

  • Privacy expectations are rising

  • AI is accelerating campaign optimisation

  • Media fragmentation keeps increasing

  • First-party and alternative audience strategies are becoming essential


In that environment, growth favours companies able to combine scalable reach with actionable audience intelligence.


Relevance, not volume

The Danish market’s stronger-than-expected performance suggests many advertisers are adapting faster than anticipated.


Not by spending blindly, but by becoming more selective, more performance-focused, and more flexible in how they activate audiences across channels.


For the industry, that is encouraging.


Because sustainable growth in advertising will increasingly come from relevance, not volume.


👉 We've confronted the past and built a smarter way to scale through consistent audiences, no IDs.


Have a look at idfree.ai and secure your spot on the waitlist for access.



GDR - We see patterns. Not people.


Reach us:


bottom of page