Categories: Microsoft Forms Pro
EFFECTIVE: 2020-21-07 – Microsoft announced that Forms Pro was becoming Dynamics 365 Customer Voice. While elements of this blog post may still be accurate, keep in mind that the product has change. You can review the blogs in the D635 Customer Voice category which is being added to over time.

Using Net Promoter Score, you can assess customer loyalty for your product, service or organisation. This blog post was previously done using Voice of the Customer for gathering feedback. Can calculating your overall Net Promoter Score be achieved using Microsoft Forms Pro? You bet it can! In this post we will walk through how to achieve this. A lot of the set up is the same as the original post (which you can find here) so a bit of repetition before we get to the Forms Pro stuff!

So what is Net Promoter Score? Net Promoter Score (NPS) is a customer loyalty metric developed by Fred Reichheld, Bain & Company, and Satmetrix 2003. The NPS is calculated based on responses to a single question (on a scale from 0 to 10):

How likely is it that you would recommend our company/product/service to a friend or colleague?

So how is it calculated? Based on responses, customers will be classed as one of the following:

  • Promoter (score 9-10)– will continue to buy from you, refer you and promote you
  • Passive (score 7-8) – satisfied but unenthusiastic. Could be easily swayed by competitors
  • Detractor (score 0-6) – unhappy customer who can damage your brand and impede growth through negative word-of-mouth.

The Net Promoter Score formula then gives you the NPS.  The score can range from a low of -100 (all Detractors) to a high of 100 (all Promoters).


So how can we add this to our Dynamics 365 Customer Engagement environment? There is a bit of set up to get started, but it’s well worth it if your organisation wants to start capturing and understanding their Net Promoter Score. The first thing is to set up Forms Pro (you can find all kinds of blogs and videos about it here). The next thing is to create a Global Option Set for the Net Promoter Score types with Promoter, passive and Detractor as the options. Then create an NPS Type field on the Contact entity.

Including the NPS Type field, add the rest of these fields to the Contact entity. This will allow us to see the most recent NPS score given, and for which survey, and what the previous information given was. This could be helpful to see if a Contact’s perception or opinion has changed drastically, and what caused this. Or, hopefully, where it’s improved!

For the Account entity go ahead and add the following fields. On the Account we will be able to track all of the Contacts who have provided an NPS score, giving us the ability to capture the number of Promoters, Passives and Detractors, then the percentage of each. This then allows us to get the NPS for each Account. Very helpful for Account Managers to see which companies are happy overall.

For the Active Contacts and NPS Contacts, these will be added as you see below, giving us the ability to see how many Contacts exist overall on an Account, and how many of them have actually provided Net Promoter Score data.

For the numbers of each type of NPS contact, we can do a Count with a filter for the NPS Type field (3 needed – one for each type), and for the percentage we will do a calculated field setting the number of each type divided by the number of NPS contacts, multiplied by 100 (3 needed – one for each type).

Finally on the Account we need the calculated field to figure out the Net Promoter Score.

You’ll then need to add fields to the Business Unit entity, which will be the exact same fields you added to the Account entity. The only difference being that the related entity will be the Contacts (Owning Business Unit). Make sure you add all of the fields to your Contact form. Leave the fields open for now. We will need a couple of workflows. Once those are created, you can then make the fields read only so they are only ever updated when new surveys are completed. Then make sure to add your new fields to the Account form, and also to your Business Unit form.

The Net Promoter Score question is one of the options you can add to your Forms Pro Surveys. Create your survey, and make sure to add the Net Promoter Score element to it. When the survey is complete the Net Promoter Score option they gave is part of the survey results. This is then added to the Common Data Service in a Survey Response entity. See how to add these entities in to a Model Drive App for use with your Dynamics 365 entities.

Next we want to make sure the Contact record gets updated with their latest NPS details each time they complete a survey with the NPS question on it. To do this, we will need to create a Microsoft FLOW. The first step is the trigger, which is using the Common Data Service connector, and the option for when a record is updated. Select Survey response as the entity. Next, we want to do a condition check. You might not have added the NPS Score question to all of your surveys, so we are going to check to see if that field is equal to null. If it is, do nothing. If it’s not, meaning it contains a value, then we run the next part of our Flow.

We first need to get the Contact that is set in the regarding field on the Survey response record that was created.

