Certified Payroll for Google Sheets: Setup Guide
Short answer
You need the copy link and license key from your purchase email, your wage determination(s) and your worker list. Make a copy, fill in Settings, Projects, Rates, Workers and Fringe Plans once, then each week add hours on Time and deductions on Pay and choose Certified Payroll › Create WH-347….
1. Make your copy and add your key
Open the copy link from your purchase email and choose Make a copy. The copy, and the script inside it, belong to your Google account. On the Settings tab, paste your license key (QW-CP-…) and fill in the details printed on every form: business legal name and address, the certifying official's name and title, phone and email.
2. Try it on the example
The tabs come with a fictional payroll (Northline Electric on the Riverside Community Center job). Choose Certified Payroll › Create WH-347…, approve access when Google asks (the permissions are explained below), pick the project and week ending 2026-10-03, and press Check. You'll see the totals and one warning about the apprentice's rate. Press Create PDF to see a finished form, then delete the example rows, the test PDF and its WH-347 Log row.
3. Add what stays the same
| Tab | One row per | Notes |
|---|---|---|
| Projects | Covered project | Project or contract number, the full location (or county and state), every wage determination and modification number, and whether you're the prime or a sub. Set Active to Finished to hide it. |
| Rates | Project and classification | The basic hourly rate and fringe rate from the wage determination. These are what pay is checked against. |
| Workers | Worker | ID (last 4 of the SSN, never the full number), name, J or RA, and for apprentices the level, program and OA or SAA. Straight-time and overtime rates (overtime left blank = 1.5 × straight time), cash in lieu of fringe per hour, and the hourly credit for each fringe plan. |
| Fringe Plans | Plan (up to 6) | Plan name, type, plan number, and funded or unfunded. Plan 1 to 6 match the credit columns on Workers. |
4. Every week
- Time tab: one row per worker, project and classification with the week ending date and daily hours. D1 is the first day of your workweek and D7 is the week ending date. Straight time goes in ST D1–D7, overtime in OT D1–D7. A worker in two classifications gets two rows. Fill in the rate columns only when that row was paid differently from the worker's usual rate.
- Pay tab: one row per worker with tax withholding, FICA, other deductions and a description of any other deduction. Fill in Gross for all work when the worker also earned money on other jobs that week, and Net paid if it differs from gross minus deductions.
- Create the form: Certified Payroll › Create WH-347…, pick the project and week, tick Final payroll on your last week, and press Check. Fix any errors in the tabs and check again, then press Create PDF.
- Sign and submit: sign page 2 by hand or with a legally valid electronic signature (not a scanned one) and send it to whoever your contract names.
No work on a project this week, but your agency still wants a payroll? Tick No work performed. The form gets the header, the next payroll number, "NO WORK PERFORMED" across the empty worker rows, and "No work performed on this project during this week." in the remarks.
What the check looks at
Errors stop the PDF: rate + fringe credit + cash in lieu below the wage determination's basic + fringe; a full Social Security number; a registered apprentice without a program or OA/SAA; missing names, IDs, classifications or rates; daily hours outside 0–24; deductions larger than gross; gross for all work lower than gross on this project. Warnings don't: overtime below the rate owed, a cash rate below the basic rate that fringe makes up for (allowed, but overtime is still figured on the basic rate), over 40 hours with no overtime, apprentice rates to check against the program, net pay that isn't gross minus deductions, and an other deduction with no description. See the WH-347 guide for what each column means.
Permissions, in plain English
| Google asks to | Why |
|---|---|
| See and edit this spreadsheet | Read your tabs and add rows to the WH-347 Log. This spreadsheet only. |
| Display content in prompts and sidebars | The Create WH-347 window. |
| Connect to an external service | Send the selected project-week to quietworklabs.com, which checks it and fills in the PDF. It isn't stored. Your license key is checked at the same time. |
| See, edit and create the Drive files you use with this app | Create the PDF folders and save PDFs. It can't see your other Drive files. |
Frequently asked questions
Google says “Google hasn’t verified this app”. Is that safe?+
Yes. The script lives in your own copy of the spreadsheet, so you're its owner. Google shows this screen for scripts that haven't been through its app review, which a script in your own copy never has. Choose Advanced, then Go to Certified Payroll. On Google Workspace accounts the screen usually doesn't appear.
It says “Access blocked” or “This app is blocked”.+
Your Google Workspace admin restricts apps. Ask them to open Admin console › Security › Access and data control › API controls and tick “Trust internal, domain-owned apps”, or allow this app. Your copy counts as an internal app because someone in your company owns it.
The payroll number is wrong.+
The number comes from the WH-347 Log tab: the same number again if that project and week is already logged, otherwise one more than the highest number for the project. Switching from another system mid-project? Add a row to the log with your last payroll number and week, and the next form continues from there.
A worker shows up as “isn't on the Workers tab”.+
The Worker ID on the Time row has to match the Workers tab. IDs are compared as text, so 0123 and 123 both match a worker whose ID is 0123.
It says there's no wage determination rate for a classification.+
Add a row on the Rates tab with the project name and the classification spelled as on the Time row, with the basic hourly and fringe rates from the wage determination. Without it the form can still be created, but pay isn't checked for that classification.
Where are my PDFs?+
In Google Drive, in the folder Certified Payroll (WH-347), with a subfolder per project. Each PDF is also linked from the WH-347 Log. Create the same week again and you get a new PDF; the old one stays.
How do I remove its access?+
Go to myaccount.google.com/permissions and remove the app. Your sheet, its data and your PDFs stay where they are.