Calculate Employee Net Promoter Score
This employee Net Promoter Score calculator converts workplace recommendation survey responses into a transparent eNPS result.
Run — free
Enter employee ratings on the standard zero-to-ten scale to classify each response as a promoter, passive, or detractor. The result includes category counts, percentages, the final eNPS, and classifications in the original order. HR teams, people analysts, and organizational leaders can use it to check survey arithmetic, prepare recurring engagement reports, or add a consistent calculation to an internal analytics workflow without maintaining spreadsheet formulas.
Prepare a valid employee response set
Provide the answers to an employee likelihood-to-recommend question as a list of integer scores from zero through ten. Use one list for the workforce population and reporting period you intend to describe. A quarterly company-wide result, for example, should contain only eligible responses from that quarter, while a department result should contain only responses assigned to that department under your reporting rules. The calculator rejects an empty list because no eNPS exists without responses. It also rejects text, decimals, negative values, and values above ten so that malformed exports cannot silently affect the metric. Review the source survey before calculation to remove test submissions, apply your stated date boundaries, and handle duplicates according to your survey policy. The capability processes only the supplied scores. It does not identify employees, infer organizational membership, select a representative sample, apply weights, or decide whether a small group is safe to report. Those governance decisions remain with the organization. Keeping data selection separate from arithmetic makes the output reproducible and lets reviewers reconcile it with an approved, privacy-conscious source extract.
Understand employee promoter classifications
Employee Net Promoter Score uses three conventional bands. Ratings of nine or ten are promoters, representing employees with the strongest stated likelihood of recommending the organization as a workplace. Ratings of seven or eight are passives. They remain part of the response total and influence the denominator, but their percentage is not directly added to or subtracted from the score. Ratings from zero through six are detractors. The output returns a category beside every score in its original order, as well as category counts and percentages, making the result easier to audit without requiring names or other employee identifiers. Percentages are rounded to two decimal places for stable reporting. These categories summarize one survey response; they do not reveal motivation, performance, loyalty, or an employee's future behavior. Treat them as structured signals rather than labels to attach to individuals. Qualitative comments, carefully designed follow-up research, and aggregate segment analysis can provide context about workplace conditions. Access controls and minimum reporting thresholds should still be applied outside this calculator whenever small populations could make respondents recognizable.
Calculate, interpret, and report eNPS
The eNPS formula subtracts the percentage of detractors from the percentage of promoters. The result ranges from negative one hundred, when every response is a detractor, to positive one hundred, when every response is a promoter. Passives stay in the total population, so they affect both promoter and detractor percentages even though their own percentage is absent from the subtraction. The calculator returns the final eNPS to two decimal places alongside totals, intermediate percentages, and record-level classifications. This allows an analyst to verify the calculation instead of presenting an unexplained headline. For comparisons across teams or periods, keep question wording, eligibility rules, collection channel, and survey timing consistent. Changes in a small response set can reflect sampling variation, and this capability does not estimate confidence intervals, statistical significance, response bias, or causation. Use counts for transparent internal review, percentages for composition, and eNPS as a compact trend indicator alongside other engagement evidence. Protect confidentiality when publishing breakdowns, and avoid using individual classifications for employment decisions. Browser use is free; each automated API item uses the published base price of $0.002.
What you can do with it
Summarize an engagement survey
Turn workplace recommendation ratings into eNPS, category totals, percentages, and auditable classifications.
Build a people analytics trend
Apply the same deterministic calculation to approved response sets across consistent reporting periods.
Audit an HR dashboard
Compare the returned counts and classifications with an existing spreadsheet or survey platform result.
FAQ
Which employee scores are promoters, passives, and detractors?
Scores of 9–10 are promoters, 7–8 are passives, and 0–6 are detractors.
How is eNPS calculated?
Subtract the percentage of detractors from the percentage of promoters. Passives remain in the total response count.
What happens when the response list is empty?
The request returns an invalid input error because eNPS cannot be calculated without responses.
Can responses include decimals or values outside 0–10?
No. Every response must be an integer on the inclusive zero-to-ten scale.
Does this tool protect employee anonymity?
It accepts scores without identities, but your organization must enforce access controls, aggregation thresholds, and privacy policies around source data and reporting.
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/employee-enps-calculate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"responses":[10,9,8,7,6,2]}'const res = await fetch("https://api.kit.forhosting.com/biz/employee-enps-calculate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"responses": [
10,
9,
8,
7,
6,
2
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/employee-enps-calculate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"responses": [
10,
9,
8,
7,
6,
2
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/employee-enps-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,2]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"responses":[10,9,8,7,6,2]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/employee-enps-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,
2
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.employee_enps_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. |