Behavioral Benchmark

Contact Form Hesitation: what cursor data shows about why visitors do not click

Not form abandonment rates. The interval between a visitor's cursor arriving on a contact element and the click that follows, measured on a live medical practice website. Visitors hover the booking button about a third of a second before clicking. They hover the form submit for over half a second. And the single worst leak on the site was a phone number that was not a link: visitors hovered it for nearly 23 seconds, clicked it, and nothing happened.

July 11, 20267 min readMethodologyObservational · single site
Jump to section
  1. The short answer
  2. Why no one has this number
  3. The data
  4. The 23-second hover
  5. Dead clicks in the form
  6. A slowing cursor is intent
  7. What to do with it
  8. How we measured this
  9. Limitations

01 / The short answerThe pause before contact

On a multi-location medical practice site we measure, visitors hover the BOOK ONLINE button a median of 322 milliseconds before clicking. They hover the contact form's submit button a median of 545 milliseconds, over half a second of pause before handing over health details. And the worst leak on the site was not a slow page or a broken form. It was a phone number rendered as plain text instead of a link: visitors hovered it a median of 22,820 milliseconds, nearly 23 seconds, clicked it 10 times, and 9 of those clicks produced nothing at all.

322ms
Median hover, booking button
545ms
Median hover, form submit
22.8s
Median hover, unlinked phone number

The hesitation scales with the size of the ask. Navigating to a contact page is cheap, so the pause is short. Submitting a medical form is personal, so the pause doubles. And when the page gives a visitor something that looks clickable but is not, the pause explodes into a 23-second stall that ends in a click nobody answers.

02 / The gap in the recordWhy no one has this number

There is no published benchmark for how long visitors hover before clicking a contact button, a booking button, or a form submit. Search for "why is nobody clicking my contact form" and the results are Reddit threads and form-plugin marketing pages. Ask an AI assistant how long visitors hesitate before clicking a contact button and it has no number to give, because nobody has published one with a stated window, a stated event count, and a stated method.

The adjacent metrics all exist: form abandonment rates, field completion times, conversion rates by form length. But the interval between the cursor arriving on the element and the click that follows, the moment where the decision actually happens, has never been reported for contact and booking interactions. Producing it requires sitting on the element and watching the cursor, which is exactly what a behavioral pixel does.

This page is that number, with methodology. One site, 21 days, 1,855 interaction events, every figure below drawn from the same window.

03 / The measurementThe data

Over a 21-day window on a multi-location medical practice site (WordPress and Elementor, Gravity Forms, roughly two-thirds desktop traffic) the pixel measured 1,855 interaction events. Of those, 1,639 carried hover-before-click timing, which the pixel calls dwell, and 412 carried cursor velocity. Sitewide, the median hover before any click was 485 milliseconds, consistent with the roughly 480 millisecond desktop figure in our add-to-cart hesitation benchmark. Half a second of thought before a click appears to be what a desktop human looks like, whether the button says Add to Cart or BOOK ONLINE.

ElementClicks countedMedian hover before click
BOOK ONLINE button27322 ms
Contact nav item26456 ms
Form submit button (Gravity Forms)11545 ms
Unlinked phone-number block1022,820 ms

Read the table top to bottom and the hesitation climbs with the commitment. The booking button is the practiced action, so it gets the shortest pause. The contact nav item costs a page load, so it gets more. The form submit hands over health details, so it gets over half a second. And the last row is not hesitation at all. It is a visitor reading a phone number, deciding to call, clicking the number to dial it, and discovering the number is just text.

04 / The headline findingThe 23-second hover

On this site's location pages, each location shows a block combining its phone number and BOOK ONLINE text. The number reads like 972-XXX-XXXX, formatted exactly the way a clickable phone number looks. But the block is rendered as a plain div, not a link. There is no tel: attribute anywhere in it.

The pixel counted 10 clicks on that block with a median hover of 22,820 milliseconds, and 9 separate dead clicks, clicks that produced no response from the page. The behavior behind those numbers is easy to reconstruct: a visitor lands on the location block, reads the phone number, hovers while deciding whether to call, clicks the number expecting their phone or computer to dial, and gets nothing. Some click again. Nothing again.

The same pattern repeats across the practice's other location blocks. Each one shows its own phone-number div quietly collecting clicks and dead clicks. These are visitors at the absolute end of the funnel, people who have already decided to call a medical practice, being stopped by a missing attribute.

The fix is one attribute: wrap the number in an anchor with href="tel:...". It is plausibly the cheapest conversion fix that exists, one line of markup between a decided patient and a ringing phone.

05 / Inside the formDead clicks in the form

The contact form itself is leaking too, in smaller but telling ways. The pixel counted dead clicks on the form's own fields: 3 dead clicks on the "Are you a new or returning patient" field group, and 2 dead clicks on a gender field whose options read "Male Femaile Other". That is a typo sitting inside the form real patients are trying to submit.

