Blog
Do not ask NPS on password reset, cancel, or the error page
A 0-10 recommend question on the reset page, the cancel email, the 404, or the all-hands Slack is not a relationship score. How to keep NPS a product program, and what each of those asks actually measures.
Friday, 14:06. Maya owns NPS at a 40-person invoicing SaaS. This week's headline is -8 (n=41). Last week was +31 (n=19). She opens the feed.
14:02, /reset-password, score 2: "I just needed to get back in." 11:40, /checkout after a 500, score 0: "pay failed, then this box." 09:18, cancel-confirm email, score 1: "I already left." Wednesday 16:22, /settings/invoices, score 4: "CSV export still takes three clicks." Tuesday 17:05, three 10s from #general after all-hands, every email ending @thecompany.com.
Standup is at 14:30. Engineering will get a P1 called NPS collapsed. The invoices comment is the only product sentence in the pile.
The weak version, and what it costs at 14:30
The program that produced that feed looks like this:
One survey, slug product-nps, trigger auto, delay 8,000 ms, every session, including /reset-password, /404, and /checkout.
The same NPS URL pasted into the cancel-confirm email, into the invoices page as a 0-10 on this export, and into #general after all-hands because volume is volume.
CS bonus if weekly NPS is above 40. At 13:50 Alex DMs the customer from ticket #5088: a 9 or 10 helps the team this quarter.
The version that keeps the sample a product sample looks like this:
One relationship NPS, slug product-nps, shown after first value (first invoice sent, first seat invited) with
UserVane.survey("product-nps").Identify at login with plan, role, and
employee: truefor staff. Target the survey at people who are not staff.Post-ticket is CSAT on a hosted link at close. The invoices export is CES, 1-7, after the file downloads. Cancel gets no recommend question. Reset, 404, and failed charge get no widget.
Nobody's bonus is the weekly NPS.
The weak version costs you 14:30. You will spend the weekend on a checkout 500 that the error tracker already had at 11:39, and on a cancel who was gone at 09:18. You will not read the three-click export, because the slide already says the product is dying. Next week, when Alex's DMs land, the number will recover and you will declare the P1 closed.
Password reset, the 404, and the failed charge are not opinions about you
Auto-trigger waits a fixed idle delay, eight seconds unless you change it, then fires on whatever page the person is sitting still on. The classic widget guide is that table. If that page is /reset-password, you measured whether the reset email arrived. If it is the 404, you measured a broken link. If it is checkout after a 500, you measured the outage.
Those are useful facts. They are not NPS. Make the relationship survey manual, and call it after the event you already track as first value. In the widget quickstart that is one line:
UserVane.survey("product-nps")
The open-source SDKs that carry that call live at github.com/uservane/uservane-js. Leave first paint, password reset, and error pages alone. The timing post is the same rule for tickets versus first value.
Cancel is an exit, not a relationship check
The person who confirmed cancel at 09:12 has already spent the decision. A 0-10 recommend question in the goodbye email measures the breakup. You will treat it as product NPS, then you will not know whether the trend moved because onboarding improved or because you started surveying people on the way out.
If you want a last-day reason, ask for it as a comment on the cancel form, in your own product, not as a recommend score mixed into the weekly headline. Do not paste the product NPS URL into the cancel macro because one URL feels simpler. The channel chooser is that decision: a hosted link is an adapter for a moment, not a license to hang the same 0-10 on every email you already send.
A feature page wants effort, not a recommend score
Wednesday's invoices comment was the useful one, and it was asked as the wrong question. A 0-10 recommend on the CSV export is a relationship instrument taped to a task. A 4 on that 0-10 will be filed as a detractor, and someone will start a loyalty workstream about a three-click download.
That moment is CES. UserVane's CES is 1-7, scored as percent who agree it was easy. Ask it after the file downloads, on a manual trigger, as its own survey. The metric chooser is the rule: match the question to the moment. Keep the two surveys separate so a hard export cannot look like the company lost advocates.
Staff in #general are not your customers
The three 10s from Tuesday are why last week's +31 looked like a miracle. They are also why this week's -8 looks like a collapse: the all-hands did not happen, and the remaining 38 answers are the reset, the 500, the cancel, and a handful of actual users.
Identify staff. Put employee: true on the respondent at login, the same way you put plan and role. Target the product NPS at people who are not staff. The traits post is that call. Then do not paste the hosted link into #general, because targeting cannot save a URL that anyone can open.
A bonus on the weekly number produces Alex's 13:50 DM. The customer from ticket #5088 now has a second job: protect a teammate's pay. Their 9 is not an opinion about the product. Stop paying people for the score. Pay them for closing the loop on a named comment.
One program, one question, one clock
Write the program down so the next person does not add a fourth URL in Slack:
- Relationship NPS, manual, after first value, staff excluded.
- Post-ticket CSAT, hosted link, at close, not a recommend question.
- CES on the one workflow you are actually trying to make easier, after the task completes.
- No widget on reset, 404, failed charge, or the cancel email.
- One primary ask per person per window. A quiet period (seven days unless you change it) stops the widget chaining surveys. It does not stop you pasting the same URL into three emails. That is a rule you keep.
Forty-one mixed answers is not a climate. Check the slice you actually intend to quote on the sample size calculator before standup; the older post on why a naked score lies is the decision rule. Read the comments from that slice in the same sitting.
Even a clean NPS is people who reached first value, saw the prompt, and answered. It does not represent the accounts that never sent an invoice, the people who dismissed the widget, or the person who cancelled at 09:18. That is the limit. It does not make the reset-page 0-10 a better sample. It makes you keep the program labeled, so 14:30 is a decision about a product instead of a pile of other people's emergencies.
Bottom line: one relationship NPS, after first value, with staff out of the sample. CSAT for the ticket. CES for the hard workflow. No recommend question on password reset, cancel, the 404, or the all-hands Slack. The number you quote at 14:30 is only as honest as the moments you refused to survey.