MEASURE · ANALYTICS · EVENTS AND CAPTURE

What is recorded is decided by you.

Each event in the catalog has a name and a meaning, and a type that arrives without a definition is still counted while it waits for a person. Every kind of automatic capture is switched on or off behind an approval card, and the browser sends nothing until the visitor allows it.

Every figure on this page is as of October 2026.
On this pageWhat it does
  1. What it does
  2. Every defined event, in one catalog.
  3. Nine kinds of behaviour, each switched on by you.
  4. A tag on a link, kept as a fact about the visitor.
  5. Choose it on the page, count it from then on.
  6. For developers, on the same page.
  7. Your own events, in code
  8. How it works: how an event travels
  9. What keeps it honest
  10. Common questions

What it does

The catalog

Every defined event, in one catalog.

  • "Catalog" holds 39 built-in events, and every event you add.
GroupBuilt-in events
Pages and content"Page view", "Section viewed", "Element click", "CTA click", "Content click", "Content dwell", "Page engagement", "FAQ expand", "Pricing plan click", "Share", "Picture opened full size", "Outbound click", "File download", "Scroll depth", "Site search", "404 hit"
Video"Video start", "Video progress", "Video complete"
Forms and accounts"Form start", "Form submit", "Lead generated", "Sign up", "Login"
Shop"Product view", "Add to cart", "Remove from cart", "View cart", "Begin checkout", "Purchase", "Refund", "Wishlist add"
Messages and links"Email link clicked", "SMS link clicked", "Tracked link clicked", "Email opened"
Kept by the platform"Exposure", "Goal", "Tick"
  • Five of these come from your own code, sent with praxis.track, and your goals can name them: "Share", "Sign up", "Login", "View cart" and "Wishlist add". The store's own product pages send "Product view".
  • "New event". Define one by hand: its label, its name, what it means, its properties and where its value comes from. An intended weight can be noted on it, as a record only.
  • Enable, disable, archive. Each behind approval.

Automatic capture

Nine kinds of behaviour, each switched on by you.

ClassWhat it recordsMost per page view
Section viewsA section, once at least half of it is in view, once per page view40
Clicks inside sectionsClicks on the links and buttons inside your sections30
Outbound clicksThe host of the site a visitor leaves for, never the full address20
File downloadsClicks on 27 kinds of file, from PDFs and spreadsheets to audio and video20
Scroll depth25, 50, 75 and 90% of the page, each once4
Site searchSearches carried by the q, s, search, query or keyword parameters10
Form engagementThe first interaction with each form, once per page view, and never what was typed10
Video engagementStart; 10, 25, 50 and 75% watched; and the end30
Time on contentThe time a page was actually in view, reported on a 30-second heartbeat; the per-section measure ships switched off20
  • A form built in Praxis reports its submissions from the server; the browser reports a submission only for forms that are not Praxis's own.

Query parameters

A tag on a link, kept as a fact about the visitor.

  • Declare up to 10 parameter names, such as promo, and Praxis captures their values when a visitor arrives with them.
  • Each declared parameter becomes a condition audiences can use: "Query parameter", for a link tagged ?promo=vip.
The Composer's “Track an element” on a demo store's Home: the hero's button chosen as the element, a demo event chosen to attach, and the selector rule it would use.

Track an element

Choose it on the page, count it from then on.

  • In the Composer, "Track an element": "Choose the element", then "Choose the event".
  • Make it a durable action of that page, or a rule by selector: on "Click", "Submit", "Becomes visible" or "Hover"; on this page, under a path prefix, or on every page.

Scripts & events

For developers, on the same page.

  • Your own JavaScript for one page, with the triggers "Page load", "Click", "Submit", "Becomes visible", "Scroll depth", "Toggle open" and "Hover", and an event to capture. "Click", "Submit", "Becomes visible" and "Hover" need a CSS target.

Your own events, in code

  • praxis.track(type, props) records an event of your own, with its properties.
  • When a person signs in, a call from your page to /api/dxp/identity/link joins their browsers into one person.
// Does nothing when the visitor has not allowed analytics.
window.praxis?.track?.("quote_requested", { plan: "pro" });
  • Call it guarded, as above: on a page without your own scripts, a visitor who refused, or whose browser sends Global Privacy Control, gets no measurement script at all, so window.praxis is not there.
  • An event type that arrives with no definition waits in "Needs review" until a person defines it or lets it go.

For developers and AI agents

Needs review and Capture health

"Needs review".

Event types that arrived with no definition, listed for a person to decide.

"Capture health".

The per-page caps for every class, and every event dropped by a cap, counted.

How it works: how an event travels

  1. The visitor's choice comes first.

    The browser sends nothing unless the visitor has allowed analytics. Global Privacy Control always refuses, and Do Not Track refuses until the visitor chooses.

  2. The page sends what you switched on.

    Each automatic class runs only when it is on, and each stops at its cap for that page view.

  3. The server records it.

    The event is stored in your site's own database, stamped with its visit and with how the visitor arrived. Some events are recorded by the server itself: a paid order, or a submission of a Praxis form.

  4. It meets its definition.

    A defined event is read under its definition at once; a type the catalog does not know is still kept, and waits in "Needs review" until a person defines it.

  5. Everything reads the same events.

    Analytics, goals, funnels, experiments and the affinity engine all read this one stream. The affinity engine takes from it only the events that carry what your content is about, and only those you give points to.

What keeps it honest

Approval before collection changes.

Switching a class on or off, binding an element, declaring a parameter and archiving an event each wait at an approval card.

Never what people type.

Form capture records that a form was started, never its contents.

Hosts, not addresses.

An outbound click keeps the host of the site a visitor left for, never the full address.

Limits per page.

Every class has a cap, and every event a cap drops is counted where you can see it.

Points are set in one place.

What an event is worth to the affinity engine changes only through the engine's own tuning, on the Engine tab or by asking the copilot, behind its own approval card; the catalog can only note an intent.

Consent decides.

The browser captures nothing without the visitor's analytics consent. A paid order is still recorded by the server, without the shopper's identity.

Common questions

Do I need a developer?

No, for the catalog, automatic capture, query parameters and element tracking. A developer can add events of your own with praxis.track.

Does Praxis record what people type into forms?

Capture records that a form was started, and a form's submission, never the values in its fields. Two places do keep what people type: a form built in Praxis keeps what was sent in its inbox, and site search capture keeps the words searched.

Will it record every click on the page?

It records clicks on the links and buttons inside your sections, up to its cap, and outbound clicks as the host left for.

How do I join a customer's phone and laptop?

Call /api/dxp/identity/link from your page when they sign in. Each site sets its own policy for how that person is counted.

What happens to an event my site sends that has no definition?

It waits in "Needs review" until a person decides.

How long are raw events kept?

As long as you choose for each kind of automatic capture, from 1 to 3,650 days, and everything by default. Nothing is deleted before an archive export covers it.

Do my events teach the affinity engine?

Only events that carry what your content is about, and only the ones you give points to. A plain page view teaches it nothing.