SDSubDeskStart free pilot

Free tool

Free California eCPR XML Generator (DIR Schema V2)

DIR stops accepting V1 eCPR files on January 13, 2027. Convert your V1 file or build a V2 file here.

Enter your weekly payroll, import a CSV, or load an existing V1 or V2 XML file. The tool lists every problem DIR would reject, then gives you a V2 XML file to upload at services.dir.ca.gov/pw. Everything runs in your browser. Social Security numbers never leave your computer, and no payroll data is sent anywhere.

15 errors left to fix before you can download.

Your other entries are saved in this browser so you can come back. SSNs and ITINs are not saved: after you reload, re-enter them or re-import your CSV or XML.

1. Contractor and project

56 characters maximum.

10-digit DIR registration number

Numeric. Look it up on the DIR project search.

Reference only. 56 characters maximum.

  1. Day 1: pick a date
  2. Day 2: pick a date
  3. Day 3: pick a date
  4. Day 4: pick a date
  5. Day 5: pick a date
  6. Day 6: pick a date
  7. Day 7: pick a date

2. Employees

One card per employee. A worker who did two kinds of work this week gets one card with two classifications, not two cards. Hours run from day 1 (the date 6 days before the week ending date) to day 7 (the week ending date). Money is in dollars, hours in decimals like 7.5. SSNs stay in this browser.

0/40 characters

9 digits. DIR requires a full SSN or ITIN.

9 digits.

Use CASH for cash payments.

0/256 characters

Classifications and hours

Classification 1

As on the wage determination.

As in your certified payroll records.

Hours worked each day: straight time, overtime and doubletime
HoursDay 1Day 2Day 3Day 4Day 5Day 6Day 7Total
Straight time (ST)0.0
Overtime (OT)0.0
Doubletime (DT)0.0

Classification hours: 0.0 (ST 0.0, OT 0.0, DT 0.0). Max 24 hours per day across all classifications.

Fringe paid to
Total ST rate (base + fringe)$0.00
Total OT rate (base + fringe)$0.00
Total DT rate (base + fringe)$0.00

Fringe per hour adds up to 0.00. DIR stores the total rates exactly as written, so they are worked out for you here.

Travel, subsistence and deductions

Not a deduction.

Total deductions$0.00

Earnings

The gray number in each box is the computed value. Leave a box blank to use it, or type a number to override it.

1 of 500 employees

3. Check and download

15 errors, 1 warning | 1 employee in the file

Errors DIR would reject (15)

  • Contractor: Contractor name is required.
  • Contractor: PWCR registration number must be exactly 10 digits and match your DIR registration. "NA" is no longer accepted.
  • Project: DIR Project ID is required and must be numeric (find it on the DIR project search).
  • Payroll: Week ending date is required and must be a real date.
  • ? (row 1): First name is required.
  • ? (row 1): Last name is required.
  • ? (row 1): Street address is required.
  • ? (row 1): City is required.
  • ? (row 1): ZIP must be 12345 or 12345-6789.
  • ? (row 1): DIR requires a full 9-digit SSN or ITIN for every employee.
  • ? (row 1): Check number is required. Use CASH for cash payments.
  • ? (row 1): Classification name is required (use the name on the wage determination). A missing name fails DIR validation.
  • ? (row 1): Craft is required (use the craft name from your certified payroll records).
  • ? (row 1): Straight-time hourly rate is required and must be more than 0.
  • ? (row 1): No hours entered. Remove the employee or enter hours (DIR expects hours above 0 unless the whole week is non-performance).

Warnings to check (1)

  • ? (row 1): All fringe amounts are 0. If fringe was paid, enter the hourly amounts; DIR compares rate plus fringe to the determination.

15 errors left to fix before you can download.

Your entries stay in this browser. Nothing is uploaded, and no payroll data is sent anywhere.

The eCPR schema and guidelines are published by the California Department of Industrial Relations. SubDesk is not affiliated with or endorsed by the DIR. This tool helps you prepare a file. It is not legal or payroll advice, and it cannot know whether your classifications, wage rates or hours are right. You are responsible for the payroll you certify. Check the current guidelines atdir.ca.gov/Public-Works/Certified-Payroll-Reporting.html.

What changed in V2

DIR published version 2.0 of the eCPR XML schema in October 2026. Its release notes describe three kinds of change.

  • Removed: the contractor license, FEIN, address, insurance number and email, and the project name, number, contract IDs and location block. DIR already has these on file. The payroll number and amendment number are assigned by the system and must be left empty or omitted.
  • Changed: the contractor PWCR number is now required, and the "NA" option is gone. An employee's name is split into first, last and middle name. The awarding body is optional and kept for reference only.
  • Added: an employee can have several classifications, each with its own hours, pay rates and fringe benefits. Each classification has an employee level and an apprentice level. A new fringe-paid section says whether fringe went to the employee or to a benefit plan. Deductions have a new "other" category. A top-level version element must read 2.0.

The deadline

