Skip to main content
Card class: HeroCategory: Monitoring
Sessions where load >4s or rage-click detected, proxy for conversion drop.

At a glance

The percentage of real-user sessions Datadog flags as “frustrated”: sessions where page load exceeded 4 seconds, or where a rage-click pattern was detected (3+ clicks within 1 second on the same element), or where an unrecoverable JavaScript error fired in the user’s browser. For a merchant, this is “out of every 100 actual shoppers, how many had a measurably bad time?” Above 5 percent is the threshold where the bad experience starts dragging conversion rate by a measurable amount.
API endpointDatadog RUM API, GET /api/v2/rum/analytics/aggregate with @session.frustration_count > 0 filter, divided by total sessions.
Metric basisDatadog RUM session-level frustration signals. A session is frustrated if it contains any of: (1) dead_click (click that did nothing visible), (2) rage_click (3+ clicks within 1 second on the same element), (3) error_click (click followed by a JS error within 100ms), (4) page load p95 > 4 seconds, (5) any unrecoverable JS error.
Aggregation window5-minute rollup at source; the card displays the rolling 7-day frustrated-session percentage.
Severity thresholdP1 = above 10% (severe UX degradation, conversion-impacting); P2 = above 5% (alert trigger, customer experience degraded); P3 = above 3% (worth investigating). Below 3% is healthy noise floor for typical ecommerce.
Alert pre-filtering(1) Bot traffic (@session.is_bot:true) excluded; (2) Internal IPs and synthetic test sessions excluded; (3) Sessions under 5 seconds total duration excluded (likely bounces from misclicks, not real frustration).
Filtered hosts / servicesAll RUM-instrumented services. RUM must be enabled on the storefront (Datadog browser SDK) for this card to return values.
Time zoneAccount timezone for chart axes; UTC for cross-connector windowing.
Why this is the merchant-meaningful UX cardAPM measures what the server saw; RUM measures what the shopper actually experienced. A session can complete with zero server-side errors and still be frustrating: slow third-party scripts, layout shifts that move buttons mid-click, JS that throws on the user’s specific browser version. This card surfaces the shopper-side experience APM cannot see.
Time window7D (rolling 7 days)
Alert trigger>5% of sessions frustrated, sustained for 24 hours pages on-call.
Rolesowner, marketing, engineering

Calculation

Calculated automatically from your Datadog data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A UK fashion brand on Shopify with Datadog RUM enabled across the storefront, PDP, cart, and checkout pages. Snapshot taken on 28 Apr 26 at 14:00 GMT for the trailing 7 days (21 Apr to 27 Apr).
Page typeSessionsFrustrated sessionsFrustrated %Top frustration signal
Homepage142,8004,1402.9%Page load p95 (4.2s)
Category / collection98,4003,6403.7%Page load p95 (4.6s)
Product detail (PDP)187,60011,2606.0%Rage-click on out-of-stock variant selector
Cart41,2001,0302.5%Page load p95 (3.8s)
Checkout22,4002,46011.0%JS error on address autocomplete
Aggregate (this card)492,40022,5304.6%mixed
The card reads 4.6 percent on the dial; the alert at >5% is just under the trip line, but the per-page breakdown reveals the real story: checkout sessions are 11 percent frustrated, more than 2x the aggregate. Three things the merchant should read:
  1. Checkout is the single page that costs revenue. A frustrated session on the homepage is annoying; a frustrated session on checkout is a direct revenue leak. 2,460 of 22,400 checkout sessions threw the address-autocomplete JS error; if the typical conversion rate from cart to purchase is 65 percent, those frustrated sessions converted at roughly 30 percent (52 percent relative drop). At AOV GBP 58 and the brand’s typical mix, that is approximately GBP 28,000 of lost revenue over the 7 days.
  2. The PDP rage-click signal is product-data, not engineering. Shoppers rage-clicking the variant selector typically means an out-of-stock variant looks selectable but throws on add-to-cart. The fix is updating the storefront theme to grey out OOS variants, not optimising rendering. Pair with Top Slow Endpoints only if rage-clicks correlate with slow API responses; here they do not.
  3. Page load p95 is the structural driver across other pages. Homepage at 4.2s, category at 4.6s, cart at 3.8s. None individually triggers the 5 percent alert but together they dragged the aggregate up from a typical 3.5 percent baseline. The cause is likely third-party script load order; pair with Page Load p95 (RUM) for the diagnostic.