*UPDATE* – 11/08/2019: If your Survey Responses are not set regarding the Contact (if they are linked to a case or other entity), the step above will fail in those instances. After more research, start off the No branch with a List Records step. For the Entity, you won’t find Activity Parties in the list. Instead, scroll to the bottom and click on Enter custom value. Then type activityparties. Your filter query should be _activityid_value eq and then use the Activity id from the initial trigger step. Then type and participationtypemask eq 1. This will mean only the ‘Sender’ of the Survey Response will be pulled. This should be the Contact that you are getting.

Now add your Get Record step to get the Contact, but use the Party value from the previous activityparties step. Then we need to update that Contact record with the details about the Net Promoter Score they gave.

Look for the four new NPS fields you created to be used for the most recent NPS info (in other words, NOT the ones with the word Previous in them). Use the fields from the Survey response field to update the NPS Score, the NPS Last Updated and the NPS Survey. Ignore the NPS Type field for now.

Then look for the ones with the Previous in front, and update those pulling the fields from the Get record step. We are going to update the Previous fields with the current fields from the Contact.

Now we need to set the NPS Type field by setting up several conditions, and checking what the NPS Score is. If it is greater than or equal to 9, we set the NPS Type field to Promoter. If it is less than or equal to 6, we set the NPS Type field to Detractor. If it is 7 or 8, we set the NPS Type field to Passive. You can click on the image to enlarge if it’s not easy to see.

So, the flow is now complete. To test it, fill out a survey for someone using a trigger, something like this or this. Then go and look at your Contact record. You will see that the first section is filled with the NPS info. Fill out a second survey and you will see the first survey info is now in the Previous NPS fields and the new survey info is in the current NPS fields.

Now check out a related Account record, and recalculate the fields for the number of each type of NPS contact, and save the record. You will then see the updated Net Promoter Score for that Account.

You can then get your overall Organisation NPS by looking at your Business Unit.

If you wanted to provide further value to the Account Manager, or anyone interested in getting an overview of an Account, you could create a Word Document template similar to the one below. Quick and easy, and no developer knowledge needed. Just make sure you add in the business unit entity relationship when creating the document so you can show the overall NPS, and the Contact entity relationship so you can add related Contacts and use a repeater to show them all.

Want to just watch how to do this? Check out the video below:

Check out the latest post:
Wave 2 2024 Customer Insights Journey Chat With Amey Holden

This is just 1 of 462 articles. You can browse through all of them by going to the main blog page, or navigate through different categories to find more content you are interested in. You can also subscribe and get new blog posts emailed to you directly.

