Labor costs

Compare scheduled vs. actual hours. Uses Square timecards when connected, or your own clock-in data as a fallback.

The Labor dashboard at /dashboard/labor shows the gap between scheduled hours (what you planned in Timely) and actual hours (what employees actually worked). It's where you spot cost overruns before payroll runs.

Business plan and up.

Actual hours source

The dashboard automatically picks the best available source for actual hours:

Square connected? Actual hours from
Yes Square POS timecards (pulled via sync)
No Timely clock-in records (time_entries)

A banner at the top of the page tells you which source is active:

  • "Sync Timecards" banner — Square is connected; use the button to pull the latest data
  • "Showing actual hours from employee clock-ins" banner — Square is not connected, but employees have been punching in via Timely (SMS link or kiosk). Data is live — no manual sync required.
  • "Showing scheduled hours and estimated labor costs" banner — no actual data yet; costs are estimated from scheduled hours × employee wage rates

If you have employees punching in through Timely's clock-in flows (see Clock-in), the Labor dashboard will show real actual hours even without Square.

Setup (Square)

  1. Connect Square — Settings → Integrations → Square → Connect. See Square integration.
  2. Map your employees — Square team members ↔ Timely employees.
  3. Sync timecards — use the Sync button on the Labor dashboard, or let the automatic weekly sync run (Monday morning for the prior week).

What's on the dashboard

KPI cards across the top:

  • Scheduled hours — what you planned in Timely
  • Actual hours — what employees actually clocked
  • Variance — actual minus scheduled (positive = over, negative = under)
  • Total labor cost — actual hours × pay rate (or estimated from schedule when no actuals)
  • Average hourly rate — total cost ÷ actual hours
  • Overtime hours — actual hours over the 40h/week threshold

Below: a daily breakdown chart and a per-employee variance table.

Reading the variance

  • Positive (over-scheduled) — scheduled 8h, actual 10h. Common cause: unexpected coverage need, or a shift that ran long.
  • Negative (under-scheduled) — scheduled 8h, actual 6h. Common cause: employee left early, came in late, or called out without the schedule being updated.

A consistent positive variance for one employee usually means your schedule template is too lean. Consistent negatives suggest attendance or reliability issues.

OT detection

The dashboard surfaces overtime separately because it's the most expensive labor line. Employees over 40 hours in the week are flagged with an "OT" badge in the employee table.

Cost per employee

Each employee row shows:

  • Scheduled hours
  • Actual hours
  • Variance (Δ hours)
  • Hourly rate (from the employee record)
  • Total cost

Sortable by any column.

Week navigation

Use the / arrows to navigate to any prior week. You can also use the ?weekStart=yyyy-MM-dd URL parameter to jump directly to a specific week.

Why are some actual hours missing?

When using Square:

  • Employee not mapped to a Square team member
  • Timecard sync hasn't run yet (runs Monday morning; mid-week checks show partial data)
  • Employee clocked in at a different Square location than they're mapped to in Timely

When using Timely clock-in:

  • Employee hasn't clocked out yet — open entries are excluded until completed
  • Employee used a clock-in method not yet set up (see Clock-in)

Export

Top-right → Export CSV dumps the per-employee breakdown for the visible week.

What's not here

  • Tip income — Square tip data is not currently surfaced in the Labor dashboard.
  • Multi-location aggregation — pick one location at a time; a full roll-up is on the roadmap.
  • Forecasting — the dashboard is retrospective. Predicted labor cost for the upcoming week is on the roadmap.
  • Break-time deduction for own clock-in data — when using Timely clock-in as the fallback (no Square), hours are gross (clock-out minus clock-in). Break deduction is applied automatically when using Square timecards.

Found a typo or something missing? Let us know.