Triage sequence the merchant should follow:
  1. 14:00, Open this card; identify checkout 11% as the priority
  2. 14:05, Open RUM session-replay for 5 frustrated checkout sessions
  3. 14:15, Find: address-autocomplete library version mismatch on Safari 17.4
  4. 14:30, Coordinate hotfix; deploy SDK update
  5. 16:00, Frustrated % on checkout drops from 11% to 3.2%
  6. Total revenue recovered over 24h: ~GBP 4,000
Three takeaways merchants should remember:
  1. The aggregate is meaningless without the per-page breakdown. A 4.6 percent aggregate looks fine; 11 percent on checkout alone is a crisis. Always read the page-type split.
  2. Frustrated sessions correlate with conversion drops at roughly 1:0.5 to 1:1. Every 1 percentage point increase in frustrated sessions on revenue-bearing pages typically costs 0.5 to 1 percentage point of conversion. The math is calibrated against post-incident measured loss across Vortex IQ merchants.
  3. The 4-second page-load floor is calibrated, not arbitrary. Industry research (Datadog, Google, Akamai) consistently finds 4 seconds is the threshold above which most shoppers abandon. Below 4s, frustration signals come from rage-clicks and JS errors rather than from raw speed.

Sibling cards merchants should reference together

CardWhy pair it with Frustrated User SessionsWhat the combination tells you
Page Load p95 (RUM)The most common driver of frustrated sessions.Frustrated % above 5% AND page load p95 above 4s = speed is the cause; address by optimising assets, third-party scripts, CDN.
JavaScript Errors (RUM)The other common driver.Frustrated % up AND JS errors up = code regression on a specific browser or device; open RUM session replay to identify.
Slowest Pages (RUM)The page-by-page breakdown.Identifies which page concentrates frustrated sessions; checkout-heavy concentration is the highest-priority case.
Mobile vs Desktop (RUM)The device split.Frustrated % significantly higher on mobile = mobile-specific issue (touch targets, viewport, mobile JS); desktop-only = different root cause.
Apdex ScoreThe server-side perception cousin.RUM frustrated % up + Apdex steady = problem is browser-side (third-party scripts, client JS); both up = full-stack issue.
Operational Health ScoreThe composite engineering view.Composite green + RUM frustrated red = “Datadog APM does not see what shoppers see”; the most common Datadog blind spot.
Critical-Path Tests StatusSynthetic counterpart.Synthetic green + RUM frustrated red = real shoppers’ devices/networks fail where bot tests pass; usually third-party script issues.
5xx Response RateServer-side error proxy.Both red = real outage; RUM only = browser-side (extensions, ad-blockers, version-specific JS).
Cross-connector: shopify.ecommerce_conversion_rateThe downstream impact metric.Sustained Frustrated % above 6% typically corresponds to a 5 to 15% relative conversion drop; reconcile against revenue.
Cross-connector: google_analytics.ga_bounce_rateThe browser-side bounce metric.Frustrated % up + bounce rate up = shoppers leaving from frustration; same root cause likely.

Reconciling against the vendor’s own dashboard

