Labor costs

Compare scheduled vs. actual hours pulled from Square. Plan-gated.

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

Business plan and up. Requires Square integration — without Square connected, the page shows a "Connect Square" prompt instead of the dashboard.

Setup

  1. Connect Square — Settings → Integrations → Square → Connect. See Square integration.
  2. Map your employees — Square team members ↔ Timely employees. Without mapping, clock-in events have no Timely employee to attribute hours to.
  3. Enable timecard sync — toggles on by default after connect; pulls clock-in/out events weekly (Monday morning for the prior week).

After the first sync, the Labor dashboard is populated.

What's on it

KPI cards across the top:

  • Scheduled hours — what you planned in Timely
  • Actual hours — what Square reported employees actually clocked
  • Variance — actual minus scheduled (positive = over, negative = under)
  • Total labor cost — actual hours × pay rate, summed across employees
  • Average hourly rate — total cost ÷ actual hours
  • Overtime hours — actual hours over the federal 40/week threshold (or state-specific)

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

Reading the variance

Variance has two flavors:

  • Positive (over-scheduled) — scheduled 8h, actual 10h. Common cause: unexpected coverage need, or a closing shift that ran long. Charged at the actual rate.
  • Negative (under-scheduled) — scheduled 8h, actual 6h. Common cause: employee left early, came in late, or called out and you didn't update the schedule. You're not billed for hours not worked, but it tells you something about coverage reliability.

A consistent positive variance for one employee usually means your schedule template is too lean. A consistent negative variance means employees are leaving early or calling out frequently.

OT detection

The dashboard surfaces overtime separately because it's the most expensive labor line. Two breakdowns:

  • Per-week OT — anyone over 40 hours that week (federal default). California / state-specific rules apply where configured.
  • Per-day OT — for states that count over-8 / over-12 hour shifts as OT.

If your Gusto integration is connected, the OT split here matches the split that gets pushed at payroll time. So a surprise on the Labor dashboard is a surprise on the payroll line.

Cost per employee

Each employee row shows:

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

Sortable by any column. Useful for "who cost us the most last week?" reviews.

Why are some hours missing?

A few reasons actual hours might be lower than expected:

  • Employee not mapped to Square — clock-in events don't attribute to Timely
  • Square timecard sync hasn't run — happens Monday morning for prior week; if you check Saturday afternoon, you're seeing partial data
  • Employee clocked in at a different Square location — Square team members can clock in at any location; if your Timely employee is mapped to Location A but they clocked in at Location B, the hours show up under Location B's labor dashboard

Export

Top-right → Export CSV dumps the per-employee breakdown for the visible date range. Standard headers: name, scheduled, actual, variance, cost, OT.

What's not here

  • Tip income — Square knows about tips, but tip data isn't currently surfaced in the Labor dashboard. On the roadmap.
  • Multi-location aggregation — pick one location at a time. A roll-up across all locations is on the roadmap.
  • Forecasting — the dashboard is retrospective. Predicted labor cost for the upcoming week (based on the current schedule and historical variance) is on the roadmap.

Found a typo or something missing? Let us know.