Minnesota certified payroll without losing your Sunday: DLI prevailing-wage reports in minutes instead of hours

Minnesota certified payroll is two forms filed together: the Department of Labor and Industry's Certified Payroll form and a signed Statement of Compliance. Every contractor and subcontractor on a state-funded prevailing-wage job furnishes both every two weeks to the contracting authority and the project owner, and keeps them three years after final payment. From a clean timesheet, a package for a ten-man crew takes minutes when software does the arithmetic. By hand, the federal government's own estimate for the equivalent WH-347 is 55 minutes per report.

In August 2026 I built a generator and produced 12 consecutive Minnesota certified payroll packages, plus the wage summary, for a framing crew on a Rogers, MN senior-living project for a St. Cloud general contractor, working from photos of handwritten weekly sheets. This is the operator's version: what DLI actually wants, where the hours go, and the traps that bit me.

Two forms, every two weeks, generated from the timesheet in minutes.

Key takeaways

  • Minnesota wants two forms every two weeks: the DLI Certified Payroll form plus a signed Statement of Compliance, sent to the contracting authority and the project owner, kept three years after final payment.
  • DOL's own estimate for one federal WH-347 is 55 minutes. My generated Minnesota packages took 10 to 15 minutes each, almost all of it reading handwriting.
  • Column 8 is cumulative gross for the whole job. Get it wrong once and every later payroll is wrong; it is the best argument against doing these by hand.
  • Minnesota overtime triggers at eight hours a day, not just forty a week: one 9.5-hour Tuesday in a 39-hour week produced 4.5 overtime hours at 1.5 times base plus full fringe.
  • Minnesota Housing projects run on a tighter clock: 14 days after each pay period, submitted electronically in LCPtracker.

What Minnesota certified payroll requires (and how it differs from the federal WH-347)

The rule is Minn. Stat. § 177.30(a)(6) (statute). On a public works project funded in whole or in part with state money, every employer covered by the prevailing-wage law, prime or sub at any tier, furnishes a certified payroll report every two weeks to the contracting authority and the project owner, signed under oath by an owner or officer.

The records are kept three years after the contracting authority makes final payment, not three years from the week you worked.

DLI publishes one document that is really two forms. Page one is the payroll: name, identifying number, labor code, hours by day, total hours, rate, gross this job, deductions, net.

Behind it is the Statement of Compliance, where the owner swears the payroll is complete, the rates match the wage determination, overtime past the prevailing hours was paid at one and a half times the base rate, apprentices are registered, and fringe was paid into plans (box 4a) or in cash on the check (box 4b).

If you have done federal work, three differences matter:

The 12-package build: from handwritten weekly sheets to signature-ready PDFs

The job was a senior-living building in Rogers, MN, prevailing wage under Minn. Stat. §§ 177.41 to 177.44, with a St. Cloud general contractor as prime and a framing subcontractor as my client. The crew started at four men the week of May 18, jumped to eight in week three, ran nine or ten most of the summer, and was down to three by payroll #12 in early August. Ten different names across twelve weeks.

What I had to work from: photos of handwritten weekly sheets. Name, days, hours, sometimes a total. No rates, no deductions, no cumulative figures.

So I built a generator instead of a spreadsheet:

  1. One data file per payroll. Payroll number, period dates, and for each worker: labor code, exemptions, hours by day. That is all a human types.
  2. Rates from the wage determination, once. The Hennepin County commercial determination set Laborer (code 101) at $43.39 base plus $24.74 fringe, $68.13 an hour, and Carpenter (704) at $45.54 plus $29.34, $74.88. Fringe was paid in cash, so box 4(b) is checked and the full rate goes on the check.
  3. The math is automatic. Straight time and overtime by day, gross this period, cumulative gross carried forward from the previous file, FICA at 7.65 percent, the Minnesota Paid Leave employee share at 0.44 percent, deductions, net. Federal and state withholding come from the payroll register, never from a guess.
  4. Output is the official form. The generator draws DLI's layout exactly, payroll and Statement of Compliance, with the signature and date lines blank for the owner. I checked the first one side by side against a real signed report before I trusted it.

Eight packages went out the same day the first batch of sheets arrived. Payrolls 9 through 12 and the wage summary followed two days later. Those twelve, plus the summary, are the numbers in this post.

The traps: period-end dates, the first overtime week, the late-added worker

None of these are math problems. They are the places where a handwritten sheet and a sworn form disagree, and the owner who signs is the one on the hook.

