We’ve migrated our documentation to a new site, which means some URLs have changed.
Audience

Audience Integrations: Equativ

Integrating Piano Audience and Equativ (formerly known as Smart AdServer)  provides the full segment-based targeting capabilities of Piano Audience in Equativ.


Integration modes

  • Deprecated Client-side: Segments are created manually in the Smart Ad Server UI, and audience data are exported with the getUserSegmentIds() function of the cx.js library;

  • Server-side: Segments and audience data export to Smart Ad Server is scheduled once a day.

Client-side integration [deprecated]

Creating segments with Smart

See also: the official Smart documentation.

1. Go to Smart→Administration→Groups of keywords.

2. Add a new group (or select if it already exists). Set Name to "Cxense Segments" and Delivery name to "cxsegment"

3. For each Piano Audience segment create a new item in the Smart UI. Set Name to Piano Audience Segment name and "Delivery name" to Piano Audience Segment ID.

Ad tag modification (client side)

See also: exporting ad tags publisher solutionusing the ad tagcX.getUserSegmentIds() documentation.

  1. To generate an Ad tag for your page go to Administration→Administration of site and pages.

  2. Select the target site and the tag format (sync or async). You can choose a legacy tag if you want.

  3. Find the target tag (or the  sas_target variable for the legacy tag) in the code of the Ad tag and insert those lines to receive Piano's segments for targeting.

Modified tag for the Asynchronous One Cell (Ajax One Call) format

This is a generic function to install on the page.