25 thoughts on “Calculating Your Organisation Net Promoter Score with Forms Pro

  1. Hi Megan,

    great stuff. Very similar to what we’re looking for.
    One question: I was under the impression that D365 has a standard field on the contact entity where the NPS (if exists) is captured. Is this a false assumption? Any NPS feedback we want to get fed back to D365 has to go through Flow which populates custom fields?


    1. Hi Thorsten… unfortunately a false assumption. You would need to add an NPS field on to the Contact entity if you wanted to track it on each individual and also get an overall NPS for the entire organisation. And yes, any NPS feedback from Forms Pro Survey Responses, you would need to follow the steps in the post so that you can pull it back on to the Contact record, and then calculate from the Business Unit perspective.

  2. Hi Megan,

    Great article, very information. How do you show the question response on the contact entity? Let’s say someone is sending Out NPS.

    Q1: NPS score
    Q2: What is the reason for your score

    Ofcourse we can see the answer to Q2 in the activity but I am struggling to get the Question 2 response on to the contact entity. I created a multi line text column NPS Feedback in contact entity

    1. Hi Dave, do you have a corresponding field on the Contact record for Q2? If so, you could use the process I laid out, but just also make sure you update that field with your Power Automate flow, and populate the field that shows the reason for the score. So just make sure you have a multi-line text field on the Contact, you should be able to populate it pretty easily.

    2. Hi Megan,

      Thank you for your reply. I do have a corresponding field in contact entity. What I am struggling with is the value for to Q2 when a new response is received.
      None of the field is telling me answer to Q2 when a new response is received. I can only see NPS score value

      Do you have any suggestions which field will have the value for Q2?

    3. Aha! Yes, Ok, I forgot that this post didn’t use the Get Response Forms Pro action. So, if you look at this post, you will see the action where you can get the responses and that will give you all of the individual questions, and the responses: – take a look, hopefully that will help. You can always send me an email through my contact form if you still need some help.

  3. HI Megan- it’s me again! I have build this out (because its useful and awesome) but I am running into an issue. Why did you use NPS is equal to Null and then go through the If No for the entire flow? I ask because my flow keeps failing on this step and I know for certain the NPS score on the survey response is not null. Why not use NPS score is > or equal to 0 and then use the If Yes after that? Or use NPS score is not equal to null and then use the If Yes condition? Hopefully this makes sense and I wonder why I am getting that failure and if changing that criteria may work in your opinion.

    1. *Update* I did try this and it worked for me….my criteria are NPS Score is greater than or equal to 0 and then I am using the If Yes condition. It seems to be working marvelously and I can’t wait to show it off. But I am curious if you think there may be an issue I am not thinking of or seeing by doing it this way….

    2. Awesome! Glad you got it to work by changing your criteria slightly. It should have worked the way I did it, but again, it wasn’t the only way.

    3. Hi Jason, hope you are well! As with MANY things in the Microsoft world, things can be done multiple ways. When I wrote it, I wanted to make sure that there was actually a value in the NPS Score field, which means If it’s equal to null, that means there is nothing in there, hence the Yes side being blank. You could indeed use NPS score is >= to 0 too. Typically you would use equal to null, but again, you could do not equal to null. It all amounts to the same thing!

  4. Hi Megan,

    me again πŸ™‚
    I’m currently setting up the workflow similar to your approach.
    One question: You set up the logic to identify the correct NPS Type with multiple If-Condition-Shapes in Flow.
    Is it possible to skip all that and write the logic as an expression statement directly in the Update Record Shape for the NPS Type field?


    1. Hi Thorsten, absolutely. When I create a blog post, I add how I know it can be done at that time. Then like everyone, I learn more about how to do things, better, or more efficiently. This would be one of those posts for sure!

    2. Hi Megan,

      sure. I played around with the expressions and this expression in the Update statement correctly sets your NPS Type:


    3. The values 96335000 etc of course need to be adjusted to your option set values for Promoter, Passives and Detractors

    4. Nicely done, and thanks for sharing so others can see this too!

  5. Thanks, Megan! You are a rock star! Follow up question on the account and business unit reporting. Our NPS is only looking at the most recent NPS survey, yes? In other words if the same contact fills out a NPS survey more than once, only the most recent entry counts on the account and/or business unit overall NPS, number of promoters, number of detractors, etc. Is this true? Based on my testing that is my conclusion, just looking for confirmation.

    1. Hi Jason, yes, that is correct. It looks at the most recent NPS value for each Contact who has ever responded to an NPS question. So if one person has completed 10 surveys, and gave a 10 at one point, but most recently gave a 3, it’s the 3 that will be used for them in terms of the overall calculation.

  6. Hi Megan,

    say, i have a list of contacts that i would like to send the survery to, and in return, I would like to show the list of survey responses by the contacts in the Account form entity with columns: Contact Name / NSP score / Subject / Date submitted. How do i do that?

    assuming the survey response has been configured to show in the Contact form with regarding field set to the Contact already.

    1. Hi Steph. So your survey responses are set regarding the Contact, which means you can’t display them on the Account because they are too many records removed from the Account record. What you can do though, is add the NPS Score, Subject and Date Submitted as new fields on the Contact entity. Then use Power Automate to populate those fields when a new Survey Response comes through. Then you could use a subgrid to show the Contact records and those specific fields directly on the Account. I can’t think of any other easy way to do it at this point.

  7. Appreciate your suggestion, Megan.

    Given the context here, binding the survey response to a contact via the regarding field in order to display them in the Contact form (from my understanding, the regarding field needs to be set to the Contact, the From field isnt applicable, i dont know why), and in Account form, looking to display all contacts that respond to the survey with Contact name / NSP score / subject / date submitted.

    If you were to design this, how would you take it? if you dont mind sharing your experience? thanks a million

    1. Hi Steph, hmmm….. so if you have followed this blog post, you would already have the most recent NPS Score, NPS Last Updated & NPS Survey fields. Of course, you can call those fields what you like. Then, you can create a view on the Contact entity, and show those three fields, plus the Contact Name. Add a filter to the view so that you only show Contacts who have a value in the NPS Score field. Then, on your Account record on the form you use in Dynamics, add a Subgrid to the form. Choose to show related Contacts and then select the new view that you created. That should give you what you need, at least I hope it will!

Comments are closed for this post.