Integration · Customer success
How to build an NPS and survey to CRM sync
A detractor writes a paragraph explaining exactly why they are leaving, and it sits in a survey tool nobody opens. This is the design behind responses reaching the account team, the prompts that build it, and what production adds.
Built with Tray Headless
- System Qualtrics
- Step Match to person
- Step Fatigue check
- Step Route detractors
- System Salesforce
A detractor is routed within the hour with the verbatim attached, and fatigue rules stop the same person being asked twice.
The short answer
What is a survey to CRM sync?
A survey to CRM sync breaks into four parts: matching a response to both the person and the account instead of one of them, routing detractors within the hour instead of in a monthly report, fatigue rules that stop the same people being surveyed repeatedly, and the verbatim travelling with the score. The mistake that costs most is the verbatim. A number tells you there is a problem and the sentence tells you what it is, and the sentence is what almost never reaches the account team.
What matters here
- Send the verbatim, not just the score. The number says there is a problem and the sentence says what it is.
- Route a detractor within the hour. A complaint answered the same day is a save; the same complaint in a monthly report is a churn post-mortem.
- Match to the person as well as the account. Who said it changes what it means, especially if it was the champion.
- Enforce fatigue rules. Surveying somebody three times a quarter reduces your response rate and annoys the people who reply.
- Track whether detractor follow-up actually happened. The routing is worthless if nobody acts on it.
Who this is for
You run customer success or marketing operations. Surveys go out, scores get reported quarterly, and the individual responses that would have changed something are read by nobody.
How it works in practice
What happens between somebody answering a survey and anybody acting on it.
- 1
Fatigue is checked before the invitation goes
Recently surveyed, recently responded, or in an open escalation. Asking then is worse than not asking.
- 2
The response is matched to a person and an account
Both, because a detractor who is the champion is a different situation from one who is an occasional user.
- 3
The verbatim travels with the score
A paragraph explaining why is worth more than the number it accompanies.
- 4
Detractors route within the hour
To the account owner with the response attached, not into a monthly summary.
- 5
Promoters route somewhere useful too
A reference request or a review, which is the return most survey programmes never collect.
- 6
Follow-up is tracked to an outcome
Whether somebody actually responded to the detractor, because routing without follow-up is theatre.
What the sync is made of
Four parts, and the second is where the value actually is.
Person and account matching
Both, keyed on an id instead of an email, so a job change does not orphan the history.
Verbatim with the score
The free text carried onto the record, because that is the part somebody can act on.
Fast detractor routing
Within the hour, to a named person. The half life of a useful response to a complaint is about a day.
Fatigue rules
Who was asked, when, and what else is happening on their account. Over-surveying is how a programme dies quietly.
The Tray Headless prompts
Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.
Once per project, run
/tray-workflows:set-workspace
to pick the workspace these build in. Point it at a sandbox first.
- 1
Set up, then decide who should not be asked
Fatigue rules protect the response rate, which protects everything else.
Headless skills
build-workflowUse build-workflow. The systems in play are Qualtrics and Salesforce, or whatever we run in those seats. I need the survey and response model with the contact identifier used, and from Salesforce the contact, account, open cases and any escalation. Then build the suppression list before anything else: anybody surveyed in the last quarter, anybody who responded in the last two, anybody on an account with an open severity one, and anybody who asked not to be contacted. Over-surveying is how a programme quietly dies. The response rate falls, the sample skews to the annoyed, and the score stops meaning anything.
- 2
Match to the person and the account
Who said it changes what it means.
Headless skills
build-workflowUse build-workflow. Match every response to both a contact and an account. Key on the contact id carried in the invitation, not on the email address. People change email and an email-keyed match silently breaks the history for exactly the long-tenured contacts you most want to track. Where a response arrives anonymous or unmatched, keep it, count it in the aggregate, and flag it as unattributed rather than discarding it. Write to the contact: score, date, verbatim. Write to the account: latest score, trend across the last three, and the count of detractors among its contacts. That last field is the one worth looking at, because one detractor is a person and four is an account.
- 3
Route detractors within the hour, with the words
The half life of a useful response to a complaint is about a day.
Route any detractor immediately, not in a digest. Send the account owner and the customer success manager: the score, the full verbatim, who said it and their role, the account context, and any open support tickets. Include the verbatim in the message itself. Not a link to a dashboard. The paragraph is the reason to act and putting it behind a click means it does not get read. Create a follow-up task with a due date. Then track whether it was actually completed, because routing without follow-up is a workflow that makes everybody feel efficient and changes nothing.
If the detractor is the named champion on a renewing account, that should page somebody instead of create a task.
- 4
Do something with promoters too
The return most survey programmes never collect.
Headless skills
tray-gotchasUse tray-gotchas, then handle promoters deliberately: Promoters on accounts with no reference on file go to a reference request, throttled so the same person is never asked twice a year Promoters after a support interaction go to a review request A promoter who is a new champion on an account whose previous champion left is worth telling the account team about Handle the awkward cases: a promoter on an account that is churning anyway, which usually means you surveyed the wrong person, and a detractor whose complaint is about pricing, which is a commercial conversation instead of a support one and should route accordingly.
- 5
Report the things that change behaviour
A quarterly average changes nothing on its own.
Report: score and trend by segment, product area and tenure; response rate and whether it is falling, which is the health of the programme itself; detractor follow-up completion rate; and churn among detractors against churn among everybody else. That last comparison is what tells you whether the survey predicts anything. If detractors churn at the same rate as everybody else, the question is wrong or the sample is. Do not report the company-wide average as the headline. It moves slowly, it hides every segment that is struggling, and nobody has ever acted on it.
- 6
Validate, then hand the rules over
Because who gets asked and how often is a relationship decision.
Run the per-step schema checks and the whole-workflow audit before this touches production. Then open the same workflow in Tray Build so customer success operations can adjust the fatigue windows, the detractor routing and the promoter paths in the visual canvas.
What it connects to
Responses arrive in one tool and have to reach the people who own the relationship.
Qualtrics
Read responses with their scores and verbatims, and write back suppression so the same person is not re-invited.
Reads and writes
Salesforce
Match to contact and account, write the score, trend, verbatim and detractor count, and create the follow-up task.
Reads and writes
Slack
Route a detractor within the hour with the verbatim in the message, not behind a dashboard link.
Writes
Zendesk
Read open tickets, because a detractor with a live support case is one story and a detractor with none is another.
Reads
Snowflake
Land responses with their outcomes, so churn among detractors is measurable against everybody else.
Writes
Same build, other stacks
The design does not change if you run something else in one of these seats. The same prompts build it against Microsoft Dynamics 365, Google BigQuery, Microsoft Teams, Jira, HubSpot or Databricks.
Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.
Running it in production
This carries customer words to the people who can act on them. Speed and attribution both matter.
It runs where production runs, not on a laptop
Responses arrive unpredictably, including at weekends, and detractor routing runs on the same engine rather than a job somebody scheduled.
Every response keeps its attribution
Person, account, survey and timestamp, with the verbatim intact. A quoted complaint that cannot be traced to a person is not usable.
Credentials are managed, never in code
The survey credential exposes unedited customer opinion about your company. Held in your workspace and scoped to the surveys involved.
Customer success owns the fatigue rules
Send windows, detractor routing and promoter follow-up open in Tray Build, tuned by customer success as response patterns change.
Follow-up is tracked, not assumed
Completion rate on detractor tasks reported. Routing without follow-up is a workflow that changes nothing and looks busy.
Questions people ask
Why send the verbatim rather than the score?
Because the number says there is a problem and the sentence says what it is. The paragraph a detractor wrote is the actionable part, and it is the part that almost never leaves the survey tool.
How fast should a detractor be routed?
Within the hour. A complaint answered the same day is often a save; the same complaint surfacing in a monthly report is material for a churn post-mortem.
Why match on contact id instead of email?
Because people change email addresses, and an email-keyed match silently breaks the history for exactly the long-tenured contacts whose trend you most want to see.
Why do fatigue rules matter?
Because over-surveying drops the response rate and skews the sample toward people who are annoyed. At that point the score stops measuring satisfaction and starts measuring irritation.
What should be reported?
Churn among detractors against churn among everybody else. If they are the same, the survey predicts nothing, and no amount of reporting the company average will reveal that.
Vibe-coding app guides
Vibe-code an entire app with Helix
This moves the data between systems. It does not give anybody a screen to work in. Build that app in Claude Code, Codex or Cursor, then deploy and run it governed on Tray Helix. Same kind of guide, same kind of prompts.
How to build a support performance dashboard (opens helix.tray.ai in a new tab)
Further reading
Background on the same subject, for the case rather than the build.
Related guides
Customer success
How to build customer health signals
Weight the signals that predict churn, keep the categories visible instead of one number, and back-test before anybody trusts it. The prompts that build it.
Customer success
How to build support ticket routing
Route on the skill needed and the account, not on who is free. Derive priority from contract and impact, and time the clock from the customer. The prompts.
Last reviewed September 2026.