The DIR eCPR system, explained

California's electronic certified payroll filing has two paths in, one signature at the end, and a long list of ways to bounce. Here is how the modernized portal actually works, from people who build eCPR files for a living.

The system you are actually filing into

In mid 2024, DIR replaced its separate legacy systems for project registration, contractor registration, and certified payroll with one portal: services.dir.ca.gov/pw, per DIR's own upgrade notice. Two things about that change still bite contractors:

  • Old logins did not carry over. Filing now requires a contractor account in the new portal, where the legacy eCPR system allowed essentially anonymous submission.
  • Working setups broke. Vendors and contractors statewide had to adapt to the new system's quirks, and the trade associations that support public works contractors documented sustained problems through the transition. When an upload fails, the state's standing advice has been to screenshot the failure and email public works support. That is the support model you are relying on at deadline time.

The underlying XML format survived the migration: DIR confirmed the schema fields predate the new system, and the current format specification is the eCPR XML Guidelines version 2.0, published March 2026. Current guides and the XML sample live on DIR's certified payroll reporting page.

Path one: the iForm

The iForm is the manual path. Inside the portal, on each project, you enter each worker, each day's hours, each rate, each fringe and deduction, by hand, for every payroll period. The modernized portal softened the pain with saved worker profiles and the ability to duplicate a previous payroll, and it still scales terribly: a crew of twelve across three active projects is thirty six worker-project entries per filing period, by hand, forever. Every field you type is a chance to mistype a number you then certify under penalty of perjury.

Path two: the XML upload

The XML path replaces typing with a file. Next to a project in the portal you choose Submit, then XML eCPR, identify the contractor, the contract-with entity, and the DIR project ID, flag whether this is an amendment, and upload a file in DIR's format. The server validates it, shows you the parsed payroll, and hands you the signature step.

The catch is producing the file. The mainstream payroll systems do not emit it: QuickBooks cannot produce the eCPR XML on its own, and the standard ADP, Paychex, and Gusto configurations do not either. The specification has real teeth, and DIR does not even publish the schema file itself in a downloadable form, so anyone building the file is working from the guidelines document, the published sample, and hard-won experience with what the server actually rejects.

What bounces an upload

These are the rules we see reject real files, drawn from DIR's format guidelines and from building eCPR XML against the live system's documented behavior:

  • Employee name formatting. The record carries an identifier combining the SSN and the name, upper case, last name first. Name formatting is the one thing vendors publicly reported breaking when the new portal launched.
  • Social Security numbers. Nine digits, no dashes, the full number. The opposite of the federal WH-347, which takes the last four only. Feeding the same masked value to both filings is a classic cross-contamination error.
  • Dates. ISO format, year first. A payroll covers at most seven days, each date inside the week ending window, no duplicates.
  • Fields DIR assigns. The payroll number and amendment number are assigned by DIR on submission and must be empty in your file. Filling them in feels helpful and gets you a rejection.
  • Fringes vs deductions. Fringe contributions like health and welfare, pension, vacation, and training are hourly figures. Deductions like taxes and dues are lump sums for the period. Mixing those units produces arithmetic the server, or an auditor, will not accept.
  • Structure. The element order is fixed, and placeholder fields have to be present even when empty. Hand-built or lightly-scripted files fail here constantly.
  • Arithmetic. Daily hours must sum to totals, rates times hours must reconcile with gross, and net must be consistent with gross and deductions.
  • File naming. DIR's guidelines specify the filename pattern, built from your federal EIN's last four digits, the project ID, and the week ending date.

Two more cases deserve respect. A week with no work on a project is not a week with no filing: the format supports a statement of non performance, and skipping it leaves a gap in your sequence. And amendments must match the original filing on its identifying fields, or the system treats your correction as a brand new payroll, leaving the wrong one standing.

The step nobody automates away: review and sign

Whichever path you take, the filing ends the same way. The contractor reviews the parsed payroll and signs under penalty of perjury, and the system returns a confirmation with a payroll number and sequence number. Keep those confirmations: they are your proof of filing when an awarding body or records request comes asking. This design is why no honest service can promise you will never touch the portal at all. What a good service can do is make your part a two minute review of a file that is already correct, instead of an afternoon of data entry followed by a certification you sign with your fingers crossed.

iForm or XML: the honest decision

iFormXML upload
Time per filingHigh, and it scales with crew size and project countMinutes, once the file is right
Error surfaceEvery keystroke, every periodConcentrated in the file build, where software can check it
Who it fitsA sub with one small project and patienceAnyone filing repeatedly, if they can get the file made correctly
The catchYour timeYour payroll system does not make the file

That last cell is our business. We turn the payroll export you already run in QuickBooks, ADP, Paychex, Gusto, or Sage into a validated eCPR XML file and a finished WH-347, every week, checked by software and verified by a person. You review and sign. The first weekly filing is free, on your own live project. And if a portal upload the state's own system rejects is your current emergency, our guide to catching up on certified payroll is the place to start.

Related reading: California certified payroll, the complete guide and why the GC's portal does not make you compliant with the state.

Skip the portal. Send one export, first filing free

Send the payroll export you already run. We turn it into the WH-347 and the DIR eCPR filing, checked by software and verified by a person. Your first weekly filing is free, before you pay us anything. $995 one time setup, then $249 per month flat.

Got it. We reply the same business day.

First filing free