WXI™ measures the gap between what customers expected and what they actually got, at the exact moments that matter. Then it asks one question NPS never will: what was the single worst part?
Gap = what they got minus what they expected.
Gap of −4.0 at “delivery arrival”. Worst part, in their words: “the slot said 6pm, it came at 8”You survey customers after every transaction. The scores roll into a dashboard. The dashboard goes into a quarterly review. And nothing changes, because an average of seven across ten thousand responses tells you the temperature of the room and nothing about where the fire is.
You don’t know which moment drove the sixes. You don’t know what the sixes experienced that the eights didn’t. You don’t know what one thing you could fix tomorrow that would actually move the number.
Averages hide the moments that drive churn, complaints, and lost trust. A customer who scores you six and a customer who scores you eight may have hit the same catastrophic moment. Aggregate scores miss it. WXI finds it.
WXI measures each Point of Experience in your customer journey with a before reading and an after reading.
WXI: the gap between before and after sentiment.
Single worst experience → straight to your UX and product teams.
Expectation versus reality, measured in the moment, while the customer remembers it clearly. The theory behind it, expectancy-disconfirmation (Oliver, 1980), has anchored satisfaction research since 1980; WXI is what it looks like when the measurement finally costs one tap.
See what a customer experiences in your app, and how WXI joins the two readings into one gap score.
Question asked at basket:
Takes under two seconds to tap. WXI pairs this reading to the user session in first-party storage without cookies.
Open text is where the truth lives, and it’s also where most tools give up. WXI reads every worst-experience answer as it arrives, flags anything urgent immediately, and groups the rest into stable, named worst moments.
You see the five things hurting your experience most, how each is trending, quotes from your customers’ own answers, and a suggested action for each. Worst moments stay consistent over time, so “checkout confusion” is a trend line you can watch fall after you fix it.
Serious responses, like safety issues or discrimination claims, trigger an alert within seconds.
“Fixing the worst moment in a journey beats marginal improvements everywhere else.”
Sample report with illustrative data
One lightweight script for your website. A REST API for apps and anything custom. QR codes for physical experiences, from hotel stays to service counters.
Define your Points of Experience in the dashboard, copy the snippet, and responses start arriving. No tagging plans and no six-week implementation. Or hand the prompt below to your AI coding agent and let it wire everything up.
Under 10 KB, no third-party calls, no cross-site cookies. Your customers’ answers stay anonymous by default.
Set up WXI (Worst Experience Indicator) in this codebase. WXI measures the gap between what a customer expected and what they actually got at a specific Point of Experience (PoE), then asks one open question: what was the single worst part.
I will give you:
- Publishable capture key: <WXI_PUBLISHABLE_KEY> (looks like wxi_pk_...)
- Point of Experience id: <POE_ID> (a UUID from the WXI dashboard)
Where each reading goes:
- Before the experience (pre): not specified. Find the natural moment in this codebase (where the experience starts) and tell me what you chose.
- After the experience (post): not specified. Find the natural moment in this codebase (where it ends) and tell me what you chose.
Put each call exactly there and nowhere else. If a place above does not exist in this codebase, stop and ask me rather than guessing.
Choose the integration that fits this project:
1) Plain website / HTML
Load the script on the page that asks, with the trigger as attributes on the same tag.
Before the experience (a page placement, opens on page load):
<script src="https://getwxi.com/embed/v1/wxi.js" data-wxi-key="<WXI_PUBLISHABLE_KEY>" data-wxi-poe="<POE_ID>" data-wxi-auto="pre" defer></script>
After the experience (opens on page load, and includes the worst-part question):
<script src="https://getwxi.com/embed/v1/wxi.js" data-wxi-key="<WXI_PUBLISHABLE_KEY>" data-wxi-poe="<POE_ID>" data-wxi-auto="post" defer></script>
Or open it when an element is clicked (an element placement). Load the script once without data-wxi-auto, then add the attributes to that element:
<script src="https://getwxi.com/embed/v1/wxi.js" data-wxi-key="<WXI_PUBLISHABLE_KEY>" defer></script>
<button data-wxi-ask="pre" data-wxi-poe="<POE_ID>">...</button>
Do not call wxi.ask(...) from an inline script that runs while the page is still loading: the script is deferred, so wxi does not exist yet. If you must call it, do so inside a DOMContentLoaded or load handler.
2) React / Next.js (and other single-page apps)
There is no npm package. Use the same hosted script.
a. Load it once in the root layout, never per page:
import Script from 'next/script';
<Script src="https://getwxi.com/embed/v1/wxi.js" data-wxi-key="<WXI_PUBLISHABLE_KEY>" strategy="afterInteractive" />
(In a non-Next React app, add the plain script tag from option 1 to index.html, with defer.)
b. To open on a click, put data-wxi-ask and data-wxi-poe on the element, as in option 1. This needs no component and has no timing issues.
c. To open when a page or screen shows, add a small client component to that page. wxi.js may not have loaded yet, so queue the call instead of calling wxi.ask directly:
'use client';
import { useEffect } from 'react';
type Wxi = { ask?: (poe: string, kind: 'pre' | 'post') => void; q?: [string, 'pre' | 'post'][] };
export function WxiAsk({ kind }: { kind: 'pre' | 'post' }) {
useEffect(() => {
const w = window as unknown as { wxi?: Wxi };
if (w.wxi?.ask) { w.wxi.ask('<POE_ID>', kind); return; }
const wxi = (w.wxi ??= {});
(wxi.q ??= []).push(['<POE_ID>', kind]);
}, [kind]);
return null;
}
Render <WxiAsk kind="pre" /> and <WxiAsk kind="post" /> only on the pages placed above. Do not use data-wxi-auto here: client-side navigation does not re-run a script that is already loaded.
3) Backend / any language (REST), for mobile apps, kiosks or server-side
POST https://getwxi.com/api/v1/responses
Header: X-WXI-Key: <WXI_PUBLISHABLE_KEY>
Pre: { "poe": "<POE_ID>", "kind": "pre", "value": 0-100 }
Post: { "poe": "<POE_ID>", "kind": "post", "value": 0-100, "session": "<from pre>", "worst_text": "..." }
Pairing depends on how this Point of Experience is set up in the WXI dashboard:
session mode: pre responds with "session" (a UUID); send it back as "session" on the post.
token mode: pre responds with "token" and "short_code"; send either back as "token" on the post.
Without that reference the post is still stored, but it cannot be paired with its pre.
value is the 0-100 stored scale. worst_text is accepted on "post" only.
Rules:
- Fire 'pre' before the experience starts and 'post' after it ends. In the browser integrations the pre and post must run on the same site origin (the same scheme and host, so www and non-www count as different), because WXI keeps the pairing reference in that origin's localStorage.
- Never collect names, emails, or any PII. WXI is anonymous by design.
- Treat every WXI call as fire-and-forget: never block or delay the user's own flow on it.
When done, tell me which integration you used and where you placed each call, quoting the file and line.The same measurement works across a checkout flow, an onboarding sequence, a restaurant visit, or a hospital appointment. Digital journeys pair the before and after automatically. Physical experiences use paired QR codes, one at the start, one at the end. Same score, same report.
WXI is self-serve from day one. For teams that want measurement designed, run, and interpreted for them, Acoustic offers WXI as a managed service: journey mapping, Point of Experience design, setup, and a standing brief of what to fix next. When you’re ready to take over, the workspace transfers to you, history intact.
Talk to usStart your 30-day free trial on the moment that worries you most. Open the pricing page.
WXI is for teams that want to know what’s actually broken. If you’d rather have a reassuring number, keep your NPS dashboard.