Skip to main content
Workforce IntelligenceJune 14, 2026

Workforce KPI Excel Template: Build It Yourself

Three sheets, eight metrics, real formulas. A step-by-step build guide for ops managers who are tired of downloaded templates that stop working in week two.

Harvey Rodelo

By

Harvey Rodelo

Director of Operations, FNSG

One of our clients in Lawrenceville downloaded a free KPI dashboard template from a staffing website a few years back. It had twenty-three tabs, pivot tables that collapsed when sorted, and a waterfall chart nobody could explain. He used it for nine days. The day the fill rate cell started showing #REF! instead of a number, he deleted the file and went back to tracking headcount on a whiteboard by the dock door.

We've had that conversation with enough ops managers to know the problem isn't tracking KPIs. It's that most downloadable templates are built to look impressive, not to be maintained by someone whose week starts at 5am with a short-staffed line.

A workforce KPI Excel template is a three-sheet workbook: a raw data entry tab with no formulas, a calculated metrics tab where all the Excel formulas live, and a dashboard tab you share with clients or leadership. Built correctly with named ranges, it tracks eight staffing metrics and takes about 15 minutes a week to maintain. You can build it from scratch in roughly 90 minutes.

This post is the build guide. If you want the logic behind which metrics belong in the template and what the Georgia benchmarks are, the KPI template for staffing agencies covers that ground. This one is about the Excel mechanics.

Why Downloaded Templates Break

Pre-built KPI dashboards share three design problems that cause them to fail within a few weeks.

The first is formula placement. Most templates put calculations in the same cells where you enter data, or reference cells by address (like D15) rather than by name. You add a row of data, every address shifts, and suddenly NCNS rate is calculating against a cell that now contains a date header. The whole sheet goes red and nobody knows why.

The second problem is metrics you can't actually populate. We've seen templates calling for "candidate source breakdown," "offer decline reason codes," and "interviewer rating distribution by recruiter." None of those numbers come from a standard staffing partner report. If your template has fields your agency can't fill, those fields either stay blank or get filled with estimates, and eventually nobody trusts any of it.

Third: too many metrics. Tracking 5 to 15 metrics on a weekly cycle produces usable data. Tracking 40 produces a spreadsheet nobody reads past the top three rows. Limit your template to eight metrics and you'll actually run the review every week.

Build Your Data Entry Sheet First

Most people start with the dashboard because it's the exciting part. Don't. The dashboard is only as good as the data feeding it. Start with the raw data entry sheet and get that right.

Name the first sheet Raw Data. It has zero formulas. It's just clearly labeled columns with one row per week.

Here are the columns you need:

| Column Name | What You Enter | |-------------|----------------| | Week | Monday start date for that week (e.g., 2026-06-09) | | Orders_Opened | New staffing orders placed that week | | Orders_Filled | Orders filled within your agreed SLA window | | Urgent_Orders | Orders flagged urgent (needed in under 48 hours) | | Urgent_Fill_Hours | Sum of hours from order to confirmed start for urgent orders | | Scheduled_Shifts | Total confirmed shifts for the week | | NCNS_Shifts | Shifts where no worker showed and no call was made | | Workers_Placed | New placements made that week | | Cohort_Size | Workers placed in the cohort from 13 weeks ago (for 90-day retention) | | Workers_At_Day90 | Workers from that 13-week-old cohort who are still active | | Perm_Conversions | Temp placements that converted to permanent hire | | Placement_Spend | Total staffing invoices paid for the week | | Total_Hours | Total hours worked across all placements | | OT_Hours | Hours paid at overtime rate | | Offers_Extended | Job offers made by the agency this week | | Offers_Accepted | Offers accepted out of those extended |

After you set up the columns, go to Formulas > Name Manager and define a named range for each column. Select the column's data range (leaving the header out), then give it the column name exactly as written above. Orders_Opened refers to all the rows in that column. This takes about ten minutes but it's what keeps your formulas from breaking when you add new weeks.

The 90-day retention column needs a note. Retention is a lagging metric. You can't know whether a placement held until 13 weeks after they started. The cleanest approach: track a "Cohort_Size" column that records how many workers were placed 13 weeks ago, then enter "Workers_At_Day90" for that same group. Your staffing partner should be able to pull both numbers by filtering their placement records. If they can't, ask why.

The Formula Layer: Eight Metrics with Real Excel Formulas

Name the second sheet Metrics. No manual data entry here. Every cell is a formula referencing the named ranges you just created.

Use this formula for each KPI, one column per metric, one row per week:

Fill Rate (percent of orders filled in your SLA window):

=IF(Orders_Opened=0,"",Orders_Filled/Orders_Opened*100)

Time-to-Fill for Urgent Orders (average hours per urgent order):

=IF(Urgent_Orders=0,"",Urgent_Fill_Hours/Urgent_Orders)

NCNS Rate (percent of scheduled shifts with no call, no show):

=IF(Scheduled_Shifts=0,"",NCNS_Shifts/Scheduled_Shifts*100)

90-Day Retention (percent of a 13-week-old cohort still active):

=IF(Cohort_Size=0,"",Workers_At_Day90/Cohort_Size*100)

Quality Conversion Rate (temp placements that convert to permanent hire):

