<!-- Canonical URL: https://www.usebluehill.com/features/analytics -->
<!-- Source: https://www.usebluehill.com/features/analytics.md -->

# Analytics & reporting — status reports, SLA dashboards, time tracking

> BlueHill ships status reports (this week vs last week), SLA dashboards, time-tracking reports, and customer-health metrics — all powered by the activity timeline and metrics models. No external BI tool required.

## What BlueHill analytics covers

Analytics in BlueHill is intentionally narrow and operational, not a general-purpose BI tool. The reports are the ones a customer-facing team actually opens every Monday morning:

- **Status reports** — this week vs last week, per project
- **SLA attainment** — first-response time, resolution time, breach rate
- **Time tracking** — hours by customer, project, team member; billable vs internal
- **Onboarding velocity** — average days to milestone, completion rate
- **Ticket volume** — by category, priority, customer, source
- **Customer health** — derived signals per account

For deeper BI work (cohort retention, funnel analysis, revenue attribution), pipe the data to your warehouse and build there. The API is open.

## The data behind the reports

BlueHill's reporting layer is built on three models and one big logging system:

1. **`Metrics`** — system-wide counters and aggregates (ticket throughput, SLA rates, etc.)
2. **`CustomerMetrics`** — per-customer rollups (health score, engagement, onboarding progress)
3. **`task_activity` event log** — every status change, every interaction, every assignment is appended to a single time-ordered log
4. **`board_status_computer`** — the helper that rolls task_activity events into weekly snapshots for status reports

This means every report is grounded in real events, not a periodic aggregate that drifts out of sync. When a ticket transitions to Resolved, that's logged. When a customer task hits Done, that's logged. The reports query against the log.

## Status reports (this week vs last week)

The status-reports view is the workhorse for weekly standups and customer QBR prep. It compares:

| Project | This Week | Last Week | Δ | Status |
|---|---|---|---|---|
| Acme · Q1 Onboarding | 18 | 12 | +6 | On Track |
| TechFlow · Migration | 9 | 14 | −5 | Delayed |
| Globex · Renewal | 22 | 8 | +14 | Ahead |

The "this/last week" columns count completed tasks or resolved tickets per project per week. The delta column flags directional movement. The status column is computed from project-level rules (e.g. "Delayed" if delta is meaningfully negative).

CSMs use this to prep QBRs in 15 minutes instead of 90. Managers use it to spot drift before customers complain.

## SLA dashboards

The SLA dashboard pulls from the Ticket model's `due_date`, `first_response_at`, `resolved_at`, and `sla_breach_at` fields. Views available:

- **First-response attainment** — % of tickets where the first outbound reply happened before the agreed SLA
- **Resolution attainment** — % of tickets resolved before `due_date`
- **Breach rate by priority** — Urgent vs High vs Normal vs Low
- **Breach rate by customer tier** — Enterprise vs Mid-market vs SMB
- **Trend over time** — week-over-week, month-over-month

The trickiest variable in SLA tracking is "who pauses the clock when the ticket goes Pending or Waiting on Customer". BlueHill pauses on `Waiting on Customer` (the customer is the blocker) and continues on `Pending` (the team is the blocker) by default — configurable per tenant.

## Time tracking + reports

Time tracking lives at the task level. Every `CustomerTask` carries `time_estimate` (forecast) and `time_unit` (hour / day). Actual time is logged via time entries against the task.

Reports group by:
- **Customer + date range** → for invoicing
- **Team member + date range** → for utilization
- **Project + date range** → for engagement profitability
- **Billable vs internal** → for billable utilization metric

The reports export cleanly to CSV for QuickBooks import, or sync via webhook for real-time invoicing.

## Customer health

The `CustomerMetrics` model derives health from a weighted set of signals:

- Onboarding milestone progress (heavily weighted in the first 90 days)
- Recent interaction volume (drop = risk signal)
- Open ticket count and aging
- Time-since-last-touchpoint
- Exec sponsor engagement (calendar events, email responses)
- NPS / CSAT scores (if collected via [Forms](/features/forms))

Health states surface on every customer record and aggregate into the at-risk view. The weights are configurable per tenant — different industries weight signals differently.

## Onboarding velocity

For teams running structured onboarding (the [Onboarding feature](/features/onboarding)), the velocity report shows:

- Average days from contract-signature to first-value milestone
- Distribution by customer segment
- Where in the template the average customer slows down
- Comparison this quarter vs last quarter

Useful for the "is our onboarding actually getting faster" conversation that comes up every QBR with leadership.

## Exporting and BI integrations

Three paths:

1. **CSV export** — every report has a download button
2. **REST API** — `GET /api/metrics`, `GET /api/customer_metrics`, `GET /api/activity` for programmatic access
3. **Webhook → warehouse** — fire events to Snowflake / BigQuery / Postgres for real-time analytics

We don't try to be your BI tool. We try to surface the operational reports your customer-facing team needs to do their job, and stay out of the way for the rest.

## Built for

- [Customer success teams](/use-cases/customer-success) tracking portfolio health
- [Agencies](/use-cases/agencies) reporting on client engagements
- [Professional services firms](/use-cases/professional-services) running billable-utilization reviews

## Try it

[Start a 14-day free trial](https://app.usebluehill.com/sign-up) — no credit card required.
