Script configuration
Configure tracking with attributes, not code.
The tracking script reads `supr-*` attributes on its tag and on your elements, and `window.supr()` covers the rest: goals, identification, manual pageviews and the visitor id for checkouts.
14-day free trial · No card required · From $9/month
On the script tag.
Only supr-website-id is required. The rest change how visitors are counted and where events go.
- supr-domain
- Sets the visitor cookie on your main domain, so
www.,app.and other subdomains count as one visitor. - supr-allowed-hostnames
- Your other domains, comma-separated. Links between them keep the same visitor, so a payment on one credits visits on another.
- supr-api
- Where events are sent: a full URL or a path on your website, for serving through your own proxy.
- supr-hash and supr-allow-localhost
- Count
#/routechanges as pages, and recordlocalhostwhile you test. - supr-cookieless
- Sets no cookies at all; visitors are recognised with a daily hash instead.
- supr-outbound, supr-polar, supr-dodo, supr-paddle
- Set to
falseto stop tracking outbound clicks, or to stop adding the visitor id to that provider's checkout links.
On your elements.
Goals and privacy settings straight in your HTML, with no JavaScript.
- supr-goal
- A click on the element completes the goal:
<button supr-goal="start_trial">. Eachsupr-goal-*attribute becomes a property. - supr-scroll
- The goal completes when the element scrolls into view, with
supr-scroll-thresholdfor how much must show andsupr-scroll-delayfor how long. - supr-mask and supr-block
- Hide an element's text, or leave it out entirely, in session recordings and heatmap snapshots.
From JavaScript.
One global function, window.supr, for what attributes can't do.
window.supr("signup", { plan: "pro" })completes a goal with up to 10 propertieswindow.supr("identify", { user_id, email, name })names the visitor: see user identificationwindow.supr("pageview")sends a pageview, for a router the script can't seewindow.supr.visitorId()andwindow.supr.sessionId()return the ids to pass to a checkout
A one-line stub in the <head> queues calls made before the script has loaded. The docs have it.
How it works, in detail.
The docs page “Script configuration” goes through it step by step.
Limits worth knowing
- No automatic download tracking: add
supr-goalto a download link to count its clicks - Goal names are lowercased, spaces become underscores, and they're cut at 64 characters
- Up to 10 properties per goal, with keys up to 32 characters and values up to 255
- Optimisation plugins that strip unknown attributes can break the tag; check the page source still has
supr-website-id
Questions, answered.
Which attribute is required?
supr-website-id, which says which website the visits belong to. Everything else has a default.Are outbound links tracked?
supr-outbound="false".Are file downloads tracked?
supr-goal="download_pdf" to the link, and each click completes that goal.Can I leave my own visits out?
#supr-ignore at the end of the address, or ?supr_ignore=true, and that browser is left out from then on. #supr-track undoes it.Can I track without cookies?
supr-cookieless="true" sets no cookies and recognises visitors with a daily hash. The trade-offs are in cookieless tracking.More features
- One script, every frameworkA line in the head of your pages, with guides for every common framework and builder.Open
- A prompt for coding agentsOne prompt sets up tracking, goals and checkout tagging with your coding agent.Open
- MCP serverAsk Claude, ChatGPT or any MCP client about anything on your dashboard in plain words.Open
- CLISee every website's traffic, revenue, uptime and what to fix from your terminal.Open
- REST APIRead every report, and send goals, payments and crawler hits from your server.Open
- User identificationPut a name and an email on a visitor, so journeys and chats show who they are.Open
- Tracking parametersUTM tags and ref links, and how channels are worked out from them.Open
See it on your own website.
Every feature is on every plan, with a free trial and no card.
14-day free trial · No card requiredPricingHow it worksAll features