Analytics events

Every event Wiqly emits, what triggers each, and the rough shape it takes.

The widget emits five event types to POST /api/widget/{token}/events. Each represents a meaningful step in the visitor journey.

These are also what the dashboard analytics is built on — so understanding them helps you reason about what each KPI actually measures.

Event types

widget_loaded

Fires once per page-load when the widget script successfully initialises and fetches its config. Doesn't require visitor interaction.

This is the denominator for "open rate." Roughly comparable to a page view of any page the widget is embedded on.

widget_opened

Fires when a visitor clicks the floating bubble to open the widget. Real intent — the visitor saw the widget and chose to engage.

Numerator of open rate. Denominator of completion rate.

faq_clicked

Fires when a visitor selects a question from the menu. Includes the faq_item_id of the chosen question.

This is what the top-questions report is built on.

video_completed

Fires when a visitor watches a video all the way to the end. Partial watches don't fire this event. Includes the faq_item_id of the video that just finished (or null for the welcome video).

Numerator of completion rate. Denominator of lead rate.

lead_captured

Fires when a visitor successfully submits an email-capture form. The actual lead data goes through /api/widget/{token}/leads; this event is the analytics-side mirror so the dashboard can show lead counts in the same timeline as other events.

Common payload shape

Every event has:

{
  "event_type": "widget_opened",
  "faq_item_id": "uuid or null",
  "session_id": "anonymous-session-id"
}

faq_item_id is non-null only for faq_clicked, video_completed (on a question, not the welcome), and lead_captured (when from a question's CTA).

session_id is generated per-visitor-per-session in browser sessionStorage. It's anonymous and doesn't persist across visits.

What's NOT tracked

  • No cookies. Session IDs live in sessionStorage, which clears when the tab closes.
  • No IP addresses. We don't log them server-side beyond what's needed for rate limiting (which is hashed and discarded).
  • No third-party pixels. Nothing routes through Google/Meta/etc.
  • No referrer paths or query strings. We capture the hostname of the page the widget loaded on, so you can attribute traffic to a domain. Nothing finer-grained than that.

GDPR / CCPA

The events Wiqly emits do not constitute personal data under either regulation (no PII, no cross-site identifiers, no fingerprinting). You can therefore embed Wiqly without adding it to your consent banner.

If you'd like a Data Processing Agreement (DPA) for compliance documentation regardless, get in touch.

Querying the events yourself

Today the events live in our database and are surfaced through the dashboard. We don't yet expose a "read events" API. If you want to pipe events into your own data warehouse, get in touch — it's something we can do for larger customers but isn't self-serve yet.