California DIR certified payroll (eCPR), explained
If you work on a public works project in California, you file certified payroll with the Department of Industrial Relations — electronically, every week, for every project. Here is how the eCPR system actually works, in plain English.
Who has to file
Any contractor or subcontractor on a California public works project subject to prevailing wage. Before you can even bid or work, you need an active Public Works Contractor Registration (PWCR) with the DIR. Once you are on the job, certified payroll reports are due for each week a worker is employed on the project — including weeks where no work was performed (those are filed as “non-performance” payrolls).
The two ways to submit an eCPR
Submissions go through the DIR’s online portal at services.dir.ca.gov/pw. You have two options:
1. Manual iForm
Select your project, choose Submit → Manual, and type each employee’s hours, classifications, rates, and deductions into the DIR’s web form — every week, worker by worker. Fine for a two-person crew; painful beyond that.
2. XML upload
Choose Submit → XML and upload a file in the DIR’s eCPR XML format. One upload covers the whole week’s payroll for the project. This is the route payroll tools use — you generate the XML once and submit it under your own DIR login.
What trips contractors up
The usual failure points: missing non-performance weeks (the filing requirement does not pause when the crew is elsewhere), wage classifications that do not match the applicable prevailing wage determination, fringe benefit amounts that fall short of the required rate, and overtime that is not split correctly after 8 hours per day or 40 per week. Each of these is checkable before you submit — which is exactly what software should be doing for you.
The fast way
We are building exactly that: upload the payroll report you already have (Gusto, ADP, QuickBooks, or a crew timesheet), get back a checked WH-347 PDF and a DIR-compatible eCPR XML you upload straight to the portal. Nothing is ever silently guessed — uncertain values are flagged for your confirmation before anything is filed.