The sheets end on Friday. The payroll period does not.

Every sheet ended on the last day worked: a Thursday the first week, Fridays after that. The form wants a pay period end date, and the Statement of Compliance repeats the dates in words. I standardized every payroll to Monday through Sunday, so week one became May 18 to 24. Pick a convention in week one and never change it; a Friday period on payroll #4 and a Sunday period on #5 looks like a missing weekend to a reviewer.

Column 8 is cumulative. Column 6 is weekly.

Hours are this period. Gross earned this job is cumulative for the whole project, so by payroll #12 one carpenter's column 8 read $29,652.48 while his weekly gross was $2,995.20. Get the running total wrong once and every payroll after it is wrong. The generator reads last week's file and carries it forward; a person on a Sunday night does not.

The first overtime week.

Payroll #11 had one 9.5-hour Tuesday. The week was only 39 hours, but Minnesota's prevailing hours are eight a day as well as forty a week, so three laborers each had 1.5 hours of overtime.

The rate is one and a half times the base plus the full fringe, not one and a half times the total: 1.5 × $43.39 + $24.74 = $89.83, against $68.13 straight time. Those 4.5 hours were the only overtime on a 3,067-hour job, and the easiest thing to miss by hand because the weekly total looked normal.

The holiday week and the late-added worker.

Memorial Day week was 31.5 hours a man instead of 37.5; the sheet just had a blank Monday. A new laborer joined in week four and worked only Monday through Wednesday, 21.5 hours; another worked a single eight-hour Tuesday in week six, then one more Tuesday a month later and nothing in between. Each gets his own row, his own exemptions, and a cumulative total that starts the week he appears. A one-day worker is still a line on a sworn statement.

The deduction columns must match the register.

FICA and Paid Leave are formulas. Withholding is not. If your sheets do not show federal and state tax, do not hand the owner zeros to sign without reconciling them to the payroll register and the W-4s first.

How to do certified payroll faster: hand vs generated, the honest numbers

The U.S. Department of Labor's burden statement on the WH-347 estimates 55 minutes per report (source). For the Minnesota form with a nine-man crew and a cumulative column, I would budget 60 to 90 minutes by hand, and still expect to find an arithmetic error on review.

Generated, the honest numbers from my twelve:

Over a 14-week framing season that is roughly three hours of keying plus one setup evening, against 14 to 21 hours by hand, most of them on Sunday nights. The calculator below uses your crew and your rate; set the hours to what a package actually costs you, not my default.

Certified Payroll Hours Calculator

Drag the sliders to match your business. The numbers update instantly.

—
hours a year on it
—
what it costs you a year
—
per month

Assumes 50 working weeks. Your numbers, not ours — nothing here is sent anywhere. A system built for your business has a set build price and a monthly plan for just the services you use: get a free quote.

The 12-payroll wage summary your GC will ask for

Since August 1, 2024, Minn. Stat. § 181.165 makes a construction contractor jointly liable for unpaid wages owed to its subcontractors' employees at any tier, and lets it demand the sub's payroll records. A GC who knows that will ask for a consolidated summary, and DLI will ask the moment there is a question. I was asked for mine before payroll #12 was a week old.

Because every hour and rate already sat in structured files, the summary was a second program reading the same data, not a weekend with a calculator. Eight pages: a cover with the project, contract numbers, and wage determination; totals by worker; detail by payroll period; the rate table with the overtime math shown; compliance notes.

Payrolls #1 through #12 came to 10 workers, 3,067 hours (3,062.5 straight time, 4.5 overtime), and $217,928.56 in gross wages, and every figure ties back to a line on a certified payroll.

Build the data once, in a form a program can read, and the summary is free.

MN Housing's 14-day electronic rule and other authority quirks

Every two weeks to the contracting authority is the statute. The authority decides the details, and they differ.

Minnesota Housing finances much of the senior and workforce housing going up right now, and its prevailing-wage page says certified payroll reports are due within 14 days after each pay period, submitted electronically through the LCPtracker portal unless the program manager has approved something else (Minnesota Housing prevailing-wage requirements).

It applies to new construction and adaptive reuse with agency loans of $500,000 or more or grants of $200,000 or more, and tax-credit projects of more than ten units allocated after January 1, 2025. Submitting to Minnesota Housing does not replace reporting to anyone else who requires it.

