Docs / Reports & analytics / Labor & gross margin

Labor & gross margin

How the platform computes labor cost per visit and how that rolls up to gross margin. Common misreads.

Gross margin = (revenue − cost of goods sold) ÷ revenue. For a field-service shop, the dominant component of COGS is labor. Servicio computes labor cost at the most granular level — per visit — and rolls up from there.

Per-visit labor cost

Every completed visit has a labor_minutes column populated from the time entry. The employee has an hourly_rate_cents on their profile. Labor cost for the visit = (labor_minutes ÷ 60) × hourly_rate_cents.

Rolling up to margin

Revenue for the visit is the invoice total. Materials (if logged separately) are subtracted. Result: gross margin for that visit.

The Reports page aggregates across the last 90 days of completed, paid-and-invoiced visits that have non-null labor_minutes.

What's NOT in the margin calc today

  • Payroll burden — employer taxes, workers' comp, benefits. About 18-22% on top of wages.
  • Materials — chemicals, fertilizer, mulch. Logged separately as visit line items but not yet rolled into margin report.
  • Vehicle cost — fuel, maintenance, depreciation.
  • Equipment depreciation — see Your mowers are a P&L line.
The labor-only gross margin on the Reports page tends to be 5-12 points higher than your "true" gross margin that includes burden and overhead. Use it as a relative metric (trend over time, comparison between service lines) not an absolute one.

Margin by service

On the Reports page, the "revenue by service" chart can be toggled to "margin by service" (coming Q3). Until then, eyeball the labor cost per visit for each service in the Visits index — the services with the longest average labor minutes are usually the lowest margin.

Was this article helpful?

Contact support