Heatmap analyst skill
Click-engagement analyst that pulls element-level click data, a page-level scroll proxy, and bounce/exit signals from Humblytics to surface UX friction and ignored CTAs.
by Humblytics·MIT license·★ 85 Stars on the repo·GitHub ↗
npx degit Humblytics/humblytics-marketing-skills/skills/heatmap-analyst#main ~/.claude/skills/heatmap-analystChecked ·commit main
Inside this skill
SKILL.md · the author's own words# Heatmap Analyst ## Purpose Analyze Humblytics click-engagement data (element/target-level clicks, a single page-level scroll proxy, and bounce/exit signals) to diagno… > **Scope note — what Humblytics does and does not give you.** Humblytics provides **element/target-level click counts** (with UTM breakdow… ## When to Use - A page has a high bounce rate and you need to understand *why* - CTAs are present but click-through rate is below benchmark - You want to verify that the important content is actually being seen - Users are reporting confusion or friction on a specific page - You're auditing a page before a redesign or A/B test - Investigating whether traffic from a specific source behaves differently on-page
Word-for-word excerpt, not a result. Read the full SKILL.md ↓
Files of Heatmap analyst
Show the full text168 lines
Heatmap Analyst
Purpose
Analyze Humblytics click-engagement data (element/target-level clicks, a single page-level scroll proxy, and bounce/exit signals) to diagnose UX friction and generate prioritized design recommendations. Live data comes from the Humblytics MCP (the click and page tools — get_clicks_details, get_clicks_breakdown, get_page_details, get_pages_breakdown, get_entry_exit_pages). This skill turns the interaction data Humblytics actually exposes into specific, ranked improvements for layout, CTAs, and content hierarchy.
Scope note — what Humblytics does and does not give you. Humblytics provides element/target-level click counts (with UTM breakdown), a single average scroll percentage per page, and bounce/exit signals. It does NOT provide pixel-level click heatmaps (x/y coordinates), a 25/50/75/100 scroll-depth distribution, rage-click detection, dead-zone maps, or per-device click segmentation. Anything in that second list requires a dedicated heatmap tool (e.g. Hotjar, Microsoft Clarity) — do not promise it from Humblytics. See "NOT available via Humblytics" below.
When to Use
- A page has a high bounce rate and you need to understand why
- CTAs are present but click-through rate is below benchmark
- You want to verify that the important content is actually being seen
- Users are reporting confusion or friction on a specific page
- You're auditing a page before a redesign or A/B test
- Investigating whether traffic from a specific source behaves differently on-page
Setup
This skill reads live data through the Humblytics MCP (server humblytics) — see the repo README to connect it. Once connected, the skill calls mcp__humblytics__* tools; the MCP handles auth, base URL, and property resolution, so there are no keys to paste or .env files to source here. Never paste API keys into chat — the key lives once in the MCP connection headers, not in transcripts.
The MCP auto-resolves the property for a single-property key (the common case). For a multi-property key, call list_properties and pass the chosen propertyId to each tool.
Before You Start
- Confirm the property — With a multi-property key, run
list_propertiesand confirm which property to analyze (single-property keys auto-resolve) - Identify the target page(s) — Which URL(s) are in scope
- Time range — Default to last 30 days; shorter windows are noisier
- Sample size check — Pages below ~500 sessions in the window produce unreliable heatmaps
- Context — Pull product/persona context if available so recommendations match the audience
Core Workflow
Step 1: Pull the Interaction Data
For each target page, fetch what the API actually returns:
- Element-level clicks — clicks grouped by element
target(andsecondary), withclicks,unique_sessions,most_recent, a per-elementtrend, and autm_breakdown(clicks + share by UTM source/medium/campaign). This is element-level, not an x/y coordinate map. - Scroll proxy — a single
avg_scroll_percentfor the page (one number, e.g. 23.7), plusbounce_rate,page_views,unique_visitors,avg_session_length. This is not a 25/50/75/100 depth distribution. - Cross-page click comparison — per-page
total_clicks,unique_sessions, andtop_targets[]{target, clicks, share}. - Entry/exit friction — entry and exit pages as a friction proxy.
Click CTR is not a field in the API — derive an engagement rate yourself as
clicks / unique_sessions(or per-pagetop_target.share) when you need a CTR-like proxy.
Relevant Humblytics MCP tools (all take start, end as ISO-8601 and a timezone IANA name — there is no ?period= shorthand; scroll depth lives in the page tools):
get_clicks_details(page: "/path") — element/target-level clicks + UTM breakdown for one pageget_clicks_breakdown— cross-page top targetsget_page_details(page: "/path") —avg_scroll_percent(scroll proxy) +bounce_ratefor one pageget_pages_breakdown— page-level views/bounce across pagesget_entry_exit_pages— entry/exit friction proxy
NOT available via Humblytics (needs a dedicated heatmap tool): pixel-level click coordinate heatmaps, scroll-depth distribution (25/50/75/100%), rage-click detection, dead-zone maps, and per-device click segmentation. If the user needs any of these, tell them Humblytics does not return them and point to a purpose-built heatmap tool (Hotjar, Microsoft Clarity, etc.).
Step 2: The Three Diagnostic Questions
Run each page through these three questions, using only data the API returns:
Q1 — Are visitors clicking what you want them to click?
- Primary CTA click share: is the CTA
targeta meaningful fraction oftotal_clicks(use itssharefromget_clicks_breakdownorclicksfromget_clicks_details)? - Secondary CTA click share: proportional to its importance?
- Which
targetdominates clicks, and is it a high-value action or a low-value/navigation element?
Q2 — Are visitors engaging deeply enough to see the important content?
avg_scroll_percent: a low average (e.g. ~24%) suggests most visitors never reach below-fold content. This is a single average, not a depth distribution — do not claim "X% reached 50%".- Is the primary CTA likely above or below where that average scroll lands?
- Cross-reference with
bounce_ratefromget_page_details.
Q3 — Where is the friction?
- High
bounce_rate/ exit share (fromget_page_detailsandget_entry_exit_pages) on a page that should convert = friction proxy. - Low scroll engagement on a long page where the CTA sits deep.
- A CTA
targetthat gets almost no clicks despite high page views = ignored CTA.
Frustration signals like rage clicks and clicks on non-interactive elements are not available from Humblytics — use the friction proxies above, and recommend a dedicated heatmap/session-replay tool if true rage-click detection is needed.
Step 3: Identify the Top 3 Issues
Rank all issues by expected conversion impact:
- Blocker — Primary CTA gets a negligible share of clicks, or low
avg_scroll_percentsuggests core content is rarely reached - Friction — High
bounce_rate/ exit share on a page meant to convert; confusing affordances - Waste — High click share on low-value elements (e.g., a
Link/nav target dominating clicks instead of the CTA)
Always state the evidence: "avg_scroll_percent on the homepage is 24% and bounce_rate is 0.89, while the signup CTA hero-try-free took only 1.2% of clicks."
Step 4: Generate Recommendations
For each issue, provide:
- Specific change — "Move CTA from below the pricing table to above the hero fold"
- Expected lift — Estimate based on traffic volume and issue severity
- Implementation difficulty — Copy change / layout change / redesign
- How to verify — Which metric to watch; which follow-up A/B test validates the fix
Step 5: Output Format
Write a clean report with:
PAGE: [/path]
DATE RANGE: [window]
PAGE VIEWS / UNIQUE VISITORS: [page_views] / [unique_visitors]
HEADLINE FINDING:
[1 sentence capturing the biggest insight]
CLICK PATTERN SUMMARY (from get_clicks_details + get_clicks_breakdown):
- Primary CTA target + click share: [target] ([share]% of clicks)
- Highest-click element: [target] ([share]% of clicks)
- Total clicks / unique sessions: [total_clicks] / [unique_sessions]
- Notable UTM skew (if any): [utm_source/medium] drives [share]% of a target's clicks
SCROLL ENGAGEMENT (from get_page_details — single average, not a distribution):
- avg_scroll_percent: [N]%
- Implication: [most visitors likely do / do not reach below-fold content]
FRICTION PROXIES:
- bounce_rate: [N]
- Top exit pages (get_entry_exit_pages): [pages]
TOP 3 RECOMMENDATIONS (prioritized):
1. [Change] — Expected impact: [X] — Difficulty: [level]
2. [Change] — Expected impact: [X] — Difficulty: [level]
3. [Change] — Expected impact: [X] — Difficulty: [level]
SUGGESTED A/B TESTS:
- [Test hypothesis with clear control vs variant]
Interpretation Cheatsheet
Based only on Humblytics-available signals (element-level click shares, single avg_scroll_percent, bounce_rate/exit):
| Pattern | Likely Cause | Action |
|---|---|---|
A generic Link/nav target dominates clicks, CTA target near zero |
CTA invisible, weak, or out-competed by navigation | Strengthen CTA prominence; reduce competing links |
Low avg_scroll_percent on a long page |
Weak hook, above-fold doesn't earn attention | Rewrite headline or move proof/CTA above the fold |
| CTA clicks concentrated on one variant | Other CTAs are invisible or redundant | Remove redundant CTAs; test single CTA variant |
High bounce_rate + low scroll on a convert-intent page |
Above-fold fails to engage | Audit hero copy/offer; move value prop up |
| Click share spread thinly across many targets | No clear visual hierarchy | Add hierarchy: emphasize primary action |
| One UTM source's clicks skew heavily to a low-value target | Mismatched intent from that channel | Align landing experience to that source's intent |
Patterns that require pixel coordinates, rage-click detection, or per-device click maps (e.g. "rage clicks on image", "desktop clicks ≠ mobile clicks") are not diagnosable from Humblytics — use a dedicated heatmap tool.
Related Skills
cro-optimizer— Combines heatmap findings with funnel data for holistic CROpage-cro— Full 10-point page audit; heatmap analysis is one dimensionab-test-generator— Takes heatmap recommendations and launches them as tests
Shared Frameworks (REQUIRED reading)
Heatmap interpretation is highly context-dependent. The shared primitives in skills/_shared/ keep recommendations grounded.
_shared/frameworks/preflight-checklist.md— confirm minimum 500 sessions per page-period combo before drawing conclusions. Heatmap patterns on smaller samples are noise._shared/frameworks/anti-patterns.md— heatmap-relevant counter-evidence:- Mobile hamburger menu: NN/g says it hurts discoverability on task-oriented SaaS (Spotify hamburger → bottom-tab = +30% menu interactions). BUT Amazon's hamburger beat dropdown for browse-heavy ecom. Site_type is load-bearing — don't recommend bottom-tab universally.
- Mobile exit-intent: architecturally broken (no cursor → no mouseleave event). If heatmap shows users leaving on mobile, the answer is not an exit modal.
- Progress-bar velocity: NIH RCT shows slow-to-fast progress bars nearly double form abandonment. If your heatmap shows form-step drop-off, audit progress bar acceleration before redesigning fields.
_shared/benchmarks/patterns.json— when heatmap data confirms a problem (e.g., low scroll past 30%, CTA clicks dominated by a single variant), match to apattern_idand quote the evidence-backed lift range for the fix. Most relevant categories:cta,navigation,above_fold.
| 1 | |
| 2 | name heatmap-analyst |
| 3 | description "Click-engagement analyst that pulls element-level click data, a page-level scroll proxy, and bounce/exit signals from Humblytics to surface UX friction and ignored CTAs. Generates prioritized, data-backed optimization recommendations. NOTE: Humblytics does NOT provide pixel-level click heatmaps, scroll-depth distributions, or rage-click detection — those need a dedicated heatmap tool. Use when auditing element-level click patterns, finding ignored CTAs, gauging scroll engagement, or diagnosing on-page friction. Triggers: click analysis, element clicks, ignored CTA, click engagement, scroll engagement, UX friction, interaction audit." |
| 4 | metadata |
| 5 | version 1.0.0 |
| 6 | author Humblytics |
| 7 | |
| 8 | |
| 9 | # Heatmap Analyst |
| 10 | |
| 11 | ## Purpose |
| 12 | |
| 13 | Analyze Humblytics click-engagement data (element/target-level clicks, a single page-level scroll proxy, and bounce/exit signals) to diagnose UX friction and generate prioritized design recommendations. Live data comes from the Humblytics MCP (the click and page tools — `get_clicks_details`, `get_clicks_breakdown`, `get_page_details`, `get_pages_breakdown`, `get_entry_exit_pages`). This skill turns the interaction data Humblytics actually exposes into specific, ranked improvements for layout, CTAs, and content hierarchy. |
| 14 | |
| 15 | > **Scope note — what Humblytics does and does not give you.** Humblytics provides **element/target-level click counts** (with UTM breakdown), a **single average scroll percentage** per page, and **bounce/exit** signals. It does **NOT** provide pixel-level click heatmaps (x/y coordinates), a 25/50/75/100 scroll-depth distribution, rage-click detection, dead-zone maps, or per-device click segmentation. Anything in that second list requires a dedicated heatmap tool (e.g. Hotjar, Microsoft Clarity) — do not promise it from Humblytics. See **"NOT available via Humblytics"** below. |
| 16 | |
| 17 | ## When to Use |
| 18 | |
| 19 | A page has a high bounce rate and you need to understand *why* |
| 20 | CTAs are present but click-through rate is below benchmark |
| 21 | You want to verify that the important content is actually being seen |
| 22 | Users are reporting confusion or friction on a specific page |
| 23 | You're auditing a page before a redesign or A/B test |
| 24 | Investigating whether traffic from a specific source behaves differently on-page |
| 25 | |
| 26 | ## Setup |
| 27 | |
| 28 | This skill reads live data through the **Humblytics MCP** (server `humblytics`) — see the repo README to connect it. Once connected, the skill calls `mcp__humblytics__*` tools; the MCP handles auth, base URL, and property resolution, so there are no keys to paste or `.env` files to source here. **Never paste API keys into chat** — the key lives once in the MCP connection headers, not in transcripts. |
| 29 | |
| 30 | The MCP auto-resolves the property for a single-property key (the common case). For a multi-property key, call `list_properties` and pass the chosen `propertyId` to each tool. |
| 31 | |
| 32 | ## Before You Start |
| 33 | |
| 34 | **Confirm the property** — With a multi-property key, run `list_properties` and confirm which property to analyze (single-property keys auto-resolve) |
| 35 | **Identify the target page(s)** — Which URL(s) are in scope |
| 36 | **Time range** — Default to last 30 days; shorter windows are noisier |
| 37 | **Sample size check** — Pages below ~500 sessions in the window produce unreliable heatmaps |
| 38 | **Context** — Pull product/persona context if available so recommendations match the audience |
| 39 | |
| 40 | ## Core Workflow |
| 41 | |
| 42 | ### Step 1: Pull the Interaction Data |
| 43 | |
| 44 | For each target page, fetch what the API actually returns: |
| 45 | |
| 46 | **Element-level clicks** — clicks grouped by element `target` (and `secondary`), with `clicks`, `unique_sessions`, `most_recent`, a per-element `trend`, and a `utm_breakdown` (clicks + share by UTM source/medium/campaign). This is element-level, **not** an x/y coordinate map. |
| 47 | **Scroll proxy** — a single `avg_scroll_percent` for the page (one number, e.g. 23.7), plus `bounce_rate`, `page_views`, `unique_visitors`, `avg_session_length`. This is **not** a 25/50/75/100 depth distribution. |
| 48 | **Cross-page click comparison** — per-page `total_clicks`, `unique_sessions`, and `top_targets[]{target, clicks, share}`. |
| 49 | **Entry/exit friction** — entry and exit pages as a friction proxy. |
| 50 | |
| 51 | > Click **CTR is not a field** in the API — derive an engagement rate yourself as `clicks / unique_sessions` (or per-page `top_target.share`) when you need a CTR-like proxy. |
| 52 | |
| 53 | Relevant Humblytics MCP tools (all take `start`, `end` as ISO-8601 and a `timezone` IANA name — there is no `?period=` shorthand; scroll depth lives in the page tools): |
| 54 | `get_clicks_details` (`page: "/path"`) — element/target-level clicks + UTM breakdown for one page |
| 55 | `get_clicks_breakdown` — cross-page top targets |
| 56 | `get_page_details` (`page: "/path"`) — `avg_scroll_percent` (scroll proxy) + `bounce_rate` for one page |
| 57 | `get_pages_breakdown` — page-level views/bounce across pages |
| 58 | `get_entry_exit_pages` — entry/exit friction proxy |
| 59 | |
| 60 | > **NOT available via Humblytics (needs a dedicated heatmap tool):** pixel-level click coordinate heatmaps, scroll-depth distribution (25/50/75/100%), rage-click detection, dead-zone maps, and per-device click segmentation. If the user needs any of these, tell them Humblytics does not return them and point to a purpose-built heatmap tool (Hotjar, Microsoft Clarity, etc.). |
| 61 | |
| 62 | ### Step 2: The Three Diagnostic Questions |
| 63 | |
| 64 | Run each page through these three questions, using only data the API returns: |
| 65 | |
| 66 | **Q1 — Are visitors clicking what you *want* them to click?** |
| 67 | Primary CTA click share: is the CTA `target` a meaningful fraction of `total_clicks` (use its `share` from `get_clicks_breakdown` or `clicks` from `get_clicks_details`)? |
| 68 | Secondary CTA click share: proportional to its importance? |
| 69 | Which `target` dominates clicks, and is it a high-value action or a low-value/navigation element? |
| 70 | |
| 71 | **Q2 — Are visitors engaging deeply enough to *see* the important content?** |
| 72 | `avg_scroll_percent`: a low average (e.g. ~24%) suggests most visitors never reach below-fold content. This is a single average, **not** a depth distribution — do not claim "X% reached 50%". |
| 73 | Is the primary CTA likely above or below where that average scroll lands? |
| 74 | Cross-reference with `bounce_rate` from `get_page_details`. |
| 75 | |
| 76 | **Q3 — Where is the friction?** |
| 77 | High `bounce_rate` / exit share (from `get_page_details` and `get_entry_exit_pages`) on a page that should convert = friction proxy. |
| 78 | Low scroll engagement on a long page where the CTA sits deep. |
| 79 | A CTA `target` that gets almost no clicks despite high page views = ignored CTA. |
| 80 | |
| 81 | > Frustration signals like rage clicks and clicks on non-interactive elements are **not** available from Humblytics — use the friction proxies above, and recommend a dedicated heatmap/session-replay tool if true rage-click detection is needed. |
| 82 | |
| 83 | ### Step 3: Identify the Top 3 Issues |
| 84 | |
| 85 | Rank all issues by **expected conversion impact**: |
| 86 | |
| 87 | **Blocker** — Primary CTA gets a negligible share of clicks, or low `avg_scroll_percent` suggests core content is rarely reached |
| 88 | **Friction** — High `bounce_rate` / exit share on a page meant to convert; confusing affordances |
| 89 | **Waste** — High click share on low-value elements (e.g., a `Link`/nav target dominating clicks instead of the CTA) |
| 90 | |
| 91 | Always state the evidence: *"avg_scroll_percent on the homepage is 24% and bounce_rate is 0.89, while the signup CTA `hero-try-free` took only 1.2% of clicks."* |
| 92 | |
| 93 | ### Step 4: Generate Recommendations |
| 94 | |
| 95 | For each issue, provide: |
| 96 | |
| 97 | **Specific change** — "Move CTA from below the pricing table to above the hero fold" |
| 98 | **Expected lift** — Estimate based on traffic volume and issue severity |
| 99 | **Implementation difficulty** — Copy change / layout change / redesign |
| 100 | **How to verify** — Which metric to watch; which follow-up A/B test validates the fix |
| 101 | |
| 102 | ### Step 5: Output Format |
| 103 | |
| 104 | Write a clean report with: |
| 105 | |
| 106 | |
| 107 | PAGE: [/path] |
| 108 | DATE RANGE: [window] |
| 109 | PAGE VIEWS / UNIQUE VISITORS: [page_views] / [unique_visitors] |
| 110 | |
| 111 | HEADLINE FINDING: |
| 112 | [1 sentence capturing the biggest insight] |
| 113 | |
| 114 | CLICK PATTERN SUMMARY (from get_clicks_details + get_clicks_breakdown): |
| 115 | - Primary CTA target + click share: [target] ([share]% of clicks) |
| 116 | - Highest-click element: [target] ([share]% of clicks) |
| 117 | - Total clicks / unique sessions: [total_clicks] / [unique_sessions] |
| 118 | - Notable UTM skew (if any): [utm_source/medium] drives [share]% of a target's clicks |
| 119 | |
| 120 | SCROLL ENGAGEMENT (from get_page_details — single average, not a distribution): |
| 121 | - avg_scroll_percent: [N]% |
| 122 | - Implication: [most visitors likely do / do not reach below-fold content] |
| 123 | |
| 124 | FRICTION PROXIES: |
| 125 | - bounce_rate: [N] |
| 126 | - Top exit pages (get_entry_exit_pages): [pages] |
| 127 | |
| 128 | TOP 3 RECOMMENDATIONS (prioritized): |
| 129 | 1. [Change] — Expected impact: [X] — Difficulty: [level] |
| 130 | 2. [Change] — Expected impact: [X] — Difficulty: [level] |
| 131 | 3. [Change] — Expected impact: [X] — Difficulty: [level] |
| 132 | |
| 133 | SUGGESTED A/B TESTS: |
| 134 | - [Test hypothesis with clear control vs variant] |
| 135 | |
| 136 | |
| 137 | ## Interpretation Cheatsheet |
| 138 | |
| 139 | Based only on Humblytics-available signals (element-level click shares, single `avg_scroll_percent`, `bounce_rate`/exit): |
| 140 | |
| 141 | | Pattern | Likely Cause | Action | |
| 142 | |---------|--------------|--------| |
| 143 | | A generic `Link`/nav `target` dominates clicks, CTA `target` near zero | CTA invisible, weak, or out-competed by navigation | Strengthen CTA prominence; reduce competing links | |
| 144 | | Low `avg_scroll_percent` on a long page | Weak hook, above-fold doesn't earn attention | Rewrite headline or move proof/CTA above the fold | |
| 145 | | CTA clicks concentrated on one variant | Other CTAs are invisible or redundant | Remove redundant CTAs; test single CTA variant | |
| 146 | | High `bounce_rate` + low scroll on a convert-intent page | Above-fold fails to engage | Audit hero copy/offer; move value prop up | |
| 147 | | Click share spread thinly across many targets | No clear visual hierarchy | Add hierarchy: emphasize primary action | |
| 148 | | One UTM source's clicks skew heavily to a low-value target | Mismatched intent from that channel | Align landing experience to that source's intent | |
| 149 | |
| 150 | > Patterns that require pixel coordinates, rage-click detection, or per-device click maps (e.g. "rage clicks on image", "desktop clicks ≠ mobile clicks") are **not** diagnosable from Humblytics — use a dedicated heatmap tool. |
| 151 | |
| 152 | ## Related Skills |
| 153 | |
| 154 | `cro-optimizer` — Combines heatmap findings with funnel data for holistic CRO |
| 155 | `page-cro` — Full 10-point page audit; heatmap analysis is one dimension |
| 156 | `ab-test-generator` — Takes heatmap recommendations and launches them as tests |
| 157 | |
| 158 | ## Shared Frameworks (REQUIRED reading) |
| 159 | |
| 160 | Heatmap interpretation is highly context-dependent. The shared primitives in `skills/_shared/` keep recommendations grounded. |
| 161 | |
| 162 | **`_shared/frameworks/preflight-checklist.md`** — confirm minimum 500 sessions per page-period combo before drawing conclusions. Heatmap patterns on smaller samples are noise. |
| 163 | **`_shared/frameworks/anti-patterns.md`** — heatmap-relevant counter-evidence: |
| 164 | **Mobile hamburger menu**: NN/g says it hurts discoverability on task-oriented SaaS (Spotify hamburger → bottom-tab = +30% menu interactions). **BUT** Amazon's hamburger beat dropdown for browse-heavy ecom. Site_type is load-bearing — don't recommend bottom-tab universally. |
| 165 | **Mobile exit-intent**: architecturally broken (no cursor → no mouseleave event). If heatmap shows users leaving on mobile, the answer is not an exit modal. |
| 166 | **Progress-bar velocity**: NIH RCT shows slow-to-fast progress bars nearly double form abandonment. If your heatmap shows form-step drop-off, audit progress bar acceleration before redesigning fields. |
| 167 | **`_shared/benchmarks/patterns.json`** — when heatmap data confirms a problem (e.g., low scroll past 30%, CTA clicks dominated by a single variant), match to a `pattern_id` and quote the evidence-backed lift range for the fix. Most relevant categories: `cta`, `navigation`, `above_fold`. |
| 168 |
Discussion
Alternatives
Browse more free Claude skills or everything in Design.