---
title: "Walkthrough: Extending the List Manager to show custom columns in a Contact list"
slug: "walkthrough--extending-the-list-manager-to-show-custom-columns-in-a-contact-list"
abstract: "How to extend the List Manager to show custom columns in a Contact list."
---
# Walkthrough: Extending the List Manager to show custom columns in a Contact list

To see specific contact facet data, you can customize the columns that are displayed in a Contact list. This is useful when you want to have additional columns (such as Phone and City for example) in the Contact list table. By default, the Contact list table contains only Email, First Name, and Last Name.

This walkthrough describes how to:

- Create and customize a model to extend the default List Manager model
- Create a new configuration file

After you complete this walkthrough, you must also [add a column to the Contact list](https://doc.sitecore.com/xp/en/users/104/sitecore-experience-platform/add-a-column-to-the-contacts-list.html) to display the custom facet.

<details>
<summary><h2>Create and customize a model to extend the default List Manager model</h2></summary>

Start by creating a new project to store your model and then customize your new model to extend the default List Manager model.

To create and customize a model to extend the default List Manager model:

1. In Visual Studio, create a project called, for example, `ContactListExtender`.
2. Create a `ContactDataModelWithPhoneNumber` class that inherits `Sitecore.ListManagement.Services.Model.ContactDataModel` .
3. Add a custom field (for example, `PhoneNumber`) to the custom model class.

    ```csharp
    public class ContactDataModelWithPhoneNumber:ContactDataModel
    {
         [Required, MaxLength(50)]
         public string PhoneNumber { get; set; }
    }
    ```

4. Create a `ListSubscribersWithPhoneNumberMapper` class that inherits the `Sitecore.ListManagement.Services.Mappers.IListSubscribersMapper` interface.
5. Override the `MapSubscribers` method to return the `ContactDataModelWithPhoneNumber` model.

    ```csharp
    public ContactDataModel MapSubscribers(Contact contact)
    {
         var contactDataModel = new ContactDataModelWithPhoneNumber
         {
            Id = (contact.Id ?? Guid.Empty).ToString()
         };

    contactDataModel.Email = contact.Emails()?.PreferredEmail?.SmtpAddress;
    contactDataModel.FirstName = contact.Personal()?.FirstName;
    contactDataModel.LastName = contact.Personal()?.LastName;
    var contactIdentifier = contact.Identifiers.FirstOrDefault(x=> x.Source == "ListManager") ??
         contact.Identifiers.FirstOrDefault();
    contactDataModel.Identifier = contactIdentifier?.Identifier;
    contactDataModel.IdentifierSource =
    contactIdentifier?.Source;
    contactDataModel.PhoneNumber =
    contact.GetFacet<PhoneNumber>().Number;
    return contactDataModel;
    }
    ```

6. Create a `CustomServiceConfigurator` class to replace the default  implementation.

    ```csharp
    public void Configure(IServiceCollection serviceCollection)
    {
         var serviceToRemove = serviceCollection
            .Where(service => service.ServiceType == typeof(IListSubscribersMapper))
            .FirstOrDefault();
         serviceCollection.Remove(serviceToRemove);
         serviceCollection.AddTransient<IListSubscribersMapper, ListSubscribersWithPhoneNumberMapper >();
    }
    ```

</details>

<details>
<summary><h2>Create a configuration file</h2></summary>

Next, you must create a new configuration file to apply the configuration changes.

To create a configuration file:

1. Create a `ContactListExtender` config file to apply the configuration changes.

    ```xml
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration xmlns:set="http://www.sitecore.net/xmlconfig/set/" xmlns:role="http://www.sitecore.net/xmlconfig/role/">
      <sitecore role:require="Standalone or ContentManagement">
         <services>
            <configurator type=" ContactListExtender.CustomServiceConfigurator, ContactListExtender" />
         </services>
         <settings>
    	  <!-- Adds the PhoneNumber facet to be loaded  -->
              <setting name="ListManagement.Contacts.FacetsToRead" set:value="ListSubscriptions|Personal|Emails|PhoneNumber" />
         </settings>
      </sitecore>
    </configuration>
    ```

2. Copy the configuration file to the `<website_path>\App_Config\Include` folder.

</details>