Quickstart
For most teams under 100 people, the path from signed-up to "showing the team in our Friday review" is four steps:
- Create a tenant at prodview.app/signup. Free for 21 days, full feature set, no card.
- Install the agent on your own device first (commands below).
- Roll it out to the team — either by sending a one-line install script in Slack, or via your MDM.
- Open Overview. Within ~5 minutes of agent install, data starts populating.
Install · macOS (12 Monterey or newer)
# Install the agent brew install prodview/tap/agent # Register against your tenant prodview-agent register --tenant "acme" --token $PV_TOKEN # Start (also runs on every boot) prodview-agent start
# One-line install curl -fsSL https://get.prodview.app/agent.sh | sh -s -- \ --tenant "acme" --token $PV_TOKEN
# Notarised .pkg for MDM, manual, or restricted-network installs
curl -O https://dl.prodview.app/agent/0.2.1/prodview-agent.pkg
sudo installer -pkg prodview-agent.pkg -target /
Install · Windows (10 / 11)
# PowerShell as Administrator iwr -useb https://get.prodview.app/agent.ps1 | iex prodview-agent register --tenant "acme" --token $env:PV_TOKEN
Agent runs as a Windows service (prodview-agent.exe) under NT AUTHORITY\NetworkService. Auto-update is on by default and respects WSUS policy.
Install · Linux (Ubuntu 20.04+ / Debian 11+)
# Add the apt repo echo "deb [signed-by=/usr/share/keyrings/prodview.gpg] https://apt.prodview.app stable main" \ | sudo tee /etc/apt/sources.list.d/prodview.list curl -fsSL https://apt.prodview.app/gpg | sudo gpg --dearmor -o /usr/share/keyrings/prodview.gpg sudo apt update && sudo apt install prodview-agent
Deploy via MDM
Silent install scripts ready to drop into your fleet manager:
| MDM | Recipe | Avg. rollout |
|---|---|---|
| Jamf Pro | Composer package + smart group | ~12 min |
| Kandji | Custom App + Auto-Install | ~8 min |
| Microsoft Intune | Win32 .intunewin | ~22 min |
| Workspace ONE | UEM "Product" deploy | ~18 min |
| Munki | pkginfo template provided | ~10 min |
Data model
ProdView aggregates raw OS signals into a small, opinionated data model. Every metric in the dashboard rolls up from these four tables:
| Table | Grain | Description |
|---|---|---|
| sessions | person × app × focus block | Continuous foreground time on one app. The atom for "focus time". |
| activity | person × 1-min bucket | Active / idle / off-hours classification. |
| events | device × event | USB inserts, logins, policy changes, etc. |
| devices | device × day | Health snapshot — agent version, queue, CPU, RAM. |
Raw signals (keystroke counts, screen contents, message bodies, file metadata) are never written by the agent — see the privacy model for the explicit exclude list.
App categories
Every app and domain is classified into one of five buckets:
Productive· code editors, design tools, terminals, docsCommunication· Slack, Zoom, GmailNeutral· file browsers, music, OS utilitiesDistracting· YouTube, Reddit, socialIdle· no input for ≥3 min
The default taxonomy covers 15,000+ apps and 4M+ domains. You can override per-team — Figma is Productive for designers and Neutral for sales, for instance.
Focus time
A focus block is a run of ≥25 contiguous minutes on a single Productive-category app with no idle, no app-switch, and no meeting overlap. We treat it as the closest proxy for actual deep work that we can compute without seeing screen contents.
Privacy model
The full data manifest is published and version-controlled at github.com/prodview/manifest. Auditors get read access to the live production schema.
API · authentication
All endpoints under https://api.prodview.app/v1 require a bearer token. Tokens are scoped (read / write / admin), can be IP-allow-listed, and rotate on a 90-day cadence by default.
# Set your token export PV_TOKEN="pv_live_a82f1c3..." # Sanity check curl https://api.prodview.app/v1/me \ -H "Authorization: Bearer $PV_TOKEN"
People endpoints
GET/v1/people — list every person in your tenant.
GET/v1/people/:id — one person, current activity, last 28 days.
POST/v1/people/:id/pause — pause data collection for a person.
# Get the current activity for one person curl https://api.prodview.app/v1/people/p01 \ -H "Authorization: Bearer $PV_TOKEN" # Response (abridged) { "id": "p01", "name": "Amelia Okafor", "team": "Platform", "activity": { "active_hours_today": 7.4, "focus_hours_today": 5.2, "idle_ratio": 0.12, "score": 88 } }
Metrics endpoints
GET/v1/metrics/:name — query any rolled-up metric with a flexible window + groupBy.
curl "https://api.prodview.app/v1/metrics/productive_hours?window=P28D&groupBy=team" \ -H "Authorization: Bearer $PV_TOKEN"
Security events
GET/v1/events — list security events with filters by severity, type, person.
POST/v1/events/:id/ack — mark as triaged + add a note for the audit log.
Webhooks
Every metric and alert can fire a webhook. Payloads are signed with HMAC-SHA256 using your endpoint secret.
# Create a webhook for high-severity events curl -X POST https://api.prodview.app/v1/webhooks \ -H "Authorization: Bearer $PV_TOKEN" \ -d '{ "event": "security.event.high", "url": "https://events.pagerduty.com/v2/enqueue", "secret": "whsec_..." }'
Currently emitted event types: security.event.{low,medium,high}, person.overwork.detected, device.stale, policy.changed.
Policy & retention
Per-tenant policy YAML controls collection intervals, retention windows, off-hours definitions, blocked-domain lists, and screenshot policy (off by default).
SIEM export
Push every event in real time to Splunk, Datadog, or any HEC-compatible endpoint. Sub-second latency for high-severity events.
Terraform provider
terraform { required_providers { prodview = { source = "prodview/prodview", version = "~> 0.2" } } } resource "prodview_policy" "default" { screenshot_interval = "never" retention_days = 425 off_hours_window = "19:00-07:00" }
Troubleshooting
Most issues we see fall into three buckets. Run prodview-agent doctor first — it prints a coloured triage report.
| Symptom | Cause | Fix |
|---|---|---|
| agent not reporting | firewall blocking 443 | allow *.prodview.app |
| 0 focus minutes | idle threshold misconfigured | set idle_threshold: 180s |
| stale device flag | NTP drift > 5 min | resync system clock |
Still stuck? Email support@prodview.app — we answer in <4h on Business and <1h on Enterprise.