If you work on a California public-works project, Labor Code 1771.4 requires you to submit certified payroll records (CPRs) electronically to the DIR — usually every week you work. You have two options on the DIR Public Works Portal:
- Type everything into the online eCPR form — every worker, every day's hours, every deduction, every week. For a crew of five this commonly takes an hour or more per week.
- Upload an XML file — the portal validates it, loads it into the form for you, and you just review, sign, and submit.
The XML route is far faster — if you can produce a valid file. The DIR's official suggestion is editing the sample file by hand in a text editor, which is where most people give up. (Our free generator produces the file from a simple form instead.)
What the XML file must contain
The file must conform to the DIR's CPR.xsd schema. In practice that means, in this exact structure:
- Contractor info — legal name, license type and number (CSLB, PL, or OTHER), your 10-digit PWCR registration number (or
NA), 9-digit FEIN, address, workers' comp policy number, email. - Project info — the DIR Project ID (the "PWC-100 number") and the entity you contract with ("Contract With"). Most other project fields must be left empty — the portal fills them from the PWC-100 database.
- Payroll info — week ending date, and for each worker: name, address, SSN, withholding exemptions, work classification, daily straight/overtime/double-time hours, hourly rates, gross (this project and all work), itemized deductions, net paid, and check number.
Critical details that cause rejections
- "Contract With" must match exactly. If the hiring contractor's name differs even by punctuation or spacing from the PWC-100 record, the system opens a new payroll branch and your numbering breaks.
- File naming convention:
[last 4 of FEIN]_[Project ID]_[week ending MMDDYY].xml— e.g.6789_412345_060626.xml. - Formats are strict: SSN and FEIN are digits only; ZIPs are 5 digits; states are 2 capital letters; dates are
yyyy-mm-dd; the worker name attribute must beSSN::NAMEwith the name in CAPS. - Payroll and amendment numbers must be left empty — the system assigns them.
Submitting corrections
You can't edit a submitted record. To correct one, re-upload a fixed XML where the FEIN/SSN, DIR Project ID, contract agency name, week ending date, craft, and base hourly rate all match the original exactly — the system then files it as Amendment 1 (then 2, and so on). If the error is in one of those key fields, it becomes a brand-new report; explain the situation in the Notes field.
Non-performance weeks
Weeks with no work on the project still need a record: a statement of non-performance (statementOfNP = true, no employee records). Skipping these is one of the most common compliance gaps.
The fast way
eCPR Express generates a schema-valid eCPR XML (and the federal WH-347 PDF) from a simple web form, remembers your crew and projects between weeks, and runs entirely in your browser — names, SSNs, and wages never touch a server. It's free during launch.