summary: Per-project P&L (cost / budget / invoiced / paid / margin) plus an on-demand Claude API estimate of what the same work would cost if delivered by AI agents.
Lives at /projects/profitability (admin or has-finance-access only).
Managers see a hours-only variant on the same URL — costs are hidden
for them automatically.
Top KPIs (full view, admin/finance)
- Hours — total tracked hours in the date range
- Total cost —
SUM(hours × employee.hourly_cost) - Total budget —
SUM(project.budget_dollars) - Invoiced —
SUM(invoice.total)for non-void invoices linked to projects - Paid —
SUM(invoice_payment.amount)for those invoices - Margin (paid − cost) — your true P&L for what's actually been collected
Per-project columns
| Column | What |
|---|---|
| Hours | logged time |
| Cost | hours × hourly_cost per member |
| Budget | project.budget_dollars |
| Invoiced | sum of project's invoices |
| Paid | actual payments received |
| Margin (paid) | paid − cost, color-coded green/red |
| vs Budget | cost / budget %, green if ≤100% |
| AI cost est. | see below |
Project filter + drill-down
Pick a project from the dropdown to enter single-project view. You get three additional drill-down panels:
- Top apps — which Windows apps consumed time
- Top categories — meeting / docs / coding / etc.
- Top window titles — what was actually being done (15 most time-heavy unique titles)
Useful when you want to understand WHY a project's cost is what it is, not just see the number.
AI cost estimate
Per-project "Estimate →" button calls Claude Haiku 4.5 with the project's name, description, top apps, top categories, sample window titles, and total hours. Returns:
- Low / Median / High USD estimates of what equivalent output would cost via Claude API agents
- 1-3 sentences of reasoning about WHY that range
- A savings ratio (
X.Xx cheaper via API) calculated fromcost / median_estimate
Refresh + caching
The estimate is cached per project in project_ai_estimate and
re-uses the cached value until the project's total minutes drift more
than 20% from the cached snapshot. A small refresh link below
the estimate forces a fresh computation.
Honest caveats
- This is a heuristic, not a budgeting tool. Best for narrative ("this $30K project would be ~$200 via API agents"), not a price quote.
- Quality depends on how well-tagged the events are. Untagged
piles produce garbage estimates. Use the bulk-tag operations
on
/team/employees/<id>to tag historical work first if needed. - Cost is across ALL hours (billable + internal). The legacy CSV export still uses billable-hours-only revenue.
CSV export
The Download CSV button in the filter bar honors the date range + project filter. Exports per-member rows so spreadsheets can do their own grouping/pivoting.
See something wrong or outdated in this article? Report it →