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 costSUM(hours × employee.hourly_cost)
  • Total budgetSUM(project.budget_dollars)
  • InvoicedSUM(invoice.total) for non-void invoices linked to projects
  • PaidSUM(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 from cost / 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 →