Once the Zenovay tracker is loaded on your page, it exposes a global function window.zenovay(). It uses a command-style API: the first argument is the command ('track', 'identify', 'goal', 'revenue', …), followed by command-specific arguments. Use the track command to record anything that isn't a pageview — clicks, form submissions, business events.
The simplest call
window.zenovay('track', 'cta_clicked');
That sends a single event with no properties. It will appear in your domain's Analytics tab in the dashboard within ~30 seconds.
With properties
window.zenovay('track', 'cta_clicked', {
cta_label: 'Start free trial',
page_section: 'hero',
variant: 'B'
});
Property values can be strings, numbers, or booleans. Nested objects and arrays are not supported — flatten them at the call site.
Revenue events
For purchases, use the dedicated revenue command. It takes the amount and currency directly:
window.zenovay('revenue', 29.00, 'USD');
This records a revenue conversion that populates your Revenue tab. If you omit the currency it defaults to USD.
If you'd rather attach extra context, you can also fire a regular event and include the amount and currency as properties:
window.zenovay('track', 'purchase', {
revenue: 29.00,
currency: 'USD',
product_id: 'pro-annual'
});
Identifying a user
When a visitor logs in, link the session to their account with the identify command:
window.zenovay('identify', 'user_42', {
email: '[email protected]',
plan: 'pro'
});
You can also pass a single object if you prefer:
window.zenovay('identify', {
user_id: 'user_42',
email: '[email protected]',
plan: 'pro'
});
After this call, the visitor profile is stored and subsequent events are associated with that identity.
Property naming conventions
Use snake_case (page_section, not pageSection). The dashboard groups properties alphabetically — consistent naming makes filters easier.
The tracker already captures context such as URL, referrer, screen size, browser, OS, and approximate location automatically, so you don't need to send those yourself.
Plan limits
Custom events count toward your monthly event quota:
| Plan | Monthly events |
|---|---|
| Free | 10,000 |
| Pro | 100,000 |
| Scale | 1,000,000 |
| Enterprise | Custom |
Common pitfalls
- Calling before the tracker loaded — wrap calls in an
if (window.zenovay)check, or queue them before the script runs. The tracker replays anything you push ontowindow.zenovay.q:window.zenovay = window.zenovay || function(){(window.zenovay.q = window.zenovay.q || []).push(arguments)}; window.zenovay('track', 'cta_clicked'). - Sending PII as a property — emails, names, and phone numbers should not be sent as custom-event properties. Use the
identifycommand for account data instead. - Cookieless mode +
identify— when running in cookieless mode the identify call still works for the current page, but the link is reset on the next page load (no persistent storage).