How to catch an underpaid worker before anyone signs the certified payroll
The short answer. Before anyone signs the Statement of Compliance on a certified payroll, check every worker, every week, against the wage determination: the right classification, a basic hourly rate at least the determined rate, and a fringe covered by plan contributions, cash in lieu, or both, as the US Department of Labor's Form WH-347 page explains. Apprentices also need their program's share of the journeyworker rate, and the ratio of apprentices to journeyworkers has to be checked day by day, not weekly. Any shortfall is the gap times the hours, paid as back pay before the payroll is signed, because the signed statement is subject to the penalties of 18 U.S.C. 1001.
On a public or prevailing-wage job, every week ends with a certified payroll and a signature. The person who signs the Statement of Compliance is saying that every worker on that payroll was paid at least the rate and fringe in the wage determination. That signature carries real weight: DOL's own page says the statement is subject to the penalties of 18 U.S.C. 1001.
Most underpayments are not anyone trying to cheat. They are a rate that didn't get changed when a worker moved, a classification picked from the wrong line, or a fringe that was counted twice. The fix costs little if it is found before the payroll goes out. Found later, by an auditor or a worker's complaint, it costs back pay plus everybody's time, and an uncomfortable conversation with the prime contractor. So the useful question is not "how do we fill in the form" but "how do we find the short worker on Friday, before anyone signs."
Last reviewed: November 11, 2026
What the check actually compares
The wage determination gives each classification two figures: a basic hourly rate and a fringe benefit rate. The fringe can be met by contributions to bona fide benefit plans, by cash in lieu of fringe benefits, or by a mix, as DOL's Form WH-347 page explains. So for every worker, every week, the check has to answer three questions:
- Is the worker in the right classification? A pipefitter's hours paid as a laborer will pass every arithmetic test and still be wrong.
- Is the basic hourly rate at least the determined rate?
- Is the fringe covered? Plan contributions per hour, plus any cash paid in lieu, have to reach the determined fringe.
Apprentices add two more questions. A registered apprentice may be paid at their program's share of the journeyworker rate, so the check needs the apprentice's current step. And the number of apprentices on the job each day has to stay within the program's ratio to journeyworkers. That ratio is a daily test, not a weekly one, which is why a weekly glance at the totals misses it.
A worked example
The numbers here are illustrative, made up for this article.
Say the wage determination for a public job lists a pipefitter at a basic rate of $48.00 an hour plus a fringe of $22.00. A pipefitter on your crew has spent the spring on a private job at $46.75 an hour, with the company's plan contributions worth $22.00 an hour. On Monday he moves to the public job. Nobody changes his rate, because nothing about him changed except the job number.
He works 40 hours on the public job that week.
- The determined rate: $48.00 basic. He is paid $46.75. Short $1.25 an hour.
- The fringe: $22.00 determined, $22.00 in plan contributions. Covered.
- The shortfall: $1.25 times 40 hours is $50.00.
Fifty dollars is easy to miss on a payroll of several thousand. It's also exactly the kind of figure an auditor finds, and by then it is fifty dollars a week for every week he's been on the job.
The fix is plain: pay the $50 as back pay, post it to the job so the job cost is right, and change his rate for the public job. Then the payroll can be signed.
Doing it better in a spreadsheet
You can run this check every week in a workbook, and it's worth doing even if you never change tools. The trick is to stop checking by eye and let the sheet compare every row.
- Keep the wage determination as a table, one row per classification, with the basic rate and fringe as numbers, and the modification number and date at the top. Never retype rates into the payroll tab; look them up.
- Give every worker a classification per job, not one classification for life. The pipefitter above is a pipefitter on both jobs, but the rate that applies depends on the job.
- Add three check columns beside each worker's weekly line: basic paid minus basic determined, fringe covered minus fringe determined, and the shortfall in dollars (the gap times the hours). Format anything below zero in red.
- Keep a separate daily tab for apprentices, with the journeyworkers and apprentices on site each day and the ratio worked out per day.
- Don't sign while anything is red, and keep a copy of the checked sheet with the signed payroll.
The weak points stay, though. The hours are usually typed in from foremen's sheets, then typed again into payroll, so the two copies drift. The determination table is only as current as whoever updated it. And the sheet checks what you remember to check.
How a system does it
The demo is Stanwick Mechanical, a fictional mechanical subcontractor with several jobs running, two of them public. In it, the certified payroll is prepared from the same approved hours that already post to job cost, so there is no second copy to drift.
Before anyone signs, the system checks each worker's rate and fringe against the wage determination, apprentices at their share of the journeyworker rate, the apprentice ratio day by day, hours not yet approved, and a worker number that looks like a Social Security number. When it finds a problem, it says so, in words.
In the demo's sample week it catches a pipefitter who moved from a private job and is paid $1.25 under the rate. One click pays the $50 back, posts it to the job and clears the check. Then both pages of the payroll print, laid out after the January 2025 Form WH-347. When a new wage determination arrives, the AI reads the PDF into classifications, rates and fringes and sets them beside the version on file, so only what changed needs checking. A person still confirms it.
A few things the system does not do, and shouldn't:
- It doesn't certify anything. It checks pay against the wage determination. You sign the Statement of Compliance, in ink or with a legally valid electronic signature; DOL says a scanned copy of a signature does not count.
- It doesn't compute taxes. Deductions come from your payroll service, which stays as it is.
- It keeps no Social Security numbers, only each worker's own number.
- It doesn't replace a portal an agency or prime contractor requires. It produces the information you enter or upload there.
Form WH-347 itself is optional, too. What a contractor must submit is the payroll information with a signed Statement of Compliance. The check is what protects you, whatever form the payroll goes out on.
See it for yourself
The construction job costing page explains the whole system, from job cost by cost code to the weekly certified payroll. The live demo lets you follow a crew's week into job cost and into the certified payroll, and watch the check catch the underpaid pipefitter. Sign in with one click, with no account; the data resets every night, so you can't break anything.
A typical build costs $8,000 to $25,000 at a fixed price, and hosting and support start at $350 a month.
Questions
Is Form WH-347 required for certified payroll?
No. The US Department of Labor says Form WH-347 is optional; what a contractor must submit is the payroll information with a signed Statement of Compliance.
Can a certified payroll be signed electronically?
Yes, with a legally valid electronic signature. The Department of Labor says a scanned copy of a signature does not count.
How can a prevailing wage fringe benefit be paid?
Through contributions to bona fide benefit plans, cash paid in lieu of fringe benefits, or a mix of the two, as long as together they reach the fringe rate in the wage determination.