Tracking
Browser SDK tracking watches interactions on the page and sends those events to Clickmax.
When to use it
Use tracking when you want to measure behaviour on the page without building a separate integration for every click or view.
Events observed
The SDK can observe events such as:
page_viewbutton_clicklink_clickscrollelement_visibleform_submitcontact_capturedpurchaseinitiate_checkoutscheduling_booked
Public selectors recognised
.cm-checkout-button
Fires button_click.
[data-cx-track="click"]
Fires button_click.
.cm-next-funnel-node
Fires link_click.
[data-cx-track="link"]
Fires link_click.
[data-cx-track="visibility"]
Fires element_visible when the element enters the viewport.
form[data-cx-ingest-form]
Fires form_submit and contact_captured on submit. See Forms.
Only marked elements become funnel triggers
A plain <button> or <a> does not fire an event: the SDK only watches the selectors above. The same applies inside a funnel — Clickmax can list every button, link and form it finds on your page, but only the ones carrying one of the selectors above are offered as a step trigger.
When an element shows up as "detected without annotation", add the Clickmax class or attribute alongside what is already there, without removing anything:
The Clickmax checkout iframe is the exception: it talks to the page on its own and needs no annotation.
Manual tracking
You can also send events manually with the public API:
When to combine it with forms
When the SDK sends a lead successfully, it also records public events that tracking can observe, such as form_submit and contact_captured.
That means you do not need to implement separate tracking just for forms integrated through the Browser SDK.
The same applies to creating a lead via JavaScript: when you call cxs('lead', ...) and the request succeeds, the SDK fires contact_captured automatically — with no separate tracking call.
When to combine it with scheduling
When a visitor completes a booking in the booking widget (the element marked with data-cx-booking), the SDK fires scheduling_booked automatically — the same event funnel analytics uses to count bookings per step, separate from node progression (the visitor can move through the funnel without booking). No separate tracking is needed.
If you handle the booking yourself (outside the widget), fire the event manually when it completes:
scheduledCallId is optional — the booking count uses the visitor, not the payload. Pass it only if you want to store the booking's identifier alongside the event for traceability: