First visit targeting

If you are working with a DMP like Adobe Audience Manager, I am sure you have come across the following problem: you want to target your visitors on site, immediately after they log in, using on-boarded data, even on the first visit. This last statement is, precisely, where the problem is. The way AAM processes on-boarded data is as follows:

  1. You upload your CRM data to AAM, either to an SFTP location or an S3 bucket
  2. Every 12h, AAM reads all on-boarded data and processes it, converting the signals into traits
  3. The traits are stored in the core servers
  4. A visitor logs in for the first time
  5. Since the communication between the browser and AAM is done through the edge servers, these servers have at this moment in time no on-boarded information for that visitor
  6. The edge servers where this visitor activity has happened, request the on-boarded traits to the core servers
  7. In a batch process, core servers send to the edge server the visitor’s on-boarded information

This whole process can take 24h, which means that the visitor needs to come back again after this period of time, in order to be targeted on site using the on-boarded information. In some cases this can be acceptable, but in others, it just means a lost opportunity, as the visitor might not log in again for weeks or months.

Real-Time Data Transfers With the DCS API

Fortunately, AAM has a solution for that: send the data directly to the edge servers through the DCS API. Unfortunately, the process is more complex than a simple file upload. Let me summarise it:

  1. Determine the DCS region. You need to guess which will be the closest DCS to your visitors. There are currently 7 DCS regions. In order to do that, you should analyse the HTTP response headers of a call to your subdomain from the region in which you expect the visitor to be. This an example I get connecting from the UK through one of my customers’ website:
    As it can be seen, I am redirected to the Irish DCS. In general, there are only one or two data centres per geography, so it should not be too difficult to get the right one.
  2. Generate the URL. These are the parts of the URL you will need to include:
    • Host. Use the host name from the list at the bottom of this page. For example, in my previous example, it would need to be .
    • Path. Just use /event .
    • Query string parameters:
      • Return data in JSON format: d_rtbd=json
      • Use JSON v1: d_jsonv=1
      • Set the visitor identification using either d_cid  or d_cid_ic , where you will be setting the DPID or integration code and the CRM ID (more info)
      • Set all key/value pairs that categorise the visitor, which will make him qualify for traits you have already created in AAM (remember to use the correct prefix for the keys)
    • Example:
  3. Add HTTP parameters. In your code, you need to have the capability of modifying HTTP parameter and set a different Host  parameter. By default, this parameter is set to the host name in the URL, but in this particular case, you must be set it to your  subdomain. The idea is that the resolved IP is that of the DCS, but the host is the one assigned to you. It should be something like Host: .

Profile Link

You will also need to enable Profile Link. In order to do that, you need to create a cross-device data source in AAM. This data source ID or its integration code is what you will be using in the d_cid  or d_cid_ic  parameters mentioned earlier.


You also have to create or edit a profile merge rule to include an authenticated profile.


Final result: targeting on the first visit

This is what will happen with the previous setup:

  1. You will upload all your customer data directly to the DCS, using your CRM ID
  2. AAM will create an authenticated profile for each of your customers, using the supplied CRM ID as the key
  3. Your customer lands on your website
  4. Your customer logs in
  5. AAM will immediately combine the device profile and the authenticated profile, using the data stored in the DCS
  6. You will be able to target the visitor on the next page after logging in
  7. At regular intervals, you need to upload your updated customer data

I know this process sounds more complicated than the standard file upload, but the extra complication is just for the set up. Once done, it should all be automated.