<script type="application/javascript" src="//ced.sascdn.com/tag/9991/smart.js" async></script>
<script type="application/javascript">
    var sas = sas || {};
    sas.cmd = sas.cmd || [];
    sas.cmd.push(function() {
        sas.setup({ networkid: 9991, domain: "//www8.smartadserver.com", async: true });
    });
    var cX = cX || {}; cX.callQueue = cX.callQueue || [];
    sas.cmd.push(function() {
        cX.callQueue.push(['invoke', function() {
            var segments = cX.getUserSegmentIds({ persistedQueryId: '<TODO: insert persisted query id here>' });
            sas.call("onecall", {
                siteId: 999992,
                pageId: 999993,
                formatId: '99994',
                target: (segments && segments.length) ? 'cxsegment=' + segments.join(';cxsegment=') : ''
            });
        }]);
    });
 
    // Async load of cx.js
    (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
    e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js';
    t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
</script>

Format 980x400 980x400

<div id="sas_99994"></div>
<script type="application/javascript">
    cX.callQueue.push(['invoke', function() {
        sas.cmd.push(function() {
            sas.render("99994");  // Format : 980x400 980x400
        });
    }]);
</script>

Modified tag for the Synchronous (Standard) format

<!-- Load the Piano script synchronously -->
<script type="text/javascript">
    document.write('<scr' + 'ipt type="text/javascript" src="http' +
        (location.protocol === 'https:' ? 's://s' : '://') + 'cdn.cxense.com/cx.js"></scr' + 'ipt>');
</script>
<script type="application/javascript">
    var segments = cX.getUserSegmentIds({ persistedQueryId: '<TODO: insert persisted query id here>' });
    sas.call("std", {
        siteId:     999993, //
        pageId:     999994, // Page :
        formatId:   99995,  // Format :
        target:     (segments && segments.length) ? 'cxsegment=' + segments.join(';cxsegment=') : '' // Targeting
    });
</script>
<noscript>
    <a href="http://www8.smartadserver.com/ac?jump=1&nwid=9991&siteid=999993&pgname=ros&fmtid=999994&visit=m&tmstp=[timestamp]&out=nonrich" target="_blank">               
        <img src="http://www8.smartadserver.com/ac?out=nonrich&nwid=9991&siteid=999993&pgname=ros&fmtid=999994&visit=m&tmstp=[timestamp]" border="0" alt="" /></a>
</noscript>

Modified tag for the Asynchronous (Ajax) format


This is a generic function to install on the page.

<!-- Smart header tag -->
 
<!-- Async load of cx.js -->
<script type='text/javascript'>
    (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
    e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js';
    t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
</script>

Format 980x400 980x400

<div id="sas_99997"></div>
<script type="application/javascript">
    var cX = cX || {}; cX.callQueue = cX.callQueue || [];
    cX.callQueue.push(['invoke', function() {
        var segments = cX.getUserSegmentIds({ persistedQueryId: '<TODO: insert persisted query id here>' });
        sas.cmd.push(function() {
            sas.call("std", {
                siteId: 999995, //
                pageId: 999996, // Page :
                formatId: 99997, // Format : 980x400 980x400
                target: (segments && segments.length) ? 'cxsegment=' + segments.join(';cxsegment=') : ''    // Targeting
            });
        });
    }]);
</script>

Booking targeted ads and campaigns (client side)

Booking targeted ads and campaigns

See also: keyword targeting.

Go to Campaigns→Insertions→Targeting.

Select the Keyword group Cxense segments.

Server-side integration

See also: Audience connection with Smart Data Hub.

Ad tag modification (server side)

To save Smart's user ID in Piano Audience, add a cookie-sync tag to the page:

<script type="text/javascript">
    cX.sync('smart');
</script>

 <script type="text/javascript">
    var cX = cX || {}; cX.callQueue = cX.callQueue || [];
    cX.callQueue.push(['sync', 'smart']);
</script>

Booking targeted ads and campaigns (server side)

    1. To see all exported Piano Audience segments, go to Home→Administration→Keyword groups and find the group appropriated to Piano Audience.

    2. In the list of items, you can see Piano's segments in format <Cxense segment name>#<Cxense segment id> and the Smart targeting key, which looks like dmp728=91289.

    3. To target your campaign to a specified segment, go to Campaigns→Insertions→Targeting and open the Keywords/Keyword groups tab.

    4. Insert values from #2 in the Range of values section.

Configuring Piano Audience

Create a configuration

With your site group selected, from the Piano Audience home page, go to the Connectivity tab → the Configurations tab →the Equativicon and click the Configure button.

Configurations_Equativ.png

Configure the connection

Give the name to your export project just for your convenience - fill in Project name - it will simplify your further work with the list of connections and the Match Rate reporting (e.g. if you have multiple connections with one 3rd party system, such a name can help to distinguish it).

The Segment provider ID attribute is required.

Region is one more obligatory parameter. Equativ provides dedicated endpoints by region (to enable data synchronization) and by environment (production vs. sandbox). This Region parameter is used to correctly select the API provided by the Equativ side.

Then choose User IDs type.

Screenshot-2026-05-28-at-12.41.44.png

After that, click Test connection. If all settings are specified correctly, the "The connection was tested" message will appear.

The below settings become available only after a passed connection test.
Save all settings by pushing the Create/Save button in the top right corner of the page.
If you don't get the confirmation message or receive an error message like “Auth failed” or “An error occurred”, please check your settings and try again.

If you don't know how to fix the problem, please ask the Support or Professional Services team.

Configure segments

Successful test connection enables the Configure segments form where:

  • All full usage segments means that all Full usage (active) segments will be sent to Google Ad Manager; any newly created Full usage (active) segments will be added automatically.

  • All segments includes both types of usage segments: Full and Reporting only segments.

  • Specific segments allows you to select several specific segments. Newly created segments are not added automatically. Specific segments options allow you to choose how Piano Audience should select segments for export:

    • Separate segments allows you to search and select segments one by one manually.

    • By labels allows you to select one or more labels (key-value pairs). Piano Audience will find segments by the selected labels and export them.

    • By segment groups allows you to select one or more segment groups, and Piano Audience will export segments within these specific segment groups. It is more suitable for those clients who prefer to organize their segments specifically.

Screenshot-2026-05-28-at-12.51.41.png

  • Priced segments allows you to select several specific segments and set prices for them. The price can be either the same for all selected segments or different - individually for each segment. Newly created segments are not added automatically.

Screenshot-2026-05-28-at-12.44.01.png

Screenshot-2026-05-28-at-12.44.28.png

Set the parameter.

Push the Export now button only if data needs to be imported immediately. After successful export you will see the result message “Export completed!” and the files will be in your directory.

Export segments

You can click Export now in the Configure segments section for almost immediate export of selected segments without waiting for the next scheduled data transfer. The other option is configuring scheduled data transfer in the Activate section below. There, you can either set up a daily data transfer by turning connection on or hold the created configuration without activation yet and set the connection to "off".

When ready, click Create or Save (if editing) in the top right corner of the page.

4-activate.png

The last step is to activate the connection. If you are still waiting for the confirmation from the Piano team, please keep it inactive because any way you won't get segments on Equativ's side without it.

Now your connection is established! A connection with the server-side option works once a day just like all server-side integrations supported by Piano Audience.

Export First-ID user IDs

Equativ supports server-side integration to bring First-ID UIDs from Piano Audience into Equativ. The First-id solution overview is here

cx.js

Customer’s websites have to be configured to work with First-ID to obtain First-ID user IDs. Read details in the First-ID documentation

The cx.js code example below transfer First-ID User IDs from the customer’s websites to the Piano Audience. 

cX.callQueue.push(['invoke', function () {
        var firstId = cX.getCookie('firstid');

        if (firstId) {
            cX.sync({
                partner: 'fid',
                userId: firstId
            })
        }
    }]);

Configuring Piano Audience for Equativ

According to the Equativ documentation Equativ is agnostic regarding the id type: Equativ's Id, mobile advertising Id (MAID), publisher first party cookies, hashed e-mail, extended Id etc.; Equativ supports one preferred extended Id provider per audience data provider; please get back to your contact at Equativ and indicate the provider whose extended Ids (alternative Ids) you intend to use

Read general information about how to configure connection, save changes, activate or deactivate connection above. 

The following should be done if you want to export First-ID user IDs to Equativ: 

  • When setting up User IDs type parameter, choose First ID option. 

Don’t forget to fill in other obligatory fields, make Test connection and save changes.

Screenshot-2026-05-28-at-12.53.59.png

Monitoring and update

Now you can see your connection on the list of existing connections (Connectivity→Connections) and in the Match Rate report (Connectivity→Match Rate Reporting).

To change settings (project name, segment list, or connection status), please find the needed connection on the list of existing connections:

Connections_Equativ.png


Please note that the segments are not deleted in Equativ by the integration.

A particular TTL parameter that defines the default time to live of a profile/segment relation is used for all the segments. The default value is 30 days.

Last updated: