I have an on-premise install of SharePoint 2013. We use user-profile synchronization to get titles, departments and phone extensions, but leave it up to our staff to enter their About Me, Skills, and to add a photo if they wish.

Does anyone have a suggestion how I might be able to get reports on User Profile completeness - for instance:

  1. list of all users that have filled out the About Me section
  2. list of all users that have a photo
  3. List of all users that have a photo AND About Me AND Skills

I am trying to put together a campaign to encourage usage of the Profiles and wonder how I'll measure it.

Many thanks for all ideas.

  • 1
    Something like Hyperfish might be useful, hyperfish.com Feb 16, 2017 at 15:38
  • Nice suggestion on Hyperfish Eric, however the fields I'm looking to report on are in the SharePoint User Profile - not in AD.
    – Maureen
    Feb 16, 2017 at 15:47
  • I thought it could look into SP too, I haven't tried the product, just something new that's come out recently Feb 16, 2017 at 15:53

1 Answer 1


You could create console app to iterate and build csv file of fields you need.

using Microsoft.Office.Server.UserProfiles;

// Code Block for Profile Loop
using (SPSite site = new SPSite(spURL))
        // Get our context and the profile manager object
        ServerContext context = ServerContext.GetContext(site);
        UserProfileManager profileManager = new UserProfileManager(context);

        // Define our holder strings
        string firstName = string.Empty, lastName = string.Empty;
        string department = string.Empty, customProperty = string.Empty;

        // Loop through each user in the profile manager
        foreach (UserProfile user in profileManager)
            // grab the first and last name
            firstName = user[PropertyConstants.FirstName].Count > 0 ? user[PropertyConstants.FirstName].ToString() : string.Empty;
            lastName = user[PropertyConstants.LastName].Count > 0 ? user[PropertyConstants.LastName].ToString() : string.Empty;

            // grab the department
            department = user[PropertyConstants.Department].Count > 0 ? user[PropertyConstants.Department].ToString() : string.Empty;

            // grab a custom property
            customProperty = user["Custom Property Name"].Count > 0 ? user["Custom Property Name"].ToString() : string.Empty;
    catch (Exception ex)


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.