Analytics module

The Analytics module is the cross-cutting view — KPIs from any other module, custom queries, anomaly surfacing, and the home for the cross-org benchmarks feature (cloud only).

Where CRM and Content own specific business domains, Analytics is the lens you put on top of all of them.

KPI tracker

Pre-built KPIs that work out of the box once you've connected the relevant modules:

CategoryKPI
PipelineNew pipeline created · Win rate · Average deal size · Days to close · Pipeline by source
ContentPosts per week · Engagement rate · Top-performing topics · Calendar fill rate
ActivityCalls per AE · Emails sent · Meetings held · Response rate
Cross-domainContent-to-pipeline attribution · Engagement-to-conversion lag · Churn precursor signals

Each KPI is a typed query against the knowledge graph. You can:

  • Pin to dashboard
  • Set a target (numeric or percentage)
  • Set an alert threshold (notify when above/below)
  • Drill into the source data

Custom queries

For everything not covered by pre-built KPIs, the Custom Query builder lets you compose your own. The builder is two-tiered:

No-code

A guided form: pick an entity (deal / contact / post / etc.), filter, group, aggregate. The form translates into a typed query the platform runs against the knowledge graph. No SQL required.

SQL (admin, cloud Scale+)

For complex analyses, an embedded SQL editor with autocomplete against the safe-read view (reporting.* schema, which excludes PII and sensitive columns). Read-only — you can't write data this way.

Both flavors save into the Custom Query library, addressable from dashboards.

Charts

Each KPI / custom query supports several visualizations:

ChartBest for
LineTime series — KPIs over weeks/quarters.
BarCategorical comparison — win rate by segment.
FunnelStage-by-stage drop-off — pipeline conversion.
HeatmapDensity — engagement by time-of-day.
TableDrill-in detail.

Charts pick a default based on the query shape; you can override.

Anomaly surfacing

The Analytics module runs continuous anomaly detection on every KPI. Mechanism:

  1. For each KPI, fit a rolling baseline (default: 4-week trailing).
  2. Compute current period's value.
  3. If z-score > threshold (default 2.0), emit an anomaly event.
  4. The event becomes a Today card the next morning and a one-time in-app notification.

Anomalies are direction-aware — a sudden win-rate spike is flagged just like a drop. Each anomaly links to the underlying data + a suggested next investigation ("look at deals closed this week with stage history < 7 days").

Cross-org benchmarks (cloud Scale tier and up)

The single feature impossible to run solo: how do my numbers compare to peers in my industry?

  • NAICS-segmented — you're compared against the population of consenting tenants matching your NAICS 2-digit industry code.
  • k-anonymous — comparisons are only shown when there are at least 5 peers in the cohort. Below 5, the panel surfaces a "not enough peers yet" message and your data isn't aggregated.
  • Opt-in — Settings → Tenant → Benchmarks → enable consent. You contribute aggregates only (never raw rows); you can revoke any time.
  • Refreshed weekly — Friday cron job recomputes percentiles.

KPIs available in benchmarks: pipeline velocity, win rate, avg deal size, engagement rate, response rate. More land each quarter based on which KPIs have enough cross-cohort coverage to be meaningful.

Self-host can't run benchmarks — there's no peer cohort to compare against. The flow is gated cloud-only.

Cross-module rollups

Where Analytics gets genuinely interesting: queries that span modules.

Examples actually queryable today:

What was the average time-to-close for deals whose primary contact
engaged with our content at least 3 times during the sales cycle?
Which content topics correlate with above-baseline win rate over
the next 60 days?
Of our currently stuck deals, how many have a primary contact who
hasn't engaged with content in the last 14 days?

These work because the knowledge graph treats deals, contacts, posts, and activities uniformly — a single typed query joins them without leaving the graph layer.

Performance budget

Custom queries run against materialized views maintained by a nightly cron job. So even complex multi-module joins run in sub-second on the dashboard.

KPI tracker refreshes are incremental — only KPIs whose underlying data changed are recomputed. The cron job tracks invalidation events the same way the dashboard surface does.

For ad-hoc queries that don't have a materialized view (rare — the matview set covers ~95% of queries by request volume), the runtime falls back to direct graph queries with a generous query timeout.

Export

CSV / JSON export from any chart, KPI, or table. Exports respect the tenant's RLS contract — you only export what your role can already see.

API endpoints under /api/analytics/ mirror the same data; useful for piping KPIs into your own BI tool.

Read next