Customer value

Send what each user pays from your server, and every theme, user and alert shows the money behind it.

Customer value puts money on feedback. Tell Sentriment which identity trait holds what a user pays, and every theme, Ask answer, user profile and at-risk alert shows the value behind it. “Dark mode” and “billing is broken” stop looking equally important.

Until it is configured, Sentriment shows no money anywhere.

The one setting

#

Customer value is a single field under Settings → Customer value, with four parts:

ParameterInDescription
traitrequiredsettingsThe identity trait that holds the amount, e.g. mrr. deal_value is reserved for the sales-pipeline figure and cannot be used.
labelrequiredsettingsHow the amount reads after the number: MRR, ARR, order value. Up to 24 characters. It also names the sort, e.g. by MRR.
currencyrequiredsettingsAn ISO 4217 code such as EUR, USD or GBP. Every amount you send is read in this currency.
periodrequiredsettingsmonth, year or once. A monthly or yearly value can stop being paid; a one-off order value cannot.

Nothing else is needed. There is no churn flag to maintain: stopping paying is derived from the value itself (see below).

Send the value from your server

#

Send the amount as a trait on identify, called with a secret key from your backend:

A user paying €99 a month
curl -X POST https://app.sentriment.com/api/v1/users/identify \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "userId": "usr_123", "traits": { "plan": "pro", "mrr": 99 } }'
  • Major units: euros, not cents. 99 means €99 when the currency is EUR.
  • The configured period, for every user. If the setting says month, convert yearly plans to their monthly amount before sending.
  • A plain number: a JSON number, or a string such as "99.50". Negatives, separators, exponents and symbols ("1,200", "€99") are refused with a 422 that names the trait, and nothing is written.
  • Send it before or after configuring. Sentriment records every numeric trait your server sends, so a value sent last month counts the day you turn the setting on, and switching from mrr to arr later keeps working.

A browser can never set the value

The widget and any call made with a public key can still send traits for segments, but they cannot create, change or remove the customer value. Identify with a public key drops the configured trait and returns a warning instead. Only your server, with a secret key, decides what a user pays.

What you see

#

Every figure is qualified with what it measures and the number of users behind it. With a monthly value labelled MRR in euros:

Themes themes list · theme page

€4,180 MRR behind this theme · 12 paying users

The current value of the users behind the theme who pay now. The themes list sorts by MRR.

Stopped paying theme page

€1,090 MRR lost · 3 stopped paying after reporting

The last paid value of the users behind the theme who stopped paying, next to the rate described below.

Ask Ask answers

€2,310 MRR · 8 paying users

The same figures for the feedback that matched your question, kept with the currency, label and period of the day it ran.

Requests requests page

€1,420 MRR · 6 paying users

The value behind each feature request, counted the same way as a theme.

Overview spike cards

€860 MRR behind this theme · 4 paying users

On a theme that is spiking, the value of the users behind it, so a spike among paying customers stands out.

Users users list · profile

€99 MRR

Or “Stopped paying · 12 Sep · was €29 MRR”, or “No paid value”. No line at all when the value is unknown. The users list sorts by MRR, and the at-risk count shows the value behind the users in it.

At-risk alerts Slack · email · Alerts page

€290 MRR

Shown only when the user pays now. Health decides who is at risk; the value never gates or ranks an alert.

The value stays out of issues filed to GitHub or Linear, since a public repository would publish it. The configured trait is also left out of segment breakdowns.

What “stopped paying” means

#

A user stopped paying when their value goes to 0 after Sentriment recorded a positive value for them. Only values your server sends with a secret key count; the widget cannot set or change them. Nothing has to be flagged: send the new value when it changes.

  • A cancellation, a downgrade to a free plan or a pause, sent as 0, counts.
  • A smaller positive value (249 to 99) is still paying. Contraction is not tracked.
  • Removing the trait, or sending null, does not count. null from your server erases the recorded value and its history, and the user's value becomes unknown. To record a stop, send 0.
  • A user first seen at 0 has not paid yet. Only a 0 that follows a recorded positive value is a stop.
  • A user who pays again is paying again: the positive value clears the stop.
  • Tracking starts when a positive value is first recorded. Sending the same 0 again does not move the date.

One user over a year, as your server sends it and as the profile shows it:

3 Mar

mrr: 0

No paid value

Signed up on the free plan: known, but has never paid.

10 Mar

mrr: 99

€99 MRR

Upgraded. From here on they count as paying.

2 May

mrr: 249

€249 MRR

Moved to a bigger plan. Still the same paying stretch.

