Calculate Net Promoter Score
Six ratings of 10, 9, 8, 7, 6 and 3 give two promoters, two passives and two detractors, so the NPS is 0. Paste your customer survey scores and see each one labeled, with counts and percentages. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Responses
- 10, 9, 8, 7, 6, 3
- Total
- 6
- Nps
- 0
This Net Promoter Score calculator turns a list of customer survey ratings into an immediately usable NPS result. Supply responses on the standard zero-to-ten scale, and every response is labeled as a promoter, passive, or detractor. The result includes category counts, category percentages, the final score, and the classification of each original response. It is useful for checking a campaign, preparing a report, or adding consistent NPS arithmetic to an automated feedback workflow without relying on a spreadsheet formula.
Enter the survey responses you actually received
Provide the answers to the standard recommendation question as a list of integer scores from zero through ten. Each list represents one NPS calculation, so combine only the responses that belong to the audience and reporting period you intend to measure. For example, a monthly customer report should use the eligible responses collected during that month, while a post-onboarding analysis may use only answers from customers who completed onboarding.
The calculator rejects an empty list because a score cannot represent a population with no responses. It also rejects decimals, text, values below zero, and values above ten. Those checks prevent malformed exports or incorrectly mapped survey fields from quietly changing the result.
Before calculating, consider whether duplicate submissions, test answers, and responses outside the chosen date range should be removed in your source system. This capability calculates exactly the supplied list; it does not infer eligibility, identify respondents, weight customers, or repair survey data. Keeping that boundary explicit makes the returned score reproducible and easy to audit against the original survey export.
Understand the three NPS classifications
The classification follows the conventional Net Promoter Score bands. A response of nine or ten is a promoter, meaning the respondent expressed the strongest likelihood to recommend. A seven or eight is passive.
Passive responses are counted and reported, but they do not directly add to or subtract from the final NPS. Every score from zero through six is a detractor. The output preserves the input order and returns one category beside every response, which makes it straightforward to trace a total back to individual rows without exposing or requiring customer identity.
It also returns promoter, passive, and detractor counts plus their percentages of all valid responses. Follow-up comments, qualitative interviews, and segment analysis are normally needed to learn what produced the ratings. The classification result gives that deeper investigation a consistent numerical starting point.
Read, compare, and report the resulting score
NPS is the percentage of promoters minus the percentage of detractors. The result can therefore range from negative one hundred, when every respondent is a detractor, to positive one hundred, when every respondent is a promoter. Passives remain in the denominator, so they affect both reported percentages even though their percentage is not directly included in the subtraction.
The calculator reports the final NPS to two decimal places, alongside the intermediate counts and percentages, so reviewers can verify the arithmetic instead of accepting an unexplained headline number. When comparing scores, keep survey wording, audience selection, collection channel, and reporting window consistent. A difference between two small response sets may reflect sampling variation rather than a meaningful customer-experience change, and the capability does not calculate confidence intervals or statistical significance.
Use the classification list for transparent record-level reconciliation, the counts for dashboards, and the score for a concise trend measure.
What you can do with it
Summarize a survey export
Convert a column of recommendation ratings into category totals, percentages, and a report-ready NPS.
Power a customer dashboard
Apply one deterministic calculation to each reporting period before storing the resulting metrics.
Audit an existing NPS figure
Compare record-level classifications and intermediate percentages with a spreadsheet or vendor report.
FAQ
Which scores are promoters, passives, and detractors?
Scores of 9–10 are promoters, 7–8 are passives, and 0–6 are detractors.
How is NPS calculated?
The promoter percentage is reduced by the detractor percentage. Passives stay in the total response count but are not directly added or subtracted.
Can responses contain decimals or values outside 0–10?
No. Every response must be an integer on the inclusive 0–10 survey scale.
What happens if the list of responses is empty?
The calculation is refused, because a score cannot describe a group with no answers. Supply at least one whole-number rating from 0 to 10; decimals, text and values outside that range are rejected as well.
Do passive responses change the NPS?
Not directly. Sevens and eights are counted and shown with their percentage, but the score is only promoters minus detractors. With ratings of 10, 9, 8, 7, 6 and 3, the two passives leave the NPS at 0.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/biz/survey-nps-score-calculate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"responses":[10,9,8,7,6,3]}'const res = await fetch("https://api.kit.forhosting.com/biz/survey-nps-score-calculate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"responses": [
10,
9,
8,
7,
6,
3
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/survey-nps-score-calculate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"responses": [
10,
9,
8,
7,
6,
3
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/survey-nps-score-calculate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"responses":[10,9,8,7,6,3]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"responses":[10,9,8,7,6,3]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/survey-nps-score-calculate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"responses": [
10,
9,
8,
7,
6,
3
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.survey_nps_score_calculate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_responses | 100000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Read, compare, and report the resulting score
Browser calculation is available without charge; automated API requests use the published base price of $0.002 per item.
Technical questions
What happens if the response list is empty?
The request returns an invalid input error because NPS is undefined when there are no responses.
What does an API calculation cost?
Each API item uses the published base price of $0.002. The browser calculator can be run free on this page.