Where to look in Datadog: Datadog Dashboard → RUM → Sessions → filter @session.frustration_count > 0. Group by @view.url_path for the per-page breakdown the worked-example table uses. Datadog also exposes a Frustration Signals sub-tab under each application in the RUM Explorer; closest like-for-like view is Last 7 Days, All Browsers, All Devices. For session-level diagnosis, click into any frustrated session to launch session replay; this is the highest-leverage tool when the card alerts. Most frustration patterns become obvious within 5 to 10 replayed sessions. Why our number may legitimately differ from Datadog’s portal:
ReasonDirectionWhy
Bot exclusion logicEitherBoth we and Datadog exclude obvious bots, but the heuristics differ slightly. Datadog uses User-Agent matching against a public bot-list; we additionally exclude sessions tagged by your CDN’s bot-detection (Cloudflare Bot Score, Akamai Bot Manager) if that tag is propagated to RUM. The card’s count is typically 1 to 3 percent lower as a result.
Sampling rateEitherDatadog RUM uses session sampling (typical 10 to 100 percent depending on plan). The card honours whatever sampling rate the merchant configured; both numbers are scaled identically, so percentages match even when absolute session counts differ.
Sub-5-second sessions excludedOurs lowerWe exclude sessions under 5 seconds total duration (likely bounces from misclicks, not real frustration). Datadog’s default RUM Sessions view includes them, which inflates the denominator and depresses the percentage. Filter @session.duration > 5s in the portal to match.
Frustration signal weightingTinyDatadog counts a session as frustrated if any one frustration signal fires. We do the same. A small handful of edge cases (e.g. session with 1 dead-click but 0 other signals on a 30-minute browsing session) get bucketed differently when the signal definitions update.
Time zoneBoundary daysDatadog uses account timezone for daily aggregation; we use UTC for cross-connector arithmetic. The 7-day window absorbs this.
Sync timing on most recent 1 to 2hOurs lower brieflyRUM events stream in continuously but the card aggregates on a 1-hour cycle; the portal updates every minute. Same-day numbers can differ by 0.1 to 0.3 points.
Internal identity (within Datadog): This card relates to RUM-pageload and RUM-error cards by an OR-gate identity: dd.rum_frustrated_users ⊇ (dd.rum_page_load_p95 > 4s) ∪ (dd.rum_js_errors > 0 per session) ∪ (rage_click ∪ dead_click ∪ error_click) A session can be frustrated for multiple reasons simultaneously; the card counts each session once even if multiple signals fire. The identity is “is included in”, not equality. Cross-connector reconciliation. Google Analytics 4 vs Datadog RUM: GA4 reports bounce_rate and engagement_rate as adjacent shopper-experience metrics. They are NOT reconciliable with Frustrated %:
  • GA4 bounce rate = sessions with no qualifying engagement event (typically <10s engagement). It captures a different shopper behaviour than frustrated sessions.
  • A bounced session is often unfrustrated (the shopper just was not interested); a frustrated session is often un-bounced (the shopper tried hard, failed, and was angry about it).
  • Treat both as inputs to the broader UX picture; do not expect them to move in lockstep.

Known limitations / merchant FAQs

Why is my Frustrated % spiking? Three usual causes, in order of likelihood:
  1. A recent storefront deploy or third-party-script change. New theme version, new chat widget, new review app, new A/B-test SDK. Each adds JS, often poorly, and the slowest 5 to 15 percent of users feel it as frustrated sessions. Pair with Deploy Markers vs Latency.
  2. A specific browser or device version regression. A library update broke on Safari 17.4 mobile; a CSS change reflows on iOS 16; a React component throws on Chrome on Android. RUM session-replay reveals these in 5 to 10 sessions.
  3. CDN or third-party script outage. Your stripe.js, klarna.js, klaviyo.js, or chat-widget host throttles or fails on a specific region; sessions that depend on it become frustrated.
