Migrate property to multi-campaign

   Permission: Campaign Staging and/or Campaign Public

  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
  2. Enable multi-campaign on property group
  3. Retrieve and update code snippet on property
  4. Update JavaScript code to resurface privacy manager

  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.

<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

Update JavaScript code to resurface privacy manager

The privacy manager JavaScript code is a snippet that is added to a property and allows an end-user to resurface a privacy manager. Using this link/button, end-users can directly manage their consent preferences on an ongoing basis without having to re-encounter your organization's first layer message. 

When migrating a property to multi-campaign you will need to update the Javascript code and include .gdpr. or .ccpa. in the command. Click here to learn more. 

<button onclick="window._sp_.gdpr.loadPrivacyManagerModal(123456, 'vendors')">Privacy Manager GDPR</button>

Call window._sp_.gdpr.loadPrivacyManagerModal() without passing a parameter and the property's group privacy manager as specified by groupPmId will display to the end-user:

<button onclick="window._sp_.gdpr.loadPrivacyManagerModal()">Privacy Manager GDPR</button>
Was this article helpful?
0 out of 0 found this helpful