Tracker Reference

Script Size

~650 bytes minified. No external dependencies.

What It Collects

Data

How

Privacy

Page URL

location.href

No PII

Referrer

document.referrer

Domain only stored

Viewport width

window.innerWidth

Bucketed: mobile/tablet/desktop

Time on page

Date.now() delta on navigation

Seconds only

Scroll depth

scrollTop / scrollHeight

Max percentage

LCP

PerformanceObserver

Milliseconds

INP

PerformanceObserver (event timing)

Milliseconds

CLS

PerformanceObserver (layout shift)

Score

What It Does NOT Collect

  • Cookies (none set, none read)

  • localStorage / sessionStorage (never accessed)

  • IP address (used server-side for GeoIP, then discarded)

  • Device fingerprint (no canvas, font, or WebGL probing)

  • User identifiers (daily-rotating hash prevents cross-day tracking)

  • Form inputs or page content

Events Sent

Event

When

Payload

Pageview

Page load

URL, referrer, viewport

Navigation

SPA pushState/replaceState

URL, time on previous page

_leave

visibilitychange (hidden)

Duration, scroll depth

_vitals

visibilitychange (hidden)

LCP, INP, CLS

Custom

antics.event(name, props)

Name + properties

SPA Support

The tracker automatically intercepts history.pushState and history.replaceState to track SPA page transitions. Works with React Router, Vue Router, SvelteKit, Astro, and any framework that uses the History API.

Custom Events API

// Track a conversion
antics.event('signup', { plan: 'pro' });

// Track a download
antics.event('download', { file: 'whitepaper.pdf' });

// Track a form submission
antics.event('contact_form', { source: 'footer' });

Event properties are stored as JSON and can be viewed in the Events page of the dashboard.