If you've ever sat in a kickoff where the client says "we want heatmaps, what do you use," you know there isn't a clean answer. There are three serious options most teams shortlist, and they're priced and architected differently enough that picking wrong is expensive in different ways. Hotjar will bill you. Clarity will keep your data on Microsoft's infrastructure. Matomo will make you run something.
These three look similar at a glance. A heatmap, a session recording, maybe some rage-click signals on top. Look at them side by side as buyer decisions and they're not the same product at all.
- Hotjar is a behavior analytics suite. Heatmaps, recordings, surveys, feedback widgets, funnels, all in one tool. Owned by Contentsquare since 2021, which mostly shows up in the pricing and, lately, in which signup page you land on.
- Microsoft Clarity is Microsoft's free entry into the category. Unlimited sessions, unlimited heatmaps, no credit card. The catch is that the data lives in Azure and is processed by Microsoft.
- Matomo Heatmaps & Session Recording is a plugin for Matomo Analytics. Same product surface (clicks, scrolls, recordings), but you can run the whole stack on your own infrastructure.
Three different bets. The decision axes that actually matter, in order: who owns the data, how the bill scales with traffic, and whether you also need surveys and feedback widgets in the same tool.
No universal winner here; we land on different answers for different clients. Pick Matomo Heatmaps when data ownership or EU residency is non-negotiable, but budget time for its screenshot pipeline: heatmap backgrounds are re-rendered cold from a stored DOM snapshot, which breaks on cross-origin assets and SPAs. Hotjar is the buy when you want surveys and feedback next to your recordings and can absorb a bill that climbs fast across many sites; Clarity gives you free unlimited sessions and the best frustration signals of the three, as long as you skip surveys and accept that the data goes to Microsoft. Either way, recordings need consent in the EU.
At a glance
| Matomo Heatmaps | Hotjar | Microsoft Clarity | |
|---|---|---|---|
| Pricing entry | From €220 a year, 1–4 users, unlimited sites (self-hosted plugin) | Legacy free tier (35 sessions/day); new buyers go through Contentsquare | Free, unlimited |
| Self-hosting | Yes | No | No |
| Data residency control | Anywhere you run PHP/MySQL | AWS, Ireland region; no choice | Azure; EU customers contract with Microsoft Ireland, SCCs to the US |
| Click and scroll heatmaps | Yes | Yes | Yes |
| Session recordings | Yes | Yes | Yes |
| Surveys and feedback | Separate paid plugins | Yes, core feature | No |
| Funnels | Plugin, paid | Yes, gated by tier | Yes |
| Frustration signals | Plugin-dependent | Rage clicks, u-turns | Rage clicks, dead clicks, quick-backs, JS errors |
| AI summaries | Limited | Hotjar AI for surveys and recordings | Clarity Copilot, free |
| Consent in the EU | Needs consent; no third-party processor if self-hosted | Needs consent; DPA available | Needs consent; Consent Mode supported |
| Recording retention | Indefinite self-hosted, 3 months on Cloud | ~365 days on paid plans | 30 days for recordings, 13 months for aggregates |
| Open source | Platform yes, plugin commercial | No | Tracker/replay library (MIT); hosted service no |
This won't decide anything on its own. The interesting part is in the gaps between rows.
Who owns the data, and where does it live
If your compliance team has ever sent back a vendor review with "where exactly does the data go," you know this is the question that quietly kills procurements.
Matomo is the only one of the three you can run somewhere your legal team controls. Self-hosted means a server you own, in a region you pick, with no third-party processor. The plugin runs alongside the analytics, no extra vendor relationship. Matomo Cloud is also an option and runs in EU data centers, but the meaningful version of the privacy story is the self-hosted one.
Hotjar is cloud-only. The data sits in AWS, Ireland region. There's a DPA and a sub-processor list (AWS, plus Contentsquare's own infrastructure since the 2021 acquisition). Compliant in most EU contexts with explicit consent, but you're handing data to a vendor, and I haven't found evidence that you can pick your own region the way the marketing sometimes implies.
Clarity is the interesting case, because the data goes to Microsoft itself, not to a vendor that happens to use Microsoft underneath. It's stored in Azure. EU customers contract with Microsoft Ireland, which leans on Standard Contractual Clauses for transfers to Microsoft in the US. For most teams that's fine. For teams whose compliance review has flagged Microsoft as a processor (we've seen this in EU public sector and German healthcare), Clarity is a non-starter regardless of price.
One thing that trips people up: Matomo Analytics can sometimes be configured for consent-exempt measurement, depending on how you set it up and which national regulator you answer to. That story does not carry over to heatmaps and session recording. Hotjar and Clarity both set non-essential cookies and need consent in the EU, though Clarity now ships a Consent Mode that can hold cookies until a signal arrives and run a limited no-consent mode when consent is denied.
How the bill scales
The honest pricing comparison isn't tier-to-tier. It's how the bill behaves as you grow.
Hotjar's legacy free tier (35 sessions a day) is fine for testing, and existing accounts can still use it. New buyers now land on the Contentsquare pricing page, where the free plan captures a much larger session volume but caps how many recordings you can replay and keep. Paid tiers are billed per site, and the price has climbed steadily since the Contentsquare acquisition, which is the thing existing customers complain about most. At three or four sites, the bill is real money. At ten or twenty client sites, it's a budget line item.
Clarity is free at any volume. There's no caveat there. Unlimited sessions, unlimited heatmaps, unlimited projects. The cost is the data going to Microsoft, not the invoice.
Matomo is the messiest to price honestly. The Heatmap & Session Recording plugin is licensed by user tier, not by site: the entry tier runs €220 a year for 1–4 users and unlimited websites (check plugins.matomo.org, the Matomo team adjusts it). Add the cost of running the server, plus your team's time. Matomo Cloud bills by hits and may fold Heatmaps into higher plans depending on the current packaging. If you already run Matomo, adding heatmaps is a small marginal cost. If you don't, you're costing in a whole platform.
Rough numbers, for a 250K-monthly-visit setup across three domains:
- Clarity: $0/year. Period.
- Matomo self-hosted: €220/year for the plugin (one license covers all three domains, since it's priced by users, not sites), plus your existing Matomo hosting.
- Hotjar via Contentsquare: in the low thousands per year per site, depending on session volume and current packaging.
That's not a fair comparison, because you're getting different things, but it sets the order of magnitude.
Heatmap rendering
This is the part I find most interesting, because it's a real product difference and it almost never makes it into vendor comparisons.
Matomo serializes the page's DOM in the browser, sends it to your Matomo server, and re-renders that stored snapshot later, when you open the heatmap, to paint the screenshot. The advantage is privacy. You don't have screenshots streaming to a third party. The disadvantage is that re-rendering stored HTML cold (different origin, no cookies or session, assets re-fetched at view time) breaks a lot of modern websites. CORS-protected images come back as broken icons. Custom fonts fall back to system defaults. Sticky headers collapse onto the content. SPAs get captured before React or Vue have finished rendering. We've written about each of these issues in detail, and we maintain an open source extension that fixes most of them at capture time. It's the price you pay for keeping the screenshot pipeline private.
Hotjar takes a different route. The tracker opens a WebSocket on page load, captures the initial DOM, and then uses the browser's MutationObserver API to record every change plus clicks, mouse moves, scrolls, and keystrokes. The "screenshot" you see under a heatmap is a frame from one of those recorded sessions, reconstructed from the DOM stream. Because the recording happens inside the user's real browser, with their cookies, fonts, and CDN access intact, it sidesteps a lot of the snapshot timing and origin problems we hit on Matomo. It doesn't make them disappear: Hotjar's own docs cover recordings that look broken when CSS or images aren't reachable. The costs are script weight (Hotjar's tracker has historically been one of the heavier ones, which shows up in LCP on slow connections) and a few real blind spots: canvas and iframe content aren't captured, because MutationObserver can't see into them.
Clarity works the same way Hotjar does, mechanically. It instruments the page with clarity-js, records DOM mutations via MutationObserver, ships the data, and reconstructs sessions in clarity-visualize. The heatmap screenshot is a frame from a recorded session, the same pattern as Hotjar. The differentiator isn't the capture mechanism, it's the aggregation: Clarity aggregates clicks by CSS element selector by default, which is why you'll see "click on the primary CTA in the hero" as a unit rather than coordinates on a screenshot. The same MutationObserver blind spots apply, and Clarity has additional reported issues with shadow DOM (where mutations don't always reach the standard observer) and some heavily customized React apps.
So Matomo is the odd one out, not Clarity. Matomo captures the DOM once and re-renders it cold from storage. Hotjar and Clarity both record DOM mutations in the user's browser and reconstruct the page from that stream. If you have a static-ish site without iframes, custom fonts, or sticky headers, none of this matters and all three will give you usable heatmaps. If you have a SPA with cross-origin assets, you're going to spend setup time on Matomo that you wouldn't on the other two. And all three have replay blind spots: Matomo has its own documented iframe and cross-domain limits, so if your page leans on canvas, iframes, or shadow DOM, test it in each tool before you assume any of them captures it cleanly.
Frustration and friction signals
This is the category Clarity quietly dominates.
Clarity has rage clicks, dead clicks, excessive scrolling, quick-backs, and JS errors as first-class signals. They're surfaced in the dashboard, filterable, and used in the Copilot summaries. For a free tool, the friction analytics are stronger than what most teams build on top of paid alternatives.
Hotjar has rage clicks and u-turns, plus a frustration score (the naming has shifted a couple of times). It's competent and integrated with the rest of the suite, but gated behind paid tiers.
Matomo has basic insights via plugins, but there's no first-class "rage click" metric out of the box. You can build it with Custom Dimensions and event tracking, but it's work. If frustration analytics are the main thing you need, Matomo is the wrong choice unless you're happy rolling your own.
Surveys and feedback
If you want heatmaps and surveys in the same tool, Hotjar wins.
Hotjar has full-featured surveys, feedback widgets, and AI-assisted survey design. The link between a recording and a survey response from the same user is the thing existing customers cite when asked why they're paying.
Clarity has neither. No surveys, no feedback widgets. There's a real product gap here.
Matomo has separate Form Analytics and Surveys plugins, which work, but they're less polished than Hotjar's and they're additional plugin licenses on top of the heatmaps one.
Who picks what
Honest version, based on procurements we've actually run.
Pick Matomo Heatmaps if you already run Matomo Analytics, or you need data ownership and EU residency, or your compliance team has flagged Microsoft as a processor. The catch is the screenshot rendering. Be willing to manage CORS, iframe, and font issues, or use our extension to handle them at capture time.
Pick Hotjar if you want one tool for heatmaps, surveys, feedback, funnels, and recordings, you have the budget, and you're not under strict data-residency rules. The polish is real, and the survey-to-recording link is genuinely useful when you need to understand what someone was doing right before they filled out a feedback widget.
Pick Microsoft Clarity if you want unlimited sessions for free, you're fine with Microsoft processing the data, you don't need surveys, and you want strong frustration signals at zero cost. We use it on client sites where the compliance posture allows it, mostly as a friction microscope on top of Matomo.
A few anti-recommendations. Don't pick Clarity if your compliance team has flagged Microsoft as a processor. Don't pick Matomo if you're running a complex SPA with cross-origin assets and you don't have engineering capacity for the rendering edge cases. Don't pick Hotjar if you have many domains and a tight budget.
Running two in parallel works fine, by the way. We've had clients run Matomo Heatmaps for the data-ownership case and Clarity for the frustration signals on the same site, with Matomo as the canonical analytics and Clarity as the friction microscope. The tracker overhead is real, so don't add a third.
None of these three tools is universally better. We've ended up with different answers on different clients, depending on whose data lives where, what the team can run, and whether surveys belong next to the recordings. The boring answer is the honest one.