12 Sep

mrr: 0

Stopped paying · 12 Sep · was €249 MRR

Cancelled. The stop is dated when the 0 arrives.

20 Oct

mrr: 99

€99 MRR

Came back. The stop clears and a new paying stretch starts.

A theme counts a user as having stopped paying after reporting when the stop is at most 14 days before their first feedback in that theme, or any time after. A cancellation survey written just before the cancellation still counts. Imported feedback (CSV and connector history) is dated by its original date, not by the day you imported it.

Recording a past cancellation

Sentriment only knows what your server has sent. To record a customer who already left, send the last value they paid, then 0. The stop is dated when the 0 arrives.

The rate, and when it is withheld

#

Next to the money, a monthly or yearly value shows how often the users behind a theme stopped paying, and compares it with everyone else:

  • Who counts: the users behind the theme who were paying when they reported, dated by their first feedback in the theme.
  • The rate: how many of them stopped paying after reporting, divided by that count.
  • Compared with: the same rate across every identified user with feedback, each dated by their first feedback anywhere.

“Paying when they reported” means Sentriment had a positive value for them that started before the report and had not already stopped by then. A user first seen at 0 who upgrades after reporting, one who had stopped and comes back later, and one who had stopped more than 14 days before reporting did not pay when they reported and are left out. A user whose first recorded value was already positive counts as paying since before any report, because when they started is unknown.

For example, 8 users behind “Pricing · per-seat cost too high” were paying when they reported, and 2 of them have stopped paying since: 25%. Across all 22 users who were paying when they gave feedback, the same 2 stopped: 9%. The theme page reads “2 of 8 who paid when they reported stopped paying (25%)” and “2.8× the rate across all users”.

Small numbers make rates meaningless, so the comparison is withheld unless the theme has at least 5 users who were paying when they reported, the baseline has at least 20, and the baseline rate is above zero. A theme where nobody has stopped paying shows no comparison either, since zero against the baseline says nothing the counts do not. The counts are always shown next to the rate.

A saved Ask answer drops an amount when fewer than 5 users are behind it, so a stored figure can never single out one person's value.

One-off values

#

With period once, the value is what a customer spent, such as an order value. Themes read “€4,180 order value behind this theme · 12 customers”. A one-off purchase cannot stop, so there is no stopped paying, no “lost” figure and no rate.

B2B and seats

#

The value is per user, and sums add up users. If every seat of a €900 MRR account carries mrr: 900, a theme reported by three of its seats shows €2,700. Two ways to handle it:

  • Send the account's value on one seat, such as the owner or billing contact, and nothing on the others. If other seats already carry the value, clear it with null, not 0: a seat that goes from a positive value to 0 counts as having stopped paying.
  • Accept per-seat sums as a measure of reach. The count next to every figure (“N paying users”, or “N customers” for a one-off value) shows how many seats are behind it.

Pipeline is a separate figure

Deal value from sales calls is a separate, future setting on the reserved deal_value trait. It is shown beside customer value and never added to it.

Changing or turning it off

#
  • Change the trait, label or period at any time. Themes, users and new alerts switch at once, and nothing your server sent is lost: values are recorded for every numeric trait, so switching from mrr to arr needs no re-send. Saved Ask answers keep the currency, label and period they were taken with.
  • Change the currency only to match what your server sends. Amounts are never converted: every value is read in the currency the setting names.
  • Turn it off from the same form. Money disappears from every theme, user, Ask answer and the alert history on the Alerts page. Nothing is deleted: the values your server sent are kept, and turning it on again brings everything back. Alerts already delivered to Slack or email are not recalled.

When no money shows

#

If a theme or a user shows no value, check these in order:

  1. Customer value is set up under Settings → Customer value.
  2. The users are identified. Feedback must carry the same userId you send to identify. A theme whose feedback is all anonymous has no one to put money on, and the theme page says so.
  3. The value comes from your server with a secret key. A value in the widget's data-traits or from a public key is dropped: the widget logs a [Sentriment] warning in the browser console, and a direct call returns the warning in its response.
  4. The value is a plain number in major units. Once the trait is configured, "€99" or "1,200" is refused with a 422 that names the trait; before that, it is kept as a plain trait and never becomes money.
  5. The user pays now. A theme's figure adds up users whose current value is above 0; a user who stopped paying after reporting is counted under stopped paying instead, and one who had already left before reporting is in neither figure.

Settings → Customer value shows how many users your server has sent the trait for, and how many of them pay now.

Was this page helpful?