Action: open RUM session replay first. Five frustrated sessions usually expose the cause. Then pair the cause with the right diagnostic card. My Frustrated % is 4.6 percent. Is that bad? Marginal. Healthy ecommerce sites sit at 2 to 4 percent steady-state. 4.6 percent is amber: not an emergency but an early signal. Most sites that hit 4.6 percent and ignore it find themselves at 6 to 8 percent within 30 days because the underlying causes (third-party script bloat, deferred bug fixes) compound. How can I reduce Frustrated %? Five practical levers, in rough order of impact:
  1. Audit third-party scripts quarterly. Ad pixels, chat widgets, A/B SDKs, review widgets, recommendation engines. Each one adds latency and JS-error surface area; collectively they typically cause 50 to 70 percent of merchant frustrated sessions. Disable or defer everything not earning revenue.
  2. Optimise the checkout page above all others. Frustrated sessions on checkout are 2 to 5x more revenue-impacting than frustrated sessions elsewhere. Even a small reduction here pays back fastest.
  3. Use Datadog RUM session replay for top-frustrated session patterns. Watch the actual user behaviour; pattern-match across 5 to 10 sessions to find the common UX failure mode.
  4. Test on real devices, not just desktop Chrome dev tools. Most frustrated sessions cluster on mobile Safari, mid-tier Android, and edge browser versions. Set up BrowserStack or LambdaTest checks in CI.
  5. Mute non-revenue pages from the headline. The card includes admin pages, B2B portals, account self-service. If non-customer pages skew the headline, filter them out at the connector tag level.
Why does my daily Frustrated % swing so much? Volume sensitivity, plus session-clustering. A single bad deploy at 14:00 affects every shopper for the next 30 minutes; that batch can shift daily Frustrated % by 1 to 3 points. Also: traffic-source mix shift. Paid traffic from emails arrives in concentrated bursts; if the email landing page has a script issue, the burst spikes the metric. My Frustrated % is high but conversion is steady. What does that mean? Two possibilities. (1) Frustration is concentrated on non-revenue pages (e.g. blog, account settings) where shoppers tolerate it; (2) the frustration affects a population of shoppers who would not have converted anyway. Open the per-page breakdown (Slowest Pages) to confirm; if checkout is healthy, frustration on other pages is lower priority. Should the alert threshold be 5 percent for everyone? No. The 5 percent default is calibrated for typical mid-market DTC ecommerce. Premium/luxury brands with low-volume high-value sessions need tighter thresholds (3 percent) because each lost session costs more. Mass-market high-volume brands tolerate higher thresholds (7 to 8 percent) because the population is more heterogeneous and frustrated outliers are more common. Tune in Settings → Datadog → Frustrated-Sessions Threshold per workspace. My ad-blocker share is 25 percent. Does that affect this card? Yes, structurally. RUM SDK scripts are blocked by uBlock Origin and similar extensions on roughly 10 to 25 percent of UK / German / Dutch shoppers. Those sessions are invisible to RUM, so they cannot count as frustrated in this card. The blind spot tilts the card toward less-blocking populations (US users, mobile users); cross-reference with server-side metrics (Apdex Score) for a fuller picture. Does cookie consent / GDPR rejection affect this number? Yes. Customers who reject analytics cookies are not measured by RUM. The card represents the cookie-accepted population only; for sites with low cookie-accept rates (e.g. EU markets at 60 to 70 percent acceptance), the card under-samples. Treat the percentage as directionally accurate but absolute counts as lower bounds. When does today’s Frustrated % swing most? Mid-day GMT for UK / EU brands; afternoon EST for US brands. The morning’s traffic is mostly direct returners; afternoon traffic is more paid-acquisition heavy and skews younger / mobile, which tends to surface different frustration patterns. Use 24-hour-old readings for stable trend; same-day for triage. Should I act on a 1-day spike or wait for the rolling 7-day to confirm? For checkout-page frustration, act immediately on a 1-day spike (revenue is at risk now). For non-checkout, wait for 3 to 5 days of sustained elevation before retrofitting. The card defaults to 7-day rolling for the same reason: noise reduction on non-urgent pages.

Tracked live in Vortex IQ Nerve Centre

Frustrated User Sessions is one of hundreds of KPI pulses Vortex IQ tracks across Datadog and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.