UserProof

Record real visitor sessions with a script tag: what it does and how to use it

Updated . By Ryan Doyle, founder of UserProof, a session replay tool for coding agents.

UserProof records what real visitors do on your site from one script tag: clicks, scrolling, errors, form steps and where they leave. Field values are never recorded and it sets no cookies. Your coding agent adds the tag during setup. Free covers 5,000 recorded visits a month across 3 sites, with 7 days kept.

We measured the script on November 6, 2026: 26,862 bytes as a file and 8,701 bytes over the wire with gzip. It loads with defer, so it waits for the page to finish parsing.

Jump to: quick picks · what it records · how to use it · keep part of a page out · limits · price · FAQ

Quick picks: what are you doing?

If you wantUseWhy
Your coding agent to read visits and hand you one fixThis script tagSetup adds it for you, then the agent reads the events through MCP tools.
A scan before any visitor arrivesThe free scanSetup runs it on your live site. It finds broken elements and needs no traffic.
A heatmap, or a surveyHotjar or Microsoft ClarityUserProof has no heatmaps and no surveys.
To pick between replay tools firstOur ranking of 12 toolsPrices and sources for each, with UserProof on the list.

What the script records

The script records 14 kinds of event from each visit and sends them in batches every 5 seconds, at most 100 events a batch. You can read every line of it at ingest.getuserproof.com/sdk.js.

What happenedWhat is kept
Page load and leavingThe address without its query string or hash, page title, referrer, browser and device details, language, time on the page, active time and how far they scrolled.
Clicks and tapsWhere it landed, which element it was, the first 50 characters of its text, and what the page did next. No response at all marks a dead click.
Scrolling, resizing and pointerHow far down they went, the window size, and a summary of pointer movement: a count and a distance, not each move.
NavigationMoves between pages, including the ones a single-page app makes without a reload.
Form stepsThat a field was entered or left, that a form was submitted or refused. Field values are never recorded.
ErrorsJavaScript errors and failed promises on the page, with up to 200 characters of the message.
Text selection and copyThe selected text, capped at 200 characters. Text in a form field is left out.
Three key pressesFind (Ctrl+F or Cmd+F), Escape and copy. No other keys are recorded.
Tab visibilityWhen the visitor switched away and came back.

From those events, UserProof counts dead clicks, rage clicks, errors on click and slow responses. The counts come from the events, never from an LLM. Your coding agent writes the explanation and the fix.

How to use it

  1. Start setup in your site's project folder. Paste the command from the Claude Code setup page. Done looks like the setup skill running in your terminal.
  2. Let the agent place the tag. It adds this line to your site's <head>, in the layout file your framework uses:
    <script defer src="https://ingest.getuserproof.com/sdk.js" data-site="YOUR_SITE_ID"></script>
    Done looks like one new line in the diff, with your site's id in it. No build step or package is added.
  3. Prove it records. The agent opens your local dev server, clicks something and waits for the first event. Done looks like a received status from UserProof, and the agent says where the proof came from.
  4. Deploy. The tag only sees real visitors once it is live. Done looks like the line in your production HTML.
  5. Ask for the top fix. Once visitors have arrived, ask your agent “what should I work on?”. Done looks like one fix with the file and line. After you ship it, UserProof checks whether your goal moved.

Keep part of a page out

Add data-exclude to any element. Inside it, clicks keep their position and element but the text reads [masked], and text selections, copies, mouse movement and form-field events are not recorded. To exclude areas from one place, put selectors in the script tag's own data-exclude attribute. Password fields are always masked. We run the recorder on our own pages, and our funnel calculator keeps its form and results out this way, because the step names you type there are yours.

Limits, stated plainly

Price

PlanPriceRecorded visits a monthSitesRecordings kept
Free$05,00037 days
Pro$29 a month50,000Unlimited90 days
Scale$99 a month250,000Unlimited90 days

Read from our pricing page and plan code on November 6, 2026. Visits are pooled across your sites. To compare that with other tools at your volume, use the session replay cost calculator.

Set up UserProof from the home page

FAQ

Does the script tag slow my site down?

It is 8,701 bytes over the wire with gzip, measured November 6, 2026, and it loads with defer, so it does not block the page from parsing. Events go out in batches every 5 seconds.

Does UserProof record what people type?

Field values are never recorded and password fields are always masked. A click keeps the first 50 characters of the clicked element's text, so mark rich-text editors with data-exclude. Text a visitor selects or copies on the page is recorded up to 200 characters.

Do I need a cookie banner for this script?

UserProof sets no cookies. It does keep a random visitor id in localStorage and a session id in sessionStorage, so whether you need consent depends on the rules where your visitors are. Check that for your own site.

Can I add the tag by hand instead of through setup?

You need a site id first, and setup creates it. In practice the agent writes the tag during setup, and it then proves the tag records, which a hand edit would not do.

Sources, read November 6, 2026