My week-one checklist for any public job:

  1. Which form: DLI's, the WH-347, or both.
  2. Where it goes: portal, email, or up through the GC, and whether the project owner gets a copy directly.
  3. The clock: every two weeks, 14 days after the period, or tighter.
  4. Which wage determination and county, and whether prevailing hours are eight and forty.
  5. Who signs. An owner or officer, and the date line is theirs, not yours.

Keep the signed copies, not just your drafts, for three years after final payment.

Payroll software vs a generator built for your crew (vs paying someone per package)

Three ways to stop doing these at the kitchen table.

If you run two or three workers on one public job every few years, pay per package and move on. If you run eight to ten and bid public work on purpose, a generator built for your crew hands you back most of those Sunday nights in the first season, and the GC's summary request stops being a crisis. The same data feeds your invoicing; see how to get paid faster as a contractor.

What to do this week, without hiring anyone:

  1. Build the rate table once from your wage determination: code, base, fringe, total, overtime.
  2. Fix the timesheet. Monday through Sunday, hours by day, names spelled as they appear on the W-4. Every trap in this post started on the sheet.
  3. Start a cumulative gross tally per worker from payroll #1, even in a notebook. It is the one number you cannot reconstruct later.
  4. If you want it generated from the timesheet, tell me your authority and your crew size through the contact form.

Frequently asked questions

How often is certified payroll required in Minnesota?

Every two weeks. Minn. Stat. § 177.30(a)(6) says each employer on a state-funded prevailing-wage project furnishes a certified payroll report, signed under oath by an owner or officer, to the contracting authority and the project owner every two weeks, covering the preceding weeks. Some authorities set a tighter clock: Minnesota Housing wants reports within 14 days after each pay period, filed electronically. Federal Davis-Bacon jobs are weekly.

What is the difference between WH-347 and the Minnesota certified payroll form?

The WH-347 is the optional federal format, filed weekly, with an identifying number (usually the last four digits of the SSN) for each worker. Minnesota's DLI form is a two-in-one document, the payroll plus the Statement of Compliance, filed every two weeks, and it must not contain any part of a Social Security number because the data is public. In practice the differences that bite are the cumulative gross-this-job column and Minnesota's overtime rule, which triggers at eight hours a day as well as forty a week.

How long does it take to do certified payroll for 10 employees?

By hand, the U.S. Department of Labor estimates 55 minutes for a single WH-347. For the Minnesota form with a ten-man crew and cumulative totals, I would budget 60 to 90 minutes per payroll. Generated from a clean timesheet, my packages took 10 to 15 minutes each, almost all of it keying hours by day. Setting the generator up the first time took one evening.

Do subcontractors have to submit certified payroll in Minnesota?

Yes. The statute covers every employer subject to the prevailing-wage law that performs work on the project, at any tier. The sub's own owner or officer signs the Statement of Compliance; the GC usually forwards the package but does not sign for you. Since August 2024 the GC is also jointly liable for a sub's unpaid wages under Minn. Stat. § 181.165, which is why GCs now ask for the payrolls and a summary.

What is a Statement of Compliance?

It is the sworn page attached to every certified payroll. An owner or officer states that the payroll is complete and accurate, that rates match the wage determination, that overtime beyond the prevailing hours was paid at least one and a half times the base rate, that any apprentices are registered, and that fringe was either paid into plans (box 4a) or paid in cash (box 4b). In Minnesota it is the back half of DLI's form; on federal jobs it is page two of the WH-347.

How long do you have to keep certified payroll records in Minnesota?

Three years after the contracting authority makes final payment on the project, under Minn. Stat. § 177.30, not three years from the payroll date. Keep the signed Statements of Compliance, the timesheets they were built from, and the wage determination together, because the commissioner can demand them.

Does my payroll software print the Minnesota certified payroll form?

Check the actual output before the first payroll is due. The certified-payroll output I have seen from payroll apps is the federal WH-347 layout; Minnesota's two-in-one form is a different document and some contracting authorities insist on it. If the app cannot produce it, you either re-key the numbers every period or generate the form directly from the hours.

Want certified payroll generated from your timesheet?

Tell me which contracting authority you report to, how many workers you run, and what your timesheets look like today. I'll come back with a clear scope, a set price for the build and a monthly plan for just the services you need. No templates. You talk directly with the person who produced the twelve packages in this post.

Jacob Fischer
Jacob Fischer

Founder, Style Marking · owner, Revisions Unlimited. Jacob builds custom websites, apps and operations systems for small-business owners — and runs a remodeling company on the same tools he builds for clients. Every post here comes from systems he has actually shipped.

Related reading