Isotherm records every click, hover and scroll in your admin panel and draws it on the page itself — so the button that looks clickable and isn't shows up as a red blot, instead of as a support ticket.
Every analytics tool can tell you a button was clicked 400 times. None of them tell you that 34 of those clicks did nothing at all.
Someone clicked something that looked clickable and the page ignored them. A <div> styled as a button with no handler is the most common bug in any admin panel, and the only person who ever finds out is the user.
Three clicks in the same spot inside a second. That is not enthusiasm — it is someone who does not believe the page heard them. It is the closest thing to hearing a user swear at your software.
The parts of your interface nobody ever touches. Every feature you shipped and nobody found is somewhere in the cold, and it is costing you maintenance for nothing.
One async script in your layout — not per page. It is 6.7 kB, has no dependencies, and never blocks rendering. Or paste the generated brief into Claude Code and let it do the install.
Clicks, mouse dwell, scroll depth, rage and dead clicks. Movement is quantized in the browser, so 30 seconds of hovering ships as a handful of integers rather than megabytes.
The heat is drawn over a stored copy of your page, not a live iframe — so it still works behind a login, and last quarter's map survives the redesign that replaced it.
Clicks recorded before a redesign get drawn over the layout that replaced them. They land on whatever is there now. The map looks completely plausible and is completely wrong — and nobody notices, because it still renders.
Ask you to bump a version number when you deploy. You will forget — not out of carelessness, but because it is a step with no immediate consequence. The data keeps flowing, the two designs average together, and the resulting heatmap describes a page that never existed.
Nobody declares anything. The tracker fingerprints the page's structure, so a layout change starts a new map on the deploy that caused it. Add a column and you get a new version. Add an order row and you do not — that is data, not design.
The session id lives in sessionStorage and dies with the tab — no cookie, nothing to consent to, nothing that follows anyone between sites. No IP address is ever recorded. And nothing a person typed is captured: not passwords, not search terms, not a half-written message in a textarea.
To draw the map, Isotherm keeps a copy of the page layout on our server — which on an admin panel can contain real records. That is the one thing worth understanding before you install it, so it is stated plainly in the dashboard on the screen where you copy the tag, and you can mask every glyph or turn the copy off entirely. Read exactly what is stored.
Sampling the pointer on a 100 ms timer and counting grid cells turns a minute of mousemove from ~7,000 events into a few hundred integers — and produces a better signal than the trail would have.
You cannot tell from the DOM whether an element has a handler, so Isotherm detects dead clicks by watching what the user believed and whether the page blinked.
The SDK hashes the DOM skeleton with runs of identical siblings folded to `tag*`, so a new column forks the heatmap version but a 25th table row does not.