Introduction
The rage click count went up in the Clarity dashboard. There are dead clicks on the checkout page. Excessive scrolling signals are flashing red.
So, were those users really lost?
Most Clarity guides on LinkedIn stop right here: “You saw a rage click, go fix it.” But not every user who rage clicks abandons. Some of them complete the purchase despite all that friction. And this “frustrated but converted” segment is in fact the riskiest and the most valuable one.
In this post I will cover how I separate the frustrated buyer segment by cross-analyzing Clarity frustration signals against GA4 BigQuery data and detecting patterns with an LLM. This analysis cannot be done with a single tool, so I will lay out a workflow that combines three layers.
For a broader evaluation of AI/ML integration and data fusion architecture across behavioral analytics tools, see the behavioral analytics and AI/ML guide.
What Clarity Shows and What It Cannot
Microsoft Clarity is a strong tool offering free, unlimited session recording and heatmaps. It detects frustration signals (rage click, dead click, excessive scrolling, quick backs) automatically, summarizes 250 sessions at once with Copilot, and sets up event tracking without code through Smart Events.1
However, Clarity has structural limits, and trying to build a pipeline without knowing them costs serious time:
| Feature | What Clarity offers | What Clarity cannot offer |
|---|---|---|
| Frustration detection | Rage click, dead click, excessive scrolling | The effect of those signals on conversion |
| Session replay | Unlimited, free | Warehouse export of recordings |
| Data Export API | Aggregate dashboard data | Raw event-level data (max 3 days, 1000 rows, 10 requests per day) |
| User identification | user_id through the identify API | A joinable user_id in the warehouse (client-side hash) |
| Scroll tracking | Scroll heatmap (how far) | Scroll velocity, dwell time (how) |
| AI | Copilot session summaries | Cross-tool AI analysis with GA4/CRM data |
The limits of the Clarity Data Export API are critical: maximum 3 days of data, 1000 rows per request, 10 API requests per day. That is not enough to build a pipeline at warehouse level. Clarity has to be positioned as a qualitative discovery tool, not as a raw data source.
This table makes clear why Clarity cannot be a decision tool on its own. It detects the frustration signal but cannot measure the effect of that signal on the business outcome.
What Does the Clarity Session Export Give You?
The session list exported from Clarity contains these columns: date, duration, entry and exit URL, referrer, user ID, browser, device, operating system, country, page count, click count and the recording link.2
Points to watch:
- Frustration metrics such as rage click, dead click and scroll depth are not in the export. They only appear in the Clarity UI.
- The user ID is hashed. That ID cannot be matched directly against the user_id in GA4 or the CRM.
- There is session metadata, but no behavioral data. Click count is there, but not where the clicks landed.
This export answers “how much time was spent on which pages” but not “why did the user leave”. The answer to that one is hidden in the session replay.
Matching Strategy: A Shared user_id Across Clarity and GA4
To analyze Clarity and GA4 data for the same user, the same identifier has to go to both tools.
The GA4 Side
gtag("config", "G-XXXXXXX", {
user_id: "USER_UUID",
});
The Clarity Side
clarity("identify", "USER_UUID", "session_id", "page_id", {
plan: "premium",
signup_date: "2026-01-15",
});
The Critical Constraint
Clarity hashes the user_id sent through the identify API on the client side. That means I can filter this user in the Clarity UI, but I cannot run a direct JOIN against the GA4 user_id in BigQuery.
So how does this matching pay off?
- Filtering by user_id in the Clarity UI: I can see all sessions, rage clicks and recordings for a given user.
- Querying the same user_id in GA4 BigQuery: I can pull conversion, revenue and event data for the same user.
- Cross-analysis with an LLM: I feed the qualitative observations from Clarity (session replay summaries, frustration patterns) to the LLM together with the quantitative data from GA4 (conversion, revenue).
This is not an automatic JOIN at warehouse level. It is a manual or semi-automated analytical workflow. A fully automated pipeline needs PostHog or FullStory.
Frustrated Buyer Segmentation
Splitting users who show frustration signals into two segments changes the intervention strategy completely:
Segment 1: Frustrated but Converted
These users rage clicked, hit a dead click, maybe got stuck in a form, but completed the purchase. Why does that matter?
- High churn risk: The purchase experience was bad. The odds of abandoning next time are high.
- High LTV potential: If they converted despite every obstacle, they have a strong need for the product or service.
- The most valuable intervention window: Applying a post-purchase experience improvement to these users (follow-up email, UX fix) affects retention directly.
Segment 2: Frustrated and Churned
These users showed frustration signals and left. They are the “classic” UX problem cases:
- Direct revenue loss: They left without converting.
- High fix priority: I can see from the session replay which page and which element they got stuck on.
- Consent and ad blocker overlap: As I covered in the consent post, 83% of ad blocker users also reject consent. Those users may not even show up in Clarity.
So how do I build that segmentation?
Workflow: Clarity + GA4 BigQuery + LLM
Step 1: Frustration Discovery in Clarity
I apply these filters in the Clarity UI:
- User Actions > Insights: Rage clicks, Dead clicks, Excessive scrolling
- Path: Conversion funnel pages (product, cart, checkout)
- Session duration: Over 30 seconds (to filter out bots)
This filtering gives me the list of sessions showing frustration. I can run bulk summarization with Copilot.
Step 2: Conversion Query in GA4 BigQuery
For the same period, I pull conversion data from GA4 BigQuery:
SELECT
user_pseudo_id,
event_name,
event_timestamp,
ecommerce.purchase_revenue_in_usd AS revenue,
device.category AS device,
geo.country AS country,
traffic_source.medium AS medium
FROM
`project.analytics_XXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20260401' AND '20260403'
AND event_name IN ('purchase', 'begin_checkout', 'add_to_cart')
ORDER BY
event_timestamp DESC
Step 3: Cross-Analysis with an LLM
I combine the frustration patterns from Clarity with the conversion data from GA4 and feed them to the LLM. A Claude skill or a prompt template can be used for this analysis:
Clarity data:
- [user_id]: 3 rage clicks on the checkout page, dead click in a form field,
session duration 4:32, mobile Chrome
GA4 data:
- [user_id]: begin_checkout event present, purchase event MISSING
- 5 sessions in the previous 30 days, 2 add_to_cart
Analysis:
1. Which segment is this user in? (frustrated-converted / frustrated-churned)
2. What could the root cause of the frustration be?
3. Which intervention do you recommend?
Thanks to the Contentsquare MCP integration, Claude can run this query directly against Clarity data. Natural language analysis is possible without building a pipeline.3
Step 4: Segment-Based Action
| Segment | Action | Measurement |
|---|---|---|
| Frustrated-Converted | Post-purchase UX improvement, follow-up survey | Repeat purchase rate, NPS |
| Frustrated-Churned | Fix the friction point in the funnel | Change in conversion rate |
| Frustrated-Invisible | Invisible because of consent or an ad blocker | Recovery through server-side tracking |
Beyond the Scroll Heatmap: Behavioral Scroll Analysis
The Clarity scroll heatmap shows how far down the page a user scrolled. That is a valuable starting point, but not enough.
The Clarity scroll heatmap says “40% of users did not continue past this point”. But it cannot tell whether that 40% were quick scanners or slow readers who gave up.
Scroll velocity and dwell time are academically established metrics as independent signals. A joint study by Google Research, Cambridge and MIT predicted reading difficulty with an F-score of 0.77 using scroll features alone.4
A scroll tracking solution that can make this distinction classifies every region as engaged (deep reading), scanned (quick scan) or skipped. For details, see the post on why scroll depth is a misleading metric and the technical implementation of ScrollTracker.
When Clarity and ScrollTracker are used together:
- Clarity: “60% of users did not reach the CTA region” (how far)
- ScrollTracker: “70% of those who reached it scanned that region, only 15% read it engaged” (how)
When these two data layers come together, instead of a surface-level decision like “move the CTA up”, a root-cause decision becomes possible: “the content above the CTA is not engaging, restructure it”.
Clarity vs the Alternatives: Realistic Positioning
Clarity’s position in the market deserves an honest assessment. Hotjar merged with Contentsquare in July 2025 and the pricing model changed completely.5 The old Hotjar Scale plan (Observe + Ask + Engage) could reach $922 per month; the new Contentsquare model was restructured as Free/Growth (€39/month)/Pro/Enterprise.6
| Criterion | Clarity | Contentsquare Free | Contentsquare Growth (€39/mo) | PostHog Free |
|---|---|---|---|---|
| Session recording | Unlimited, 100% capture | 5% capture (max 10k/mo) | 15% capture (min 20k) | 5k sessions/mo |
| Data retention | 30 days replay, 13 months heatmap | 1 month replay, 1 month analytics | 2 months replay, 13 months analytics | 1 year |
| Frustration signals | Automatic (rage, dead, scroll) | Basic (Frustration Score Growth+) | Frustration Score, filtering | Manual event |
| User ID filtering | Yes (free) | No (Growth+ required) | Yes | Yes |
| Warehouse export | No (API is aggregate only) | No | No (Data Connect Pro+ add-on) | Native BigQuery |
| MCP | No | 300 calls/mo | ~3k calls/mo (36k/year) | MCP server (self-host) |
| AI | Copilot, Smart Events | Basic | Sense Chat, Heatmap summaries, Session Replay Summaries | AI assistant |
| Survey/feedback | No | 100 responses/mo | Yes | Yes (on-site) |
| Privacy | Microsoft data usage rights7 | GDPR/CCPA compliant, no data sharing | GDPR/CCPA compliant | Self-host option |
| Industry restriction | Healthcare, finance, gov not allowed | None | None | None |
Privacy Note
Clarity’s terms of use grant Microsoft the right to use collected data for AI model training, advertising profiling, benchmark reports and case studies. It does not honor the DNT (Do Not Track) signal and offers no mechanism for deleting individual user data.7 That can conflict with the GDPR right to erasure. Contentsquare, on the other hand, operates in compliance with GDPR, CCPA and LGPD, and does not use data for profiling or advertising.
Clarity cannot be used on healthcare, financial services and government sites. For teams in those sectors, Contentsquare or PostHog (self-hosted) is the only option.
Clarity’s strength: Free, unlimited recording (100% capture), fast setup, Shopify integration, instant summarization with Copilot. Compared to the 5% capture limit of Contentsquare Free, it is unmatched in session recording volume.
Clarity’s weakness: No warehouse export, user_id is hashed, low API limits, simple funnel analysis, a contested privacy model, industry restrictions.
Realistic assessment: For most teams, Clarity plus GA4 BigQuery is the most sustainable starting point. Clarity is the qualitative discovery layer, GA4 BigQuery the quantitative base layer. Teams that need surveys and user feedback can consider moving to Contentsquare Growth. Teams that need a full warehouse pipeline should look at PostHog or FullStory.
For a detailed tool-by-tool comparison, see the post on data discrepancies between analytics platforms and the PostHog, Umami and GA4 comparison.
The Effect of Consent on Clarity Data
Like every other client-side tool, Clarity is subject to consent rules. Without consent the Clarity script does not load (or runs in a restricted mode), so sessions from users who do not consent are never recorded.
That creates a blind spot in frustrated buyer analysis: users who reject consent tend to be more privacy-conscious and more experienced web users. This segment also overlaps strongly with ad blocker usage; as I covered in the consent post, 83% of ad blocker users reject consent as well.
For a detailed analysis of the measurement impact of consent, modeling thresholds and a platform comparison, see the post on the measurement impact of consent and GDPR.
Where to Start?
Every step builds on the previous one. GA4 matching is meaningless without a Clarity setup, and LLM analysis is meaningless without the matching.
Step 1: Full Clarity Setup
- Install Clarity in a consent-aware way (consent tool integration)
- Define Smart Events: purchase, signup, CTA click, form submit
- Enable GA4 user_id matching through the identify API
Step 2: GA4 BigQuery + Frustration Discovery
- Enable the GA4 BigQuery export (free)
- Apply the frustration filters in the Clarity UI, note the patterns
- Produce weekly session summaries with Copilot
Step 3: LLM Cross-Analysis
- Feed the Clarity frustration summaries plus GA4 conversion data to the LLM
- Separate the frustrated-converted and frustrated-churned segments
- Build a segment-based action plan
Step 4: Automation (Advanced)
- Query Clarity directly from Claude through the Contentsquare MCP
- Build a churn propensity model with BigQuery ML
- Produce a weekly automated frustrated buyer report
Footnotes
- Microsoft Clarity Features and Documentation, Microsoft Clarity ↩
- Clarity session export CSV format: Date, Time, Session duration, Entry/Exit URL, Referrer, Clarity user ID, Browser, Device, OS, Country, Page count, Session clicks, Favorite, Recording link. Frustration metrics (rage click, dead click) are not included in the export. ↩
- Contentsquare MCP integration, Contentsquare Developer Documentation ↩
- Joint scroll velocity study by Google Research, Cambridge and MIT. For a detailed analysis, see Why Is Scroll Depth a Misleading Metric? ↩
- Contentsquare completes Hotjar acquisition, Contentsquare Press ↩
- Contentsquare Pricing, Contentsquare. Free: 200k sessions, 5% replay capture (max 10k), 1 month retention, 300 MCP calls/mo. Growth (€39/mo): 7k-10m sessions, 15% capture (min 20k), 13 months retention, 36k MCP calls/year. ↩
- Microsoft Clarity Terms of Use and Microsoft Privacy Statement. Clarity reserves the right to use collected data for AI model training, advertising profiling, benchmark reports and marketing materials. It does not respect the DNT signal. It offers no mechanism for deleting individual user data. Source: Hotjar vs Microsoft Clarity comparison ↩ ↩2
- 01 Clarity rage click and dead click data is not enough to make a business decision on its own. Without cross-analysis against GA4 conversion data, the value of a frustrated user stays unknown.
- 02 The Clarity Data Export API only serves aggregate data (max 3 days, 1000 rows). There is no raw event-level warehouse export. Trying to build a pipeline on it is wasted time.
- 03 Clarity hashes user_id on the client side. A direct warehouse join is not possible. Matching requires a shared user_id plus an identify API strategy.
- 04 When Clarity session summaries are combined with GA4 conversion data through an LLM (Claude, GPT), patterns can be detected without watching session replays manually.
- 05 Frustrated-but-converted users are the most valuable intervention window: they completed the purchase but carry churn risk on the next one.
+ Can Clarity predict churn on its own?
No. Clarity detects frustration signals (rage click, dead click, excessive scrolling) but does not show how those signals affect business outcomes. Churn prediction needs GA4 conversion data, CRM lifetime value and BigQuery ML.
+ Can Clarity data be exported to BigQuery?
Practically no. The Clarity Data Export API only serves aggregate dashboard data: maximum 3 days, 1000 rows, 10 requests per day. There is no raw event-level export. Clarity should be used as a qualitative discovery tool through the UI, not as a warehouse pipeline.
+ How are Clarity and GA4 data matched?
The same user_id is sent to both tools. When user_id goes to GA4 through config and the same UUID goes to Clarity through the identify API, user-level filtering becomes possible in the UI. However, because Clarity hashes user_id on the client side, a direct join at warehouse level is not possible.
+ How is Clarity analysis done with an LLM?
There are two paths: with the Contentsquare MCP integration, Claude or ChatGPT can query Clarity data directly. Alternatively, session summaries are produced with Clarity Copilot and those summaries are fed to the LLM together with GA4 data.
+ Is a scroll heatmap enough, or is more advanced scroll tracking needed?
The Clarity scroll heatmap shows how far a user scrolled but cannot tell how they scrolled, whether it was a quick scan or deep reading. Engaged, scanned and skipped classification needs velocity and dwell time based tracking.