Hydra logoHydra · Hydra Support

Analytics & Reporting

Site Activity dashboard

The admin dashboard that reads from your tracking-enabled widgets — pageview trends, top URLs, custom events, and a high-intent anonymous-visitor cohort, scoped per widget and per time window.

Site Activity dashboard

The Site Activity dashboard is where the data captured by tracking-enabled widgets shows up. It lives at Marketing → Site Activity, alongside Marketing → Outreach, and surfaces the visitor_events stream as charts, tables, and a high-intent visitor cohort. What you see depends entirely on which widgets have tracking turned on — the pipeline that produces this data is documented in Site Activity tracking.

The setting lives at Marketing → Site Activity.

Filters at the top

Two controls sit above every section on the page:

  • Widget — a dropdown of every widget on your tenant. Defaults to All widgets, which aggregates events across every widget that has tracking on. Pick a single widget to scope every tile, chart, and table below.
  • Time range — pills for 24h, 7d, 30d, and 90d. Default is 7d.

When you select a single widget (not "All widgets"), a third pill appears inline: Tracking: on or Tracking: off. Clicking it flips tracking_enabled on that widget's config in one round-trip — no need to leave the page. The pill only acts on the selected widget; it doesn't fan out across all widgets when you're in "All widgets" mode.

Headline tiles

Five tiles span the top of the page, all scoped to the current widget filter and time window:

  • Pageviews — total pageview events recorded in the window.
  • Unique visitors — count of distinct anonymous visitor IDs that produced at least one event.
  • Identified — count of events that came from a visitor who is already linked to a customer record (via chat capture, an hydra.identify() call, or a login flow). This is a count of events from identified visitors, not a count of new identifications in the window.
  • Avg session — mean session duration. Sessions are bounded by a 30-minute inactivity gap: contiguous events with no more than 30 minutes between them count as one session.
  • Custom events — total custom-event count, plus the number of distinct event names in the window.

Pageviews over time

A line chart of pageview volume across the window. The bucket size adapts to the time range:

  • 24h → 24 hourly buckets
  • 7d → 7 daily buckets
  • 30d → 30 daily buckets
  • 90d → 13 weekly buckets

Hover any point to see the raw count for that bucket. Empty buckets render as zero, not as gaps.

Top URLs

The top 10 paths by pageview count, with the unique-visitor count for each. URLs are shown as paths (no host) — if the same path is hit on both a staging and a production origin, they're treated as one row in this table because the path is what's compared.

Top custom events

The top 10 custom event names by volume, with count, unique visitors, and last-fired timestamp. The event names here are the strings your site code passes to hydra.track('name', props) — they come from your own instrumentation, not from anything Hydra defines. If a name doesn't appear, either no widget on a tracking-enabled page has fired it in the window, or the event hasn't been instrumented yet. See Site Activity tracking for how to wire hydra.track() calls.

High-intent visitors

A table of up to 25 anonymous visitors from the last 24 hours who match either of these patterns:

  • At least 3 pageviews on key marketing pages — /pricing, /compare/*, /answers/*, or /best/*.
  • At least 5 total pageviews, regardless of which pages.

Identified visitors are excluded — once someone chats or fires hydra.identify(), they show up in the CRM as a Lead or Contact, and their full timeline appears on that record's detail page instead of in this list.

Each row shows:

  • Anon ID — the visitor's anonymous ID, truncated in the middle for readability.
  • Key URL views — count of hits on the four key marketing-page patterns.
  • Total pageviews — count of pageviews across all paths.
  • Last seen — relative timestamp ("3m ago", "47m ago").

Clicking any row opens a session-grouped timeline modal showing the visitor's full history (up to 500 events) — not just the 24h window that surfaced them in the cohort. Events are broken into sessions by the same 30-minute inactivity rule used in the Avg session tile.

Empty states

The page handles three flavors of "no data" distinctly:

  • No widget has tracking on — the dashboard renders a single explainer card with a pointer to the per-widget tracking toggle. No tiles, no charts, no tables.
  • The selected widget has tracking off — when you've picked a specific widget in the filter and that widget's tracking_enabled is false, the page shows a "Tracking is off for [widget name]" card with the inline toggle pill so you can flip it on without leaving.
  • Tracking on, no data yet — each section renders its own empty state independently. The pageviews chart shows a zero baseline, the tables show "No events in this window," and the high-intent cohort shows "No high-intent visitors in the last 24 hours."

Permissions

  • Any teammate can view the Site Activity dashboard.
  • Only admins and owners can flip the Tracking: on/off pill. Members see the pill as read-only.

The toggle action is recorded in Team → Audit log as "Updated widget", with a diff payload showing the previous and new tracking_enabled value alongside the widget's display name.

Frequently asked questions

Why don't I see any data on a brand-new widget? Tracking is off by default for every newly created widget. You have to flip it on per widget — either with the inline pill on this page (when a single widget is selected) or via the widget config. Once tracking is on, events start landing the next time the widget loads in a visitor's browser; there's no historical backfill.

Why doesn't a visitor I know I identified show up in the "Identified" tile? The tile counts events produced by visitors who were already identified at the time of the event. A visitor who browses anonymously and then identifies near the end of the window only contributes the events that fired after the identify call. Their earlier anonymous events still count toward Unique visitors and Pageviews but not toward Identified.

Why aren't my Leads and Contacts showing up in the high-intent visitors table? The cohort is intentionally anonymous-only. Once a visitor identifies — through chat capture, an hydra.identify() call, or your login flow — they move out of this list and into the CRM. Their full session timeline (including everything from when they were still anonymous) lives on their Lead or Contact detail page.

Can I change which URLs count as "key marketing pages"? Not in v1. The match list is fixed: /pricing, /compare/*, /answers/*, and /best/*. If you need a different intent definition for your funnel, mention it and we'll factor it into the prioritization for a later wave.

Do bot-driven widget conversations count as pageviews? No. Chat interactions flow through /api/widget/init and /api/chat, not through the tracking pipeline. The pageview that loaded the page where the chat opened does count if tracking is on, but the chat messages themselves don't generate visitor_events rows.

What happens when I delete a widget? The widget's visitor_events rows cascade-delete with the config row. The dashboard's totals drop accordingly the next time it loads. If you want to preserve the data, turn tracking off on the widget instead of deleting it — the existing events stay until the retention window purges them.

Is there a webhook or Slack delivery for high-intent visitors? Not in v1. The high-intent cohort is read-only on this page. Outbound delivery (a webhook firing when an anonymous visitor crosses the threshold, or a Slack notification) is on the roadmap; reach out if it's a blocker.

Why do I see fewer unique visitors than I expect compared to GA4 / PostHog? Hydra's anonymous visitor ID is per-origin and lives in localStorage on your domain — the same visitor on app.example.com and marketing.example.com is two different IDs. Clearing site data, switching browsers, and incognito mode all mint a new ID. See Site Activity tracking for the identity model in full.