Local-first data handling

Privacy policy

ScrollTest runs wheel-event measurement in your browser. There is no login, public leaderboard, advertising profile, or server-side database of test results.

Last updated: 23 August 2026

What the test processes

While a test is active, ScrollTest processes browser-reported wheel-event values such as deltaX, deltaY, deltaMode, up/down/horizontal/zero classification, monotonic timestamps, and event intervals. It also processes the input category, mode, selected duration, interruption state, callback-delay context, and diagnostic summary needed to show the result.

The ordinary measurement path does not upload the raw event trace to a ScrollTest results service. Raw traces remain in the browser unless you explicitly download or otherwise share an export.

Hardware device tests

The webcam, microphone, headphone, sound, keyboard, mouse, controller, touch screen, dead pixel, and monitor tests read real devices through browser APIs. Everything they capture is processed in the page and is not uploaded: no video, audio, keystroke, pointer, touch, or gamepad data is sent to ScrollTest or to any third party, and these pages send no custom analytics events at all. They are covered only by the ordinary page view described under Analytics and hosting below.

The microphone and webcam tests are the places ScrollTest asks for browser permissions. They call getUserMedia, and your browser — not this site — decides whether to grant them. The microphone waveform and level meter are computed from the audio stream with the Web Audio API inside the tab; the optional recording is held as an in-memory clip for playback and is discarded when you leave the page. The webcam preview is rendered straight from the video stream inside the tab, the test asks for video only so your microphone is never activated by it, and a snapshot exists only as an in-memory image until you download it or leave. Neither capture is transmitted, and nothing is written to storage unless you explicitly download a recording or snapshot.

Each capture is released as soon as it is no longer needed. Stopping a test, switching device, navigating away, or closing the tab stops every track (and closes the audio context where one was opened), which is what turns off the browser and operating-system recording indicators. If a test cannot finish starting after permission is granted, the capture is stopped before the error is shown rather than being left running behind it. If a device is unplugged or its permission is revoked while a test is live, the page reports that instead of continuing to show a dead meter or frozen frame.

The keyboard test intercepts most key presses while it is capturing so it can observe them; Escape always ends the capture, and reload, close-tab, new-tab and address-bar shortcuts keep working. The touch, dead pixel, and monitor tests can fill the screen, and Escape always leaves that state. No device test reads a device you have not started it on, and none of them run in the background after you leave.

Local history and retention

Compatible result summaries, diagnostic protocol completions, setup scope, and valid callback-delay context can be saved in browser local storage so you can compare at least three same-scope protocols. Runs from a different metric version, mode, duration, input category, or declared setup are not combined. Runs delayed by more than 250 ms at the timer boundary are invalid and are not saved for comparison. Local storage persists across visits until you clear history in ScrollTest, clear this site's browser data, use a private session that removes it, or the browser evicts it. ScrollTest does not promise permanent local retention.

The scroll speed, scrolls per second, average scroll speed, horizontal scroll, and distance challenge pages keep their own short log in the same browser storage: your most recent completed runs, up to eight, at the exact duration or distance goal you selected, plus the best figure recorded at that setting. Each run records only its window, distance in pixels, wheel event count, and the rates derived from those. A run you stopped early, or one cut short because the tab was hidden, is shown to you but is never added to that log. Nothing is uploaded, and the “Clear saved runs” button under the test removes both the log and the record for that setting.

Stored records carry a metric version. When an older record cannot be interpreted safely under a newer measurement definition, the application may ignore or discard it instead of presenting an invalid comparison.

Share URLs are not private or verified

If you choose to share a result, a small summary may be placed in the page's query parameters. An ordinary share URL does not contain the raw event trace. Anyone can edit those values, so ScrollTest visibly labels a loaded shared result as self-reported and unverified. Validation can reject malformed values but cannot prove a run happened.

A URL can be stored in browser history, copied to a clipboard, sent to another person, included in a screenshot, processed as part of a hosting request, or retained by the service through which you share it. Remove the query string before sharing if you do not want the summary included. ScrollTest cannot delete copies held by recipients or other services.

Reports and raw exports

An export is created locally only when you request it. A summary report includes its report ID and generation date, declared setup, input category and input-device connection type (or explicitly unknown), protocol, browser and operating-system context, metric version, duration, validity and callback-delay context, result summary, definitions, measurement limits, and https://www.scrolltest.io/methodology. These declared fields are self-reported context; ScrollTest does not infer physical hardware. A raw export additionally includes the captured event trace and therefore requires a separate explicit action.

ScrollTest does not add an account identifier, name, email address, or advertising ID to the report. Once downloaded, the file remains wherever you save or send it until you or the recipient deletes it. Review a file before attaching it to a public support post.

Analytics and hosting

The site uses Vercel for hosting and Vercel Web Analytics for aggregate page-use measurement. Those services can process request and page-view information needed to deliver and measure the site, such as the requested page, referrer, approximate region, browser, operating system, device category, and network or security metadata. ScrollTest also sends allowlisted product events for test start, completion, cancellation or abandonment, visibility interruption, coarse mode/input/duration/version context, repeat milestones, share, report export, raw export, diagnostic outcome category, and opening the troubleshooting guide from a diagnostic report.

Product-event payloads do not include setup labels, delta values, raw traces, user-agent strings, share values, report IDs, exported report contents, or other sensitive or high-cardinality values. Browser and operating-system details belong in a user-requested local report, not in ScrollTest's custom event payloads.

Vercel's retention and handling of infrastructure and analytics data are controlled by the deployed account configuration and Vercel's current terms and privacy policy. ScrollTest does not combine those aggregate measurements with user accounts because the product has no user accounts.

Cookies and browser permissions

ScrollTest's test history uses local storage rather than an account cookie. The application does not set advertising cookies and does not request mouse hardware access; it listens for wheel events only while a capture is armed or running. Whether armed by pointer or keyboard, the active capture receives wheel input anywhere on the page; the interface provides a visible cancel control and an Escape shortcut. Ordinary page scrolling remains unblocked outside an armed or running capture. The microphone and webcam tests are the only features that request browser permissions, and only when you start them; see Hardware device tests above. Hosting and security infrastructure may apply technical controls under the provider's policy.

Your deletion controls

  • Use the clear-history control to remove ScrollTest history and comparison data.
  • Clear site data for www.scrolltest.io in browser settings to remove local storage.
  • Remove result query parameters from the address bar and browser history.
  • Delete downloaded reports or raw exports from your device and backups.
  • Ask recipients or third-party services to delete copies you previously shared.

Because ordinary test history is not stored in a ScrollTest account or result database, there is no server-side test profile for us to look up or delete.

Children and sensitive information

ScrollTest is a general utility and is not designed to collect personal information from children. Do not put names, contact details, secrets, health information, or other sensitive material into a URL, setup label, report, or public support post.

Policy changes and contact

This policy may change when the product's storage, sharing, analytics, or hosting behavior changes. The date above identifies the published version.

Questions about this policy can be sent to privacy@scrolltest.io. For metric definitions and technical limits, read the measurement methodology.