Groundwork
← People & Payroll

Generate certified payroll (WH-347)

Who can do this: Payroll or Compliance

Before you begin

Certified payroll only works if the inputs are right, so confirm three things first. Every employee on the job has a craft classification on their employee record. You know which wage group governs the work (the federal Davis-Bacon determination for the county and construction type, or the applicable state schedule). The wage group is chosen when you generate the report rather than stored on the project, so everyone generating payroll on the job has to be using the same one. Time for the week is entered and approved, since the WH-347 is generated from entries rather than typed.

Steps

  1. Go to People → Certified Payroll (WH-347), then choose Generate WH-347 and select the project and the payroll week ending date.
  2. Groundwork resolves the applicable wage floor per craft. Where a federal Davis-Bacon determination and a state schedule both apply, the higher of the two governs per craft, checked craft by craft rather than as a blanket rate for the job.
  3. Review each employee's line: hours by day, straight time and overtime, base rate, and fringe benefits. Fringes are tracked separately from base rate, which is what a DOL audit actually examines.
  4. Resolve any flagged underpayment. An employee paid below the resolved floor for their craft is flagged before the report generates, not after it's been filed.
  5. Enter the deductions and net pay figures for the week.
  6. Click Certify & Sign and enter the signer's name and title. This is the federal WH-347 Statement of Compliance attestation, and the dialog says so before you commit: it is a one-time action, and once certified the payroll cannot be edited or regenerated. Certified reports then carry a certification badge showing the signer's name, title and date.
  7. Generate the WH-347 PDF and submit it to the contracting agency on their required schedule (weekly, for most federally funded work).

What happens next

Each week's report is sequenced, so a gap in the numbering is visible. On work where you hold lower-tier subcontracts, wage flowdown tracking shows which subs owe you their own certified payroll for the same week, which is your exposure if they don't produce it. Missing sub payrolls on a federal job land on the prime, so the register is worth watching weekly rather than at closeout.

Where the record lives

Every generated WH-347, its underlying time entries, the wage determination in effect at the time, and the signed statement of compliance are retained under People → Certified Payroll (WH-347). Retention matters here: federal record-keeping requirements run years past project completion, and the retention schedule handles the disposition timing rather than leaving it to memory.

Troubleshooting

An employee shows a wage underpayment flag but was paid correctly: check the craft classification on their employee record first. A laborer classified as a carpenter gets checked against the carpenter floor and will flag every week until the classification is fixed.

Fringe amounts look wrong: confirm whether fringes are paid in cash or to an approved plan. Both satisfy the requirement, but they report on different lines, and combining them into the base rate is the error that most often triggers a finding.

Hours don't match the job cost report for the same week: both read the same time entries, so a mismatch almost always means the payroll week ending date and the job cost period boundary don't line up rather than that either number is wrong.

Still stuck?

Send this straight to support (it goes directly to support@groundworkai.io).