=IF(Workers_Placed=0,"",Perm_Conversions/Workers_Placed*100)

Cost Per Retained Placement (total spend divided by workers who made it past 90 days):

=IF(Workers_At_Day90=0,"",Placement_Spend/Workers_At_Day90)

Overtime Ratio (overtime hours as a share of total hours):

=IF(Total_Hours=0,"",OT_Hours/Total_Hours*100)

Offer Acceptance Rate (accepted offers out of offers extended):

=IF(Offers_Extended=0,"",Offers_Accepted/Offers_Extended*100)

The IF(x=0,"","") wrapper keeps empty weeks from showing as zeroes or error values in your charts. Apply it consistently and your dashboard stays clean even when a week's data is missing.

For 12-week rolling averages (used on the dashboard), add a second calculation row below your weekly data. Rolling averages for fill rate and NCNS are the numbers clients actually want to see:

=AVERAGEIF(Week,"<="&MAX(Week),Fill_Rate)

Adjust the range to pull only the last 12 rows if you want a true rolling window rather than a cumulative average.

Conditional Formatting That Flags Problems Before Monday

Add conditional formatting to the Metrics sheet, not the dashboard. You want the flag where the data lives.

For each metric, apply three rules under "Format only cells that contain," using number-based conditions:

| Metric | Red (Flag Now) | Yellow (Watch) | Green (On Track) | |--------|---------------|----------------|-----------------| | Fill Rate (%) | Below 80 | 80–85 | Above 85 | | Time-to-Fill, urgent (hrs) | Above 72 | 48–72 | Below 48 | | NCNS Rate (%) | Above 5 | 3–5 | Below 3 | | 90-Day Retention (%) | Below 70 | 70–80 | Above 80 | | Quality Conversion (%) | Below 10 | 10–15 | Above 15 | | Overtime Ratio (%) | Above 20 | 15–20 | Below 15 | | Offer Acceptance Rate (%) | Below 75 | 75–85 | Above 85 |

These thresholds match what we use on our warehouse and logistics staffing accounts across Georgia. Georgia's unemployment held at 3.5% in April 2026 with the labor force at a record 5.46 million, per the Georgia Department of Labor. That tight a labor market means watch thresholds should run tighter than national averages, particularly on fill rate and NCNS.

We used to flag fill rate only when it dropped below 75%. Tightening the watch threshold to 85% felt aggressive at first. But it gave us a two-week warning before accounts that eventually churned. We haven't changed it back.

The Dashboard Sheet: What to Show and What to Hide

Name the third sheet Summary. This is the only sheet you share outside your team.

Show four things:

A KPI status table with eight rows. Columns: metric name, 12-week rolling average, current week reading, and a status indicator. Use a simple colored circle or the word "On Track / Watch / Flag" rather than trying to replicate the conditional formatting colors. PDF exports of Excel don't always render custom fill colors reliably.

A line chart covering 12 weeks for three metrics: fill rate, NCNS rate, and 90-day retention. These three tell the story of whether the staffing relationship is working. Don't put all eight metrics in the chart. A chart with eight lines is a chart nobody reads.

A date stamp in the header. It sounds minor but it matters. Clients who receive a report and can't tell whether it covers last week or three weeks ago will ask. Clients who ask twice start assuming you're not watching.

A one-sentence plain-English summary at the top. "Week of June 9: fill rate and NCNS on target; 90-day retention dropped four points from the March cohort, tracking cause." Your staffing partner should write this. If they won't, that's information too.

After setting up the dashboard, right-click the Raw Data and Metrics tabs and select Hide. Share the workbook with view-only access, not edit access. Keeping the underlying sheets visible creates questions you don't want to spend a client call answering.

The 15-Minute Weekly Maintenance Routine

A template nobody runs on a schedule is a spreadsheet with good intentions and bad data.

Every Monday morning, before the first shift call: enter last week's numbers into the Raw Data tab. All sixteen columns. If your staffing partner gives you a standard weekly report, this takes eight minutes. If you're asking someone to pull the numbers separately each time, that's a problem to fix at the relationship level, not the spreadsheet level. Your partner should send a standard data file; if they don't, ask for one in the weekly check-in format.

After entry, open the Metrics sheet and check for red cells. Two or more consecutive red weeks on NCNS or fill rate trigger a call to your staffing partner that day. The accounts we've watched turn into terminations almost always had two to three months of visible red data before the client raised the problem out loud. The template doesn't help if nobody acts on the flags.

Once a month, before anyone asks: export the Summary tab to PDF and send it to the client or your internal leadership. Proactive sharing across our 27 Georgia accounts has done more to hold long-term client relationships than any service pitch we've made. A client who gets data they didn't ask for feels monitored. A client who has to ask for a report feels ignored.


The build mechanics are covered here. For the deeper logic on which metrics to track, which benchmarks apply to your sector, and how the five most predictive KPIs play out across active Georgia accounts, the staffing KPIs and client retention analysis walks through the data in detail.

If you manage warehouse, recycling, or hospitality operations in Georgia and want to see your current program benchmarked against what we track, Get Started and we'll pull your actuals against our active account data.

More from Harvey

Director of Operations, FNSG