Skip to main content
Level 2
April 30, 2026
Question

Dataset Lookup in AJO Personalization Returning Empty Object

  • April 30, 2026
  • 5 replies
  • 106 views

Summary:

I am using dataset lookup in AJO personalization, but it is returning empty values. My dataset has a primary identity and data is present. I have tried both approaches — with fields nested under the tenant namespace and also without nesting — but still getting empty results. Not sure what is causing the issue or how to fix it.



AEP   configuration:

schema : {

tenant : {

offerID (primary id),

title ,

description

}

}

  • Dataset is enabled for lookup
  • Identity is marked as primary
  • Data exists in dataset (e.g., "IC121")
  • Using hardcoded ID in lookup

Note: Schema and Dataset is not profile enabled

In AJO (Campaign - CBE based), I am trying to access this data using personalization:

Code:

[ {{ datasetLookup datasetId="Dataset" id="ID121" result="offer"}}

 {

“title” : “{{offer.tenant.title}}”,

“description” : “offer.tenant.description”

}]

 

Issue:

The response is:

{

title :””,

description : “”

}

 

It seems like the lookup is not executing. Can anyone help me what i am missing

Thanks in advance

5 replies

Level 3
April 30, 2026

Hey ​@Rahul 

There are few things to check

  1. The schema must be of record-type for lookup to work. Therefore, do let me know if you’re using that type or else you would need to create a new one with new class of record-type. 
  2. And the identifier’s namespace should be of non-person identifier. Kindly check the assigned namespace for your field offerID

  3. It could be that the dataset might not be actually enabled for lookup service. I’d recommend you to check the status of lookup with this API endpoint mentioned here. If you don’t see the status of lookup key being enabled to true, then you could enable it via API

  4. If the above settings are configured & setup correctly and the lookup is still not working, then the data might not be properly ingested and mapped to the fields in your schema. I’d suggest using Data Prep to map data via either API or in UI ingestion workflows

Hope this helps!

 

Regards,

Ganesh Kumar

RahulAuthor
Level 2
May 1, 2026

Hi ​@IamCGK  thanks for the detailed response — really helpful.

The points you mentioned:

  • The dataset is based on a record-type schema

  • The identity field OfferID is configured as non-person identifier and marked as primary

  • The dataset is enabled for lookup (verified from UI)

  • Data is present in the dataset and visible in preview

However, I am still getting an empty object {}  from dataset Lookup. 

 

Is there any way to debug or check the log 

Level 3
May 5, 2026

Hey ​@Rahul - Thanks for the confirmation! One thing you can do is that by checking whether there are records in the lookup store by navigating Monitoring → Journey Optimizer. This helps in understanding when new batches of data are ingested to the lookup service.

However, as of present, there is no way to query what data is present in that store. 

 

Additional debugging steps

Print the full result object by simulating with test profiles/test variants. This shows whether that id-based record is present along with all the fields instead of being null or empty.
i.e <p>{{offer}}</p> (With HTML Mode)

 

If the above doesn’t work either, then

  • The batch(es) involved with the record(s) might have been deleted. Therefore, re-ingest the batch again with unique _id

     

  •  Create another dataset and enable it for lookup service, ingest data and try accessing the results.

 

Hope the above helps!

 

Regards,

Ganesh Kumar

RahulAuthor
Level 2
May 6, 2026

Hi ​@IamCGK ,

In Monitoring , I can see the data in lookup and also source Name along with number of records .

 


I tried to print the {{offer}}  object but getting {} empty in response. 

Configuration Check :


In Decisioning catalog do we need  to map the lookup dataset ?

Is there we way where we check the call is getting triggered to lookup dataset or not ?
{{ datasetLookup datasetId="Dataset" id="ID121" result="offer"}}

I think this call is not getting the dataset itself.
 

RahulAuthor
Level 2
May 7, 2026

Hi ​@IamCGK ,

I can see the {{offer}} with values in Simulate content but not the web page 

Level 2
May 13, 2026

Hi Rahul,

The last update is actually a very important clue:

“I can see the {{offer}} with values in Simulate content but not the web page”

This strongly suggests that the dataset lookup itself is working correctly and the issue is happening during web channel rendering/runtime execution rather than in the lookup configuration.

A few things to check specifically for Web Channel personalization:

  • In simulation, personalization is rendered server-side, but on the actual webpage the rendering depends on the Web SDK / In-App execution context. Sometimes the lookup executes in simulation but the content does not resolve properly on-page due to rendering timing or client-side execution issues.

  • Verify whether the personalization syntax is rendering as raw text in the DOM or resolving to empty strings. Open browser DevTools → Network/Console and check for:

    • Alloy/Web SDK errors

    • Personalization payload response

    • Failed propositions/render decisions

  • Your syntax may also have a small issue here:

    “description” : “offer.tenant.description”

    This is missing handlebars around the field reference. It should be:

    "description": "{{offer.tenant.description}}"
  • Also confirm that the datasetLookup block is executed before the fields are referenced. Sometimes wrapping the entire payload inside the lookup block helps:

    {{#datasetLookup datasetId="Dataset" id="ID121" result="offer"}}
    {
    "title": "{{offer.tenant.title}}",
    "description": "{{offer.tenant.description}}"
    }
    {{/datasetLookup}}
  • Another thing to validate:
    If you are using Web Channel, ensure the personalization is being rendered in a supported context. Some lookup-based personalization behaviors differ between Email and Web channels.

  • Since simulation works, I do not think Decisioning Catalog mapping is the issue. Dataset Lookup works independently from Offer Decisioning datasets.

  • There is currently very limited visibility into whether the lookup API call itself is triggered at runtime on the webpage. Usually the best debugging approach is:

    • AJO simulation

    • Browser network inspection

    • Web SDK debug logging

    • Checking proposition payloads returned from Edge Network

At this point, this looks more like a web rendering/runtime issue rather than a dataset configuration issue.