5 Customer Satisfaction KPIs for your Delighted Dashboard (including SQL)

Eleni Markou

I guess no one would argue with me if I say that satisfied customers are a key factor in sustainability and growth of a business. As Gregory Ciotti simply put it “a satisfied customer is one that will continue to buy from you, seldom shop around, refer other customers and in general be an advocate superstar of your business”. So it seems that all businesses need delighted customers.

  • But how can I know which customer is delighted and which isn’t?

No need for crystal ball this time, just ask them, track their answers, analyze them and based on the results assess your current standing.

  • And how often do I have to do it? Once is enough, isn’t it?

No, it isn’t. Customer satisfaction is like a moving target and so you must be in a continuous procedure of finding out what are your customers expecting from you and your services and what it takes to delight them today, tomorrow and the day after.

  • Last question, do I have to track and measure everything or is there a finite set of KPIs that covers me?

Generally the larger the amount of data, the more the insights you can generate but admittedly data is not enough if there is no context. In other words, you have to understand the ‘why’ behind every KPI that you are tracking. What sort of insights can you generate and how these are going to help you improve your performance.

So to begin with, we have collected a set of metrics that we believe they answer some really important questions that you probably should start asking. Luckily for us, we had the assistance of Delighted, a service that uses the Net Promoter System to gather real feedback from customers by sending them a single question survey,  and of course Blendo to import the generated data into a PostgreSQL database.

Customer Satisfaction Score (CSAT)

This KPIs basically gives us a good approximation of how effectively did we meet customers’ expectations in a given period of time. You can choose whichever aggregate function you consider more important to apply on the score values that you have selected. We chose average but median would be equally appropriate.

select date_trunc('month', created_at), avg(score)
from delighted_responses
group by date_trunc('month', created_at)


customer satisfaction score

Net Promoter Score (NPS)

When we talk about Net Promoter Score or NPS for brevity, we actually refer to an index that ranges from -100 to +100 and measures the willingness of a customer to recommend our product or service to others based on their answers on an 11-point scale.

According to the score they give, customers can be classified into three categories: Detractors, Passives, and Promoters.

Detractors are customers who give a score at most 6. They are not that satisfied by the product and most probably they won’t buy again. In addition, they may harm the company’s reputation with negative word of mouth.

Customers who assign score 7 or 8 are called passives. Although they appear to be quite satisfied, they can easily turn to a competitor. Generally, they remain neutral, neither encouraging nor discouraging others from choosing the same company.

Lastly, the customers who respond with grade 9 or 10 are called promoters. They are the customers who will likely remain loyal to your products or service and also highly refer to others as well.

Based on the above definitions, the NPS is calculated by subtracting the percentage of detractors from the percentage of promoters. If all surveyed customers are detractors the final NPS will be equal to -100 and if all surveyed customers are promoters the final NPS will be +100. Every other situation will yield a score between -100 and 100.

Again, when using data from delighted you can very easily calculate your monthly net promoter score using the following SQL query:

select (detractors/total - promoters/total)*100 as NPS
(select count(case when score>=9 then 1 else null end)promoters,
count(case when score=7 or score=8 then 1 else null end)passive,
count(case when score<=6 then 1 else null end)detractors
count(*) as total
from delighted_responses
where date_trunc('month', created_at)=date_trunc('month', now()) )tmp

net promoter score


Since surveying customers has to do with sending emails, monitoring the bounce rate is important. Of course, a bounce may get caused by a temporary technical problem but can also be a result of an invalid, erroneous address or an address which has fallen out of use. Either way, your readers not getting the information you want can be frustrating and so monitoring the bounce rate is of significant importance.

The SQL query to perform the above calculation using Delighted data is the following:

select date_trunc('month',bounced_at), count(*)
from delighted_bounce
group by date_trunc('month', created_at)


The same as in email marketing, keep an eye on the number of recipients that want to unsubscribe from your list is very common. When a subscriber decides to opt-out certainly is exactly happy receiving your emails. Maybe you email him too often or he has lost his interest in the company.  Either way, certainly you need to track the trend of this indicator. Fortunately, this can be easy with Delighted and a few lines of SQL:

select date_trunc('month', unsubscribed_at), count(*)
from delighted_unsubscribers
group by date_trunc('month', unsubscribed_at)

Monthly bounces and unsubscribers

Most recent comments

Since Delighted allows users to enter free text comments,  keeping a constant eye on them is definitely good as they express the exact opinion of every receiver and at times definitely constructive recommendations. Among all comments, those that appear to be the most interesting are the very negative and very positive comments as they can help you understand what exactly are doing right and what needs further improvement.

With the following SQL queries you can display the 5 most recent positive and negative comments you received recently:

Most recent ‘bad’ comments

select created_at, id, comment
from delighted_responses
order by date_trunc('month', created_at) desc
where score<=6
limit 5

Most recent ‘good’ comments

select created_at, id, comment
from delighted_responses
order by date_trunc('month', created_at) desc
where score>=9
limit 5



To conclude, with services like Delighted and some queries like the ones that we presented in this post you can easily keep track of the satisfaction that your customers seem to receive from the products or the services you are offering to them and without over surveying and receive high quality, actionable feedback.

Help your customer success and executive team take ownership of the insights that live in Delighted to transform customer satisfaction.

Blendo is the easiest way to automate powerful data integrations.

Try Blendo free for 14 days. No credit card required.