The Events tab lets you define tracking events to capture specific visitor actions on your website. Track button clicks, form submissions, scroll milestones, element visibility, or fire custom events from your own code. Any event can be marked as a conversion goal to measure campaign effectiveness.
Fires when a visitor clicks on an element matching the CSS selector.
Setting
Description
CSS Selector
Target element selector (e.g., #cta-button, .buy-now, a[href="/contact"])
Page URL
Optional — limit tracking to a specific page
What is captured:
Element text content (first 100 characters)
Element tag name (button, a, div, etc.)
CSS selector that matched
Current page URL
Use browser DevTools to find the right CSS selector. Right-click the element → Inspect → right-click the HTML tag → Copy → Copy selector.
Examples of CSS selectors:
/* Button by ID */#buy-now-btn/* All buttons with a specific class */.add-to-cart/* Link to a specific page */a[href="/pricing"]/* Button inside a specific section */.hero-section .cta-button/* Any element with a data attribute */[data-action="subscribe"]
Fires when a visitor submits a form matching the CSS selector.
Setting
Description
CSS Selector
Target form element (e.g., #contact-form, .signup-form)
Form Fields
Optional — allowlist of field names to capture (e.g., email, phone, name)
What is captured:
Values from <input>, <select>, and <textarea> fields
Field names and their values (up to 500 characters per field)
Password and hidden fields are automatically excluded
By default, all visible form fields are captured. Use the Form Fields allowlist to limit data collection to specific fields and avoid capturing sensitive information.
Fires when a specific element becomes visible in the browser viewport. Similar to Scroll, but focused on tracking whether a particular UI element was seen.
Setting
Description
CSS Selector
Target element (e.g., .promo-banner, #special-offer)
Use cases:
Track impressions of promotional banners
Measure visibility of important CTAs
Detect if dynamically loaded content is seen (works with SPAs)
The tracker uses a MutationObserver to watch for dynamically added elements. If the target element is rendered by JavaScript after page load (React, Vue, etc.), it will still be detected.
Fires when you call the JavaScript API from your own code. This is the most flexible event type — you control exactly when and with what data the event fires.
Setting
Description
Name
Event name that matches the name used in RevolTracker.track()
Custom events are covered in detail in the Custom Events API section below.
Mark form submissions as conversions — contact forms, quote requests, newsletter signups. These are clear indicators that a visitor became a lead.
E-commerce
Mark add to cart or purchase completed custom events as conversions. Track the full funnel from page view to purchase.
Engagement
Mark scroll past pricing or video play events as micro-conversions. These indicate strong interest even without a form submission.
Calls and chats
Mark phone number click or chat widget opened events as conversions. These show intent to engage directly.
You can have multiple conversion goals active at the same time. The Dashboard Conversions KPI counts unique sessions with at least one conversion event — so a session that triggers 3 conversion events still counts as 1 conversion.
Custom events give you full control over event tracking from your own JavaScript code. Use them when automatic tracking (clicks, forms, visibility) isn’t enough — for dynamic interactions, multi-step processes, or business-specific actions.
Each RevolTracker.track() call adds the event to an internal buffer
Every 5 seconds, all buffered events are sent to the server in a single request
On page unload, any remaining events are sent via sendBeacon() for reliability
Maximum 50 events per batch — excess events are dropped
You don’t need to create an event definition in the dashboard for custom events to be recorded. Undefined custom events are still stored with their data — but they won’t have a fire count in the Events list. For full tracking, create a matching event definition with the same name.
If you’re not sure which elements to track, you can use Claude Code to analyze your website and suggest an optimal event tracking setup.
Prompt for website analysis
# Instruction: Generate CSS Classes for Website Event Tracking## ContextI use the Revol tracking system, which tracks user actions onwebsites via CSS selectors. The tracker is embedded with a singlescript and automatically listens for events on elements matchingthe specified CSS selectors. No additional JS code is needed onthe website (except for AJAX forms, see below).## How Event Tracking WorksThe system supports 5 event types:- click — element click. Uses document.addEventListener('click') + e.target.closest(css_selector), delegated on document in capture phase.- form_submit — form submission. Uses document.addEventListener('submit') + checks css_selector on the <form> tag.- scroll — scroll to element. IntersectionObserver with threshold (0-100%), fires once per session.- visibility — element appeared in viewport. IntersectionObserver, one-time.- custom — manual JS call: RevolTracker.track('Name', {data})## Your Task### Step 1: Analyze All Website PagesGo through all HTML/template files and find:1. Buttons (buttons/links) — CTAs, navigation, actions2. Phone numbers — <a href="tel:...">, text blocks with numbers3. Email links — <a href="mailto:...">4. Messengers — Telegram, Viber, WhatsApp links5. Forms — contact, applications, subscriptions, orders6. Clickable blocks — cards, banners, sections with links7. Conversion elements — cart, checkout, registration### Step 2: Add CSS Classes for TrackingFor each found element, add a CSS class with the rv- prefix:Naming convention: rv-{type}-{section}-{action}Types: btn, link, form, block, scrollExamples:- rv-btn-hero-cta — CTA button in hero section- rv-btn-header-phone — phone click in header- rv-btn-footer-phone — phone click in footer- rv-btn-pricing-order — order button on pricing page- rv-btn-header-telegram — Telegram click in header- rv-form-contact — contact form- rv-form-callback — callback request form- rv-block-services-card — service card click- rv-link-nav-about — "About" navigation link- rv-scroll-testimonials — scroll to testimonialsRules:- rv-* class is added IN ADDITION to existing classes- One element = one rv- class- Class should be unique per page (or intentionally shared for similar elements, e.g. all service cards)### Step 3: Form RulesThe rv-form-* class goes on the <form> tag, NOT on the submit button: Correct: <form class="contact-form rv-form-contact" action="/submit"> <input name="phone" type="tel"> <button type="submit">Submit</button> </form> Incorrect: <form class="contact-form"> <button class="rv-form-contact" type="submit">Submit</button> </form>AJAX forms (without native submit):If a form is submitted via JS (fetch, axios, $.ajax) withouta native submit event, the tracker will NOT catch it. Signs:- e.preventDefault() + fetch/axios/$.ajax in handler- Form without action or with action="javascript:void(0)"- Button has type="button" instead of type="submit"For such forms, add a manual call alongside the AJAX submission: RevolTracker.track('Contact Form', { form: 'contact' });In the events table, mark such forms as type custom insteadof form_submit and note that a manual call is needed.### Step 4: Create the Events TableEvent names should be in English. Table format:# | Event Name | CSS Selector | Type | Conversion? | Page | DescriptionExample:1 | Hero CTA Click | .rv-btn-hero-cta | click | Yes | Home | Main CTA button in hero banner2 | Header Phone Click | .rv-btn-header-phone | click | Yes | All | Phone number click in header3 | Footer Phone Click | .rv-btn-footer-phone | click | Yes | All | Phone number click in footer4 | Telegram Click | .rv-btn-header-telegram | click | Yes | All | Telegram link click5 | Contact Form | .rv-form-contact | form_submit | Yes | Contact | Contact form submission6 | Callback Form | .rv-form-callback | form_submit | Yes | Home | "Call me back" form7 | Service Card Click | .rv-block-services-card | click | No | Services | Service card click8 | Nav — About | .rv-link-nav-about | click | No | All | Navigate to About page9 | Scroll to Testimonials | .rv-scroll-testimonials | scroll (80%) | No | Home | Scrolled to testimonials10 | Application Form (AJAX) | — | custom | Yes | Services | AJAX form, needs RevolTracker.track()### What Counts as a ConversionYes — conversion:- Phone click (<a href="tel:...">)- Email click (<a href="mailto:...">)- Messenger clicks (Telegram, Viber, WhatsApp)- Any form submission (application, order, contact)- CTA button clicks ("Order", "Buy", "Book", "Get a Quote")No — not a conversion:- Navigation links- Info block/card clicks (unless CTA)- Scroll/visibility events- Social media clicks (unless CTA)## Response Format1. File changes — which rv-* classes to add, with diff2. Events table — full list of events with all columns3. AJAX forms — separately list forms requiring a manual RevolTracker.track() call, with ready-to-use codeMy website is: [PASTE URL]Business type: [e.g., e-commerce, SaaS, services, agency]Main conversion action: [e.g., form submission, purchase, booking]