Certified Payroll Kit

WH-347 generator › QuickBooks Online

WH-347 from QuickBooks Online payroll

QuickBooks Online has a certified payroll report only on its higher payroll plans, and only if projects, weekly timesheets and pay types are set up its way. If that isn't you, export the week to Excel and drop the file below. The generator recognises QuickBooks column names and fills the official 2025 WH-347 in your browser.

QuickBooks' own report or an export?

Intuit's article on certified payroll in QuickBooks Online is tagged for the Payroll Premium and Elite plans. To use it you set up each public works job as a project, enter time against the project on weekly timesheets, put everyone on a weekly pay schedule and create a separate hourly pay type for every classification and for overtime. Intuit's example name is "WD #CA20000 Carpenter-Industrial ST". Fringe benefits appear on page 2 only if you set up retirement and health items.

That works if your company already runs payroll that way. Many contractors don't: they're on Core, they track time in another app, or each worker's classification changes day to day. In those cases an export plus a generator is quicker than rebuilding your QuickBooks setup.

QuickBooks certified payrollExport + this generator
QuickBooks planPayroll Premium or Elite (per Intuit's article tags)Any plan, or no QuickBooks at all
SetupProjects, weekly timesheets, pay type per classificationNone; match columns once
Two classifications in one weekSeparate pay typesClassification column per row
California DIR XMLNot mentioned in Intuit's articleV2 checker now; XML builder in our paid plan
Where data is processedIntuit's serversYour browser only

Which QuickBooks Online reports to export

The WH-347 needs two kinds of information: hours by day for each worker and classification, and pay for the week (gross, taxes, deductions, net). QuickBooks keeps them in different reports.

  1. Hours. Go to Reports → Standard reports and open a time activity report by employee (detail, not summary). Set the date range to your payroll week, Sunday to Saturday or whatever your workweek is. Use Customize to show the date, employee, customer or project, service item and duration, and filter to the public works project. Export to Excel.
  2. Pay. In the Employees or payroll section of Standard reports, run a payroll details report for the pay date that covers that week. It lists gross pay, each tax, each deduction, net pay and check number per employee. Export to Excel.
  3. Combine. In the hours sheet, add the pay columns. Each worker needs their pay figures on one of their rows only. The generator takes the first value it finds per worker, so you don't have to repeat them.

QuickBooks report names and menus change from time to time. What matters is the shape of the file: one row per worker per day with hours, plus pay totals somewhere for each worker.

Columns the generator recognises

Header names don't have to match exactly; these are the QuickBooks-style names we pick up automatically. Anything else you match once and it's remembered for next week.

WH-347 needsTypical QuickBooks columnRequired?
Worker name (1B–1D)Employee ("Last, First")Yes
Identifying number (1E)SSN or Employee ID; only the last 4 digits are printedRecommended
Labor classification (3)Work Classification, Service, or your pay type nameYes
Apprentice level (2)Apprentice Level (blank = journeyworker)If any apprentices
Day and hours (4, 5)Date, Regular Hours / Duration, Overtime HoursYes
Hourly rate (6A)Hourly Rate, Pay RateYes
Fringe credit per hour (6B, page 2)Health & Welfare, Pension, Vacation/Holiday, TrainingIf claiming fringe credit
Gross for all work (7B)Gross PayRecommended
Deductions (8)Federal Income Tax, Social Security & Medicare, state tax, SDI, Union Dues, Other DeductionsRecommended
Net pay (9)Net PayRecommended

If you use one pay type per classification

If you followed Intuit's setup, each worker's hours are split by pay types like "WD #CA20000 Carpenter ST" and "WD #CA20000 Carpenter OT". Put the classification name (without ST/OT) in a classification column, and put straight-time and overtime hours in separate columns on the same row. That way a carpenter who also worked as a laborer that week becomes two WH-347 lines with the same entry number, which is what DOL asks for.

Fringe benefits from QuickBooks

The WH-347 shows fringe benefits two ways. Column 6B is the credit for contributions to bona fide plans (health, pension and so on): hours × the hourly credit, with each plan named on page 2. Column 6C is cash paid in lieu of fringes. QuickBooks stores company-paid benefits as deductions and contributions, not as an hourly rate, so add columns with the hourly credit per plan (for example Health & Welfare 11.20, Pension 9.80). Then list each plan, its type, plan number and whether it is funded in step 4 of the generator.

Common mistakes with QuickBooks exports

Questions

Does QuickBooks Online make a WH-347?

Intuit offers a certified payroll report in QuickBooks Online Payroll. Its help article is tagged for Premium and Elite and depends on projects, weekly timesheets and a pay type per classification. On other plans, or without that setup, export your data and use a generator like this one.

Does it work with QuickBooks Desktop?

Yes, as long as you can export hours by day and pay to Excel or CSV. The generator doesn't connect to QuickBooks; it only reads the file you give it.

Is my QuickBooks data uploaded?

No. The file is read and the PDF built in your browser. Nothing goes to our servers or to Intuit.

Can I reuse the setup next week?

Yes. Your column matches are remembered for files with the same columns, and saving the project keeps the project details, plans and programs. The payroll number goes up by one when you load it.