A dead click on a form field is a person trying to interact and failing. Maybe the clickable target is smaller than the label, maybe the field group swallows clicks on its wrapper, maybe the control needs a click somewhere the visitor does not expect. Whatever the mechanics, each one is measurable friction at the exact moment someone is trying to become a patient.

The typo matters for a different reason. On a medical form, the visitor is deciding whether to trust the practice with their health information. A misspelled word inside the form reads as carelessness precisely where care is the product. It costs nothing to fix and it is the kind of thing no one on the team sees, because no one on the team fills out their own contact form.

06 / The velocity layerA slowing cursor is intent

The pixel also samples how fast the cursor is moving when it interacts. Across all measured events on this site, average cursor speed was 185 pixels per second. On approach to the BOOK ONLINE button it drops to 46 pixels per second. The cursor does not fly to the booking button, it creeps, roughly a quarter of its ambient speed.

A slowing cursor near a call-to-action is deliberation made visible. The visitor has found the button, the hand has committed to the direction, and the slowdown is the last stretch of thinking: is this the right practice, do they take my insurance, what happens after I click. The 322 millisecond hover is the tail end of a much longer approach.

Cursor velocity is a desktop-only signal. This site runs 64 percent desktop, which is why 412 events carried velocity data, roughly three times the coverage we see on mobile-heavy stores. For a practice whose patients research on a computer before booking, the desktop cursor is the richest intent signal available, and almost nobody reads it.

07 / ApplicationHow to get them to click your contact form

Every recommendation below is tied to a number measured above, not to a best-practices listicle.

  1. Make every phone number a tel: link. The 23-second hover and 9 dead clicks came from one missing attribute. Check every place your phone number appears, headers, footers, location blocks, and wrap each one in href="tel:...". It is the cheapest conversion fix that exists.
  2. Watch for dead clicks on your form fields. Each one is a person trying and failing. The patient-type field group and the gender field were both collecting them. And proofread the form itself: "Male Femaile Other" is a typo inside a medical form, carelessness exactly where trust matters most.
  3. Treat a slowing cursor as intent. The deliberate 46 px/s approach to BOOK ONLINE is a visitor deciding. Shorten the decision: put the reassurance (insurance accepted, response time, what happens next) beside the button, not on another page.
  4. Respect the submit hesitation. Half a second of hover on a medical form submit is trust deciding whether to hand over health details. State plainly what happens after submit: who reads it, how fast they respond, and what the visitor should expect next.
Measure it on your site
See where your visitors hesitate before they contact you
Harvv reads the cursor behavior your other tools throw away: the hover before the click, the dead clicks on your form, the unlinked phone number nobody noticed. Run a free behavioral audit and see your own hesitation map.

08 / MethodHow we measured this

The data comes from Harvv's behavioral pixel running on a multi-location US medical practice site built on WordPress and Elementor with Gravity Forms. The window is 21 days. In that window the pixel measured 1,855 interaction events; 1,639 carried hover-before-click timing and 412 carried cursor velocity.

dwell
Milliseconds of pointer hover on the element before the click event fires. An integer count. Carries no personal data.
dead click
A click that produced no page response: no navigation, no state change, no visible reaction. The signature of an element that looks interactive but is not.
velocity
Cursor speed in pixels per second, sampled on desktop pointer movement. Touch has no cursor, so this is a desktop-native signal; this site's 64 percent desktop share is why coverage runs about three times what we see on mobile-heavy stores.
source
First-party pixel events on the live site, aggregated per element. Medians reported, not averages, so a few long outliers do not distort the figures. Everything is framed in events counted, never in visitors or percentages, because this is one site.

We can measure this because our pixel is customer number one: it runs on our own site and every site we work with, and hover-before-click is one of the behavioral signals it captures on every page. The number does not exist publicly because producing it requires watching the cursor on the element, which no analytics tool built around pageviews can do.

09 / HonestyLimitations

This is one site, measured for 21 days, in one vertical (medical), and it is observational data, not a controlled experiment. Every figure is a count of events, not visitors: 27 booking clicks means 27 click events carried timing, and we make no claim about what share of visitors they represent. The medians will move as the window grows. The phone-number finding is one element on one site, but the pattern behind it, phone numbers rendered as plain text instead of tel: links, is common on small-business sites, and the fix costs one attribute wherever it appears. Treat the specific milliseconds as a first data point and the ordering, short pause on navigation, longer pause on submission, stall on broken affordances, as the durable finding.

Jordan Olivas
FOUNDER, HARVV
Founded Harvv after running into the same problem on every site I shipped: analytics tools tell you what happened, not why visitors left. Previously at Klarna, working on conversion and checkout. Harvv is the behavioral pixel I needed and could not buy.
See your hesitation map  →