I have varied information stored in xDB imported from a CRM system. This is stored against Contacts in custom Facets. What is the most scalable method to use this data for segmenting large number of Contact's in the List Manager?

Creating the custom segmentation rules isn't a problem it's more retrieving that getting that Contact data in a scalable way.

1 Answer 1


Sitecore 8.1 update 3 brought a change that allows custom Contact Data to be indexed. This means this Custom Contact data will be available to searched through the sitecore_analytics_index.

This is implemented through a custom processor that extends the new contactindexable.loadfields pipeline. This allows data from custom xDB facets to be added to the collection of contact indexable fields.

protected override IEnumerable<IIndexableDataField> GetFields(ContactIndexableLoadFieldsPipelineArgs args)
  var fields = new List<IIndexableDataField>();
  var customFacet = args.Contact.GetFacet<ICustomContactFacet>("CustomContactFacetName");
  if (customFacet != null)
    fields.Add(new IndexableDataField<bool>("contact.CustomFieldName", customFacet.CustomField));
  return fields;

I have since written a detailed blog post on how to do this

  • Ok, and how then I create a custom rule condition for the segmented list? How to retrieve that indexed value in the rule? Can I put custom objects into IndexableDataField? like fields.Add(new IndexableDataField<ICustomElement>("contact.CustomElement", customFacet.CustomElement)); Commented Mar 22, 2017 at 9:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.