According to DIR's V2 FAQ, V1 submissions are supported until January 13, 2027. Every XML file must also carry a version element, and for V2 it must be 2.0. If your payroll software still exports V1, you can import that file here and convert it.

What DIR now requires in each file

  • A 10-digit PWCR number. It must match the registration number DIR has on file. A missing or mismatched PWCR causes a hard submission failure.
  • A numeric project ID. It must match the project ID registered with DIR. You can look it up on DIR's project search.
  • Split names. First and last name are required, up to 56 characters each. Middle name is optional.
  • A full SSN or ITIN. Nine digits, with at least one present. SSNs must be unique within the file.
  • Classification name plus craft. Each classification needs a populated name and a craft.
  • Journeyman or apprentice level. Apprentices also carry a level from 1 to 10.
  • Seven days of hours. Each classification lists exactly seven days, with straight time, overtime and doubletime for each. Day 7 is the week ending date, and the six days before it fill the rest of the week. Combined hours across classifications cannot pass 24 in a day.
  • fringePaid and hourly fringe. At least one of "paid to employee" and "paid to benefit plan" must be true. Health and welfare, vacation and holiday, pension, training and other fringe amounts are all required, as hourly figures.
  • Source-of-truth totals. DIR stores the total hourly pay rates, total deductions, gross for this project, gross for all work and net wage exactly as you enter them. It does not recalculate them. Each total hourly rate is the base rate plus the fringe amounts for that classification.

Elements must also appear in the exact order the schema defines, or the file fails even if every value is present. This tool writes them in that order for you.

The most common reasons a file is rejected

  • A PWCR number that is missing, not 10 digits, or does not match DIR's records, including the old "NA" value.
  • A project ID that is missing or does not match a registered project.
  • A classification with no name attribute.
  • Duplicate SSNs in the same file. DIR rejects the affected employees. Put both classifications under one employee instead.
  • First or last name tags that are missing or in the wrong place.
  • Deduction tags that are missing or placed outside the deductions block.
  • Daily hours that do not add up to the totals, or a day count other than seven.
  • An invalid date, such as July 32.

Some problems pass validation and still make the data wrong. DIR's FAQ warns that total deductions must equal the sum of the deduction fields, and that the total straight-time hourly rate should never equal gross pay, which usually means a field is mapped to the wrong source. It also notes that identical deduction amounts across several employees may mean deductions were copied from one record to the others. The tool flags each of these as a warning.

How to upload your file

  1. Log in at services.dir.ca.gov/pw and open the project.
  2. Choose Submit, then XML upload, and select your file. File names are up to you as long as the extension is .xml.
  3. For files with fewer than 250 employees, choose "upload as DRAFT to preview before submission" in Payroll Options. The system saves a draft you can review and edit before you submit it.
  4. Files with more than 250 employees cannot be held as drafts. They are submitted straight away, so check them before you upload. A single file can hold up to 500 employees.

Passing DIR's schema check means the file is shaped correctly. It does not mean the hours, rates and totals are right, and you are the one who reviews and signs.

Classification and craft names

DIR does not publish a complete list of valid classification and craft names. Use the names exactly as they appear in your certified payroll records. If DIR does not recognize a name, its system changes it to "Other." This tool cannot check names against a list that is not public, so it only makes sure that each one is filled in.

How often eCPR is due

Under Labor Code section 1771.4, certified payroll goes to the Labor Commissioner at least monthly, or more often if your contract says so. "Monthly" means a submission at least once every 30 days while work is being performed, and again within 30 days after the last day of work on the project. The penalty for missing it is $100 per day, up to $5,000 per project.

Frequently asked questions

Do I have to switch to the V2 XML schema?

Yes, if you upload eCPR as XML. DIR says V1 submissions will still be supported until January 13, 2027, so contractors and software vendors have time to update their schema files. DIR also says it will send reminder notifications to all registered public works contractors before the cutover. After that date, plan on uploading V2 files only.

Does DIR need a full Social Security number?

Yes. Each employee needs a 9-digit SSN or a 9-digit ITIN, with no dashes or spaces. At least one of the two must be filled in, and if both are present the SSN takes priority. Each SSN must be unique in the file, so a worker who did two kinds of work belongs on one employee record with two classifications.

Where is the list of valid classification and craft names?

DIR says a complete list is not publicly available, though it is looking into whether one can be provided. Until then, use the names as they appear in your certified payroll records. If a name is not recognized, the system changes it to "Other." Every classification must still have a populated name, or the file fails validation.

If my file passes validation, is the data correct?

Not necessarily. Schema validation checks the structure of the file, not whether the numbers are right. Total deductions, gross pay, net wages and the total hourly pay rates are stored exactly as you enter them and are not recalculated by DIR. This tool works them out for you, but you still need to review the payroll and sign it.

How do I report a week with no work?

Upload it the same way as any other eCPR, with the statement of non-performance set to true. DIR adds no employee information for that week, even if the file contains some. In this tool, check the non-performance box and the employee section is left out of the file.

Sources