Appearance
Events
Prism tracks four kinds of events: the automatic PageView, a set of auto-captured events that need no site changes at all, declarative events via HTML attributes, and programmatic events via the JavaScript API.
Running an e-commerce store?
See E-commerce events for the full journey — product views, cart, checkout steps, and purchases — most of which auto-capture the same way the events below do.
Automatic: PageView
Fired once per page load, no configuration needed. Carries the URL, referrer, UTMs, and any ad click IDs.
Automatic: auto-capture
The snippet also infers common events on its own, with nothing added to your site. Every one of these is marked prism_auto: true.
| Event | Fires on |
|---|---|
FormSubmit | A form submission. Customer-data fields (email, phone, name, city, state, zip) are detected, hashed in the browser, and attached — see Customer data & privacy. |
FormEngage | The visitor's first real interaction (typing or changing a field) with a lead form — a form with an email or phone field. Carries form_name and form_platform, never any field values. |
FormAbandon | Leaving the page after engaging a lead form without submitting any form. At most once per page view, with engaged_seconds since the first interaction. Carries no field values. |
Call | Click on a tel: link |
EmailClick | Click on a mailto: link |
BookingClick | Click through to Calendly, Acuity, Cal.com, Setmore |
ChatClick | Click through to WhatsApp / Messenger, or engagement with an embedded chat widget |
ScrollDepth | Reaching 25 / 50 / 75 / 90% of the page (depth property) |
TimeOnPage | 15 / 30 / 60 / 180 seconds of active time — the clock pauses while the tab is hidden (seconds property) |
FormSubmit and confirmed submissions. For Elementor Pro, Contact Form 7, Gravity Forms, WPForms, and Ninja Forms, Prism waits for the plugin's own success event and sets form_confirmed: true. Nothing is sent if the submission is rejected by validation, spam filtering, or a server error. For any other form only the submit attempt is observable, so the event carries form_confirmed: false. Forms containing a password or search field are ignored entirely, as are forms with no email or phone field.
FormEngage and FormAbandon use the same lead-form rules — login, search, and filter forms never produce them. They're engagement signals for reporting (form conversion-rate and drop-off), not conversions: Adsidian never counts them in True ROAS or lead totals, and like all auto-captured events they're held back from ad platforms unless explicitly opted in. Both are best-effort by nature — a visitor who leaves via the browser's back-forward cache and later returns to finish the form can register an abandonment ahead of the eventual submission.
Auto-captured events are not sent to Meta or Google by default. They're inferred, so they're collected and reported in Adsidian but held back from your ad platforms until your agency opts specific ones in. That's also where FormSubmit gets promoted to a conversion: Prism can't know whether a given form is a quote request or a newsletter box, so the mapping to Lead is a per-client setting rather than a guess in the snippet.
Auto-capture never competes with your own tracking. A form or link already carrying data-prism-event is left alone, so you'll never get both events for the same action.
Declarative: data-prism-event
Add an attribute to any form or clickable element — no JavaScript required.
Form submission (fires on submit):
html
<form data-prism-event="Lead">
...
</form>Click (fires on click of the element or anything inside it):
html
<a href="/book" data-prism-event="AppointmentRequest">Book now</a>
<button data-prism-event="Purchase" data-prism-value="49.00">
Buy — $49
</button>data-prism-value (optional, clicks only) attaches a numeric value to the event — used as the conversion value when the event is delivered to Meta / Google Ads.
Programmatic: window.prism('track', ...)
For anything the attributes can't express — post-AJAX confirmations, SPA route changes, multi-step funnels:
js
window.prism('track', 'Lead');
window.prism('track', 'Purchase', {
value: 129.0,
currency: 'USD',
order_id: 'A-1042',
});The snippet queues calls made before it finishes initializing, so you can call prism('track', ...) at any time after the script tag.
Any properties you pass ride along with the event and are visible in Adsidian analytics. A few property names are special — they're treated as customer data, hashed in the browser, and never sent raw. See Customer data & privacy.
Naming events
- Use
PascalCasenames:Lead,Purchase,AppointmentRequest,SignUp. - Be consistent — analytics, Meta event mapping, and Google conversion mapping are all keyed by exact event name.
- Lead-style events: the dashboard's built-in funnels treat
LeadandAppointmentRequestas lead events. - Meta restricted categories: for advertisers in special categories (health, housing, credit, …) Meta silently drops standard event names like
LeadorSchedule. Your agency can remap your event names to Meta-safe custom names in the dashboard — you don't need to change your site.
What every event carries automatically
adsidian_id— the 1-year server-issued identity- Ad click IDs captured on any prior visit (
fbclid,gclid,ttclid, LinkedIn, Snapchat) — held in 90-day first-party cookies - UTM parameters (
utm_source…utm_content) - Page URL, referrer, user agent
- Meta's
_fbpbrowser ID (created by Prism if no Meta pixel is present)