Migrate property to multi-campaign

  Admin access or Domain access to property (property group) with feature access to launch/stop live or stage campaign.

  Note: In this article, we will cover how to migrate a property/group from legacy campaigns to multi-campaign. Clients who implement after May 5th, 2021 will have their properties default to multi-campaigns and can disregard the steps in this article.

In addition to having multi-campaign enabled for your organization's account, you will also need to have scenario v2 enabled as well. Scenario v2 will be utilized to create scenarios once the migration is complete

Enabling multi-campaign on an individual property is a two-step process that requires you to toggle the multi-campaign button to On and to add the updated code snippet to the individual property.

  1. Enable multi-campaign on individual property
    Enable multi-campaign on property group
  2. Retrieve and update code snippet on property
  3. De-risk anti-adblock endpoint

  Note: Sourcepoint's multi-campaign feature is currently unavailable for AMP properties. Please utilize Campaign (Legacy) for AMP properties.

Enable multi-campaign on individual property

Click Properties on the left-hand panel and select Properties from the subsequent menu.


Navigate to a property on the list and toggle the button to On under the Multi-Campaign column inline with the property name.


Enable multi-campaign on property group

To enable multi-campaign for a property group, click Properties on the left-hand panel and select Property Groups from the subsequent menu.


Select a property group from the subsequent list and toggle the Multi-Campaign Enabled button to On.

Multi-campaign will be enabled for all properties associated with the property group.


With multi-campaign enabled for each property in the property group, you will need to update each individual property with a new code snippet.

Retrieve and update code snippet on property

With the multi-campaign button toggled to On for each property, click the < > icon inline with the property name.


In the subsequent modal, use the provided dropdown menu to select the types of campaigns you would like to run on the property. The implementation code will update as you make selections.

Click Copy Code when finished to copy the implementation code to your clipboard.


Add the implementation code to the property. 

If you are updating an existing property that already has the Sourcepoint code snippet implemented, you will need to replace that original code snippet with the new code snippet.

  Note: If you intended to run an anti-adblock campaign on the property, you will need to perform some additional configuration to the implementation code. This additional configuration is to protect any CMP endpoints from being blocked if our anti-adblock script is detected and blocked by an end-user's browser. Click here to learn more.

<script>!function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=3)}([function(t,e,n){var r=n(2);t.exports=!r((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){n(4),function(){if("function"!=typeof window.__tcfapi){var t,e=[],n=window,r=n.document;!n.__tcfapi&&function t(){var e=!!n.frames.__tcfapiLocator;if(!e)if(r.body){var o=r.createElement("iframe");o.style.cssText="display:none",o.name="__tcfapiLocator",r.body.appendChild(o)}else setTimeout(t,5);return!e}()&&(n.__tcfapi=function(){for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];if(!r.length)return e;if("setGdprApplies"===r[0])r.length>3&&2===parseInt(r[1],10)&&"boolean"==typeof r[3]&&(t=r[3],"function"==typeof r[2]&&r[2]("set",!0));else if("ping"===r[0]){var i={gdprApplies:t,cmpLoaded:!1,apiVersion:"2.0"};"function"==typeof r[2]&&r[2](i,!0)}else e.push(r)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,r={};try{r=e?JSON.parse(t.data):t.data}catch(t){}var o=r.__tcfapiCall;o&&n.__tcfapi(o.command,o.parameter,o.version,(function(n,r){var i={__tcfapiReturn:{returnValue:n,success:r,callId:o.callId}};e&&(i=JSON.stringify(i)),t.source.postMessage(i,"*")}))}),!1))}}()},function(t,e,n){var r=n(0),o=n(5).f,i=Function.prototype,c=i.toString,u=/^s*function ([^ (]*)/;r&&!("name"in i)&&o(i,"name",{configurable:!0,get:function(){try{return c.call(this).match(u)[1]}catch(t){return""}}})},function(t,e,n){var r=n(0),o=n(6),i=n(10),c=n(11),u=Object.defineProperty;e.f=r?u:function(t,e,n){if(i(t),e=c(e,!0),i(n),o)try{return u(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(0),o=n(2),i=n(7);t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){var r=n(8),o=n(1),i=r.document,c=o(i)&&o(i.createElement);t.exports=function(t){return c?i.createElement(t):{}}},function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||Function("return this")()}).call(this,n(9))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(1);t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e,n){var r=n(1);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}}]);

    <script>(function () { var e = false; var c = window; var t = document; function r() { if (!c.frames["__uspapiLocator"]) { if (t.body) { var a = t.body; var e = t.createElement("iframe"); e.style.cssText = "display:none"; e.name = "__uspapiLocator"; a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === "ping") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === "string"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, "*") }) } } catch (a) { } } if (typeof __uspapi !== "function") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener("message", l, false) } })();

    window._sp_queue = [];
    window._sp_ = {
        config: {
            accountId: 22,
            baseEndpoint: 'https://cdn.privacy-mgmt.com',
            ccpa: { },
            gdpr: { },
            events: {
                onMessageChoiceSelect: function() {
                    console.log('[event] onMessageChoiceSelect', arguments);
                onMessageReady: function() {
                    console.log('[event] onMessageReady', arguments);
                onMessageChoiceError: function() {
                    console.log('[event] onMessageChoiceError', arguments);
                onPrivacyManagerAction: function() {
                    console.log('[event] onPrivacyManagerAction', arguments);
                onPMCancel: function() {
                    console.log('[event] onPMCancel', arguments);
                onMessageReceiveData: function() {
                    console.log('[event] onMessageReceiveData', arguments);
                onSPPMObjectReady: function() {
                    console.log('[event] onSPPMObjectReady', arguments);
                onConsentReady: function (consentUUID, euconsent) {
                    console.log('[event] onConsentReady', arguments);
                onError: function() {
                    console.log('[event] onError', arguments);
<script src="https://cdn.privacy-mgmt.com/unified/wrapperMessagingWithoutDetection.js" async=""></script>

  Note: The baseEndpoint can also be changed to a CNAME first-party subdomain in order to persist first-party cookies on Safari web browser (due to Safari’s ITP) by setting cookies through the server with set-cookie rather than using document.cookie on the page.

If your organization has edited the baseEndpoint with a CNAME DNS Record you will also need to edit the URL. Please follow the following format if necessary:

CCPA, GDPR TCF v2, GDPR Standard


De-risk anti-adblock endpoint

If you intend to run an anti-adblock campaign, we recommend performing the following configurations to de-risk the anti-adblock endpoint from being blocked.

  • Configure a CNAME DNS record so the javascript file appears to come from your domain rather than Sourcepoint's 3rd-party domain.
  • Integrate wrapper javascript into a critical piece of the property's javascript so that if it is blocked than a critical function for the property will also be blocked. This option still allows end-users to block the anti-adblock script but will protect the CMP endpoints from being blocked.
Was this article helpful?
0 out of 0 found this helpful