Pulse surveys + eNPS
Lightweight, recurring engagement check-ins. Anonymous by design — responses cannot be traced back to a specific employee, and per-department breakdowns are suppressed below 5 responses so individuals can't be inferred from small groups.
What HR sees
- Go to HR operations → Pulse surveys.
- Click New survey — title + cadence (Weekly / Bi-weekly / Monthly / Quarterly / Ad-hoc). Defaults include eNPS + 3 questions.
- Click Launch run → pick survey + close-in days. Each active employee gets a unique invite URL in their inbox.
- Track on the Runs tab — response rate + status + eNPS score.
- Click Results on any run for per-question averages + per-department breakdown (≥5 responses required).
- Click Close to finalize a run early — final eNPS is computed and locked.
What employees see
- Notification in their inbox: "Quick pulse — your feedback (anonymous)".
- Click the link → opens
/pulse/<token>. No login required. - Rate eNPS on 0-10 scale, answer 1-5 questions, optional free comment.
- Submit → confirmation page. Each invite link works exactly once.
Anonymity model
- Each (run × employee) gets a random token. The server keeps employeeId on the
PulseTokenrow so HR can resend reminders. - Submit-time: the response is stored against
anonHash = SHA-256(token + companyId + secret-salt). One-way — no employeeId onPulseResponse. - The token is marked consumed (prevents double-submit) but the link between the response and the employee is gone.
- Department snapshot is captured for breakdowns, but is never joined back to a specific employee row.
- Free-text comments and per-department results are suppressed until N ≥ 5 responses in that group — protects small teams from being identifiable.
eNPS calculation
- Promoters = responses rating 9 or 10.
- Detractors = responses rating 0 through 6.
- Score = (Promoters − Detractors) / Total × 100. Range: −100 to +100.
- Computed automatically on close. Suppressed until at least 5 ENPS ratings are submitted.
Tips
- Keep surveys short — 3-5 questions. Higher response rates mean better signal.
- Run monthly. Quarterly is too slow to act on; weekly causes fatigue.
- Always include the free-comment box. The text suggestions are often more actionable than the numbers.
- If a small team consistently sees "suppressed" results, broaden audience or merge departments for the breakdown view.
Endpoint reference (for integrators)
- GET /api/companies/:c/pulse/surveys
- POST /api/companies/:c/pulse/surveys
- PATCH /api/companies/:c/pulse/surveys/:id
- GET /api/companies/:c/pulse/runs
- POST /api/companies/:c/pulse/runs/launch
- POST /api/companies/:c/pulse/runs/:id/close
- GET /api/companies/:c/pulse/runs/:id/results
- GET /api/public/pulse/:token (no auth)
- POST /api/public/pulse/:token/submit (no auth)