17 thoughts on “First visit targeting”

  1. Hi there,

    I am working on AAM as well and found your blog to be very helpful. I have a question that I’m wondering if you could help?

    I have created a segment in AAM and trying to use it for targeting (adobe target standard). The trait definition of the segment is this : c_pagename=”pageA”. I want to target those who visited pageA in pageB. When I use this segment, the campaign does not fire. I checked the profile attribute user.aam.segments and found that I am not qualified for the segment even though I visited pageA.

    Am I using the AAM segments correctly ?


    • Hi Vinodh,
      A couple of questions to try to find the issue

      • Do you have the P&A integration enabled? It is needed for Target to be able to get AAM segments.
      • How have you created the segment from the trait?


  2. Hi Pedro, this is very helpful! What is the best way to do it if the CRM ID and data is coming from Aprimo? Thanks!

    • Hi Frank, I am not familiar with Aprimo. However, the typical approach is to have the CMS contact the CRM servers to get the CRM ID and data from there. Then, create the HTML and send it back to the browser. If you do it later in the page, the CRM ID might be to late to use it.

      • Hi Pedro, thank you! Would the 2nd method requires any setup in DTM or visitor.setCustomerIDs() for the id sync?

      • If the CRM ID is loaded before the DTM code, you can use directly the DTM Marketing Cloud ID Service “Customer Settings” section to do the id sync. If the CRM ID is loaded between the DTM code and the _satellite.pageBottom(), then you will need a page load rule with some JavaScript, something like: _satellite.getVisitorId().setCustomerIDs(…)

  3. HI Pedro,
    Article looks good but I have a question related to “You will upload all your customer data directly to the DCS, using your CRM ID

    The whole idea is realtime sync of CRM attributes whenever user reveals identity on website so that we can qualify user into finer segments based on the offline data in AAM. I didn’t quite get why we still need file upload. I am thinking this way
    1. User reveals identity either by login or form submissions on web sites.
    2. Do offline ID link either by hashing email or some other technique (link established between visitor id and offline id)
    3. Do a real time call to offline systems to get additional attributes and do http request to send those additional attributed to AAM (Assuming data source and traits are already in place)
    Let me know ur thoughts on this

    • Hi Maruthi,
      AAM does not call other systems (pull). It is the opposite. You need to send the signals to AAM to use them for segmentation. You can send this data either via DCS calls or files. Then, when the user reveals the identity, he/she immediately qualifies for segments, as AAM already has the CRM traits and can combine it with the behavioural traits.
      Hope this helps!

      • Pedro,
        I didnot get your first 2 points
        “You will upload all your customer data directly to the DCS, using your CRM ID
        AAM will create an authenticated profile for each of your customers, using the supplied CRM ID as the key”
        If you upload the file will it store the data if there is no matching CRM ID in the system? As far as I know it will go unused signals.
        Calling DCS API after user revealing identity is the only option I was thinking but I was not completely understanding loading CRM data first into system and when user reveals identity automatically it picks up.

      • If you set up a profile merge rule using the authenticated profile, AAM will create the profile when you upload the CRM data, even if the user has not been seen before.

  4. Hi Pedro, great post! But there is still one thing I don’t understand.
    How can we link the DCS host and the domain alias? I have checked the documentation and there is the example below:
    “” “ d_uuid=123456789”
    But I cannot see the way to use at the same time both URLs. Actually, I was wondering if we can use only the domain alias ignoring DCS host as follow:
    “ d_uuid=123456789”
    Thanks for your help on this!

    • Hola Manuel:

      You need to have control over the tool you use to make the HTTP call. A browser will not allow you to do it, you need to program it directly in Java/PHP/Python… setting the “Host” HTTP header to, but when resolving the IP address, using (in your example). For example, using curl, you can do:
      curl -H 'Host:' d_uuid=123456789

  5. Hi Pedro

    Thanks for this post. Had a few questions with respect to this

    1. Does AAM sync data across DCS Regions? For ex: If a user based out of US, travels to Asia – I am presuming when the user is in Asia, client calls will hit AAM’s Asia DCS Servers whilst the data collected when the user was in US would be in the US DCS Servers. In such situation, would there be two different partial profiles for the same user in these DCS regions? Does this get merged at some point in time?

    • Hi Praveen,
      Thanks for stopping by!

      1. Yes, AAM syncs data between DCS regions. However, this sync is not real-time. It can take up to 24h to send the data to a new DCS, after a visitor are seen in a new region. Profiles will eventually be merged.

  6. Apologies, submitted before listing the second question

    2. In cases where data is transferred via Server to Server integrations – would the data be saved in the DCS region closest to the server?
    3. In summary, does Adobe have a globally synchronous profile of a user (across DCS regions as well as Data Centers within a region) or would it have partial data for a user in each of the DCS regions / data centers

    Thanks in advance

    • 2. I am not sure what you mean by server-to-server. If you mean making calls to DCS, as I explain above, you can select which region you want to target, so that DCS will store initially the data.
      3. You may want to check this diagram. It may not be the most intuitive, but “Hadoop, Hive, Hbase” represent a global instance that collects data from all edge data centers. This is where all profiles are stored.


Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.