NY payroll XML

Turn a certified payroll CSV into the bulk upload file for the New York State DOL Certified Payroll System. Check it before you upload.

Your file stays on this computer. The page runs in your browser and uploads nothing.

Since January 1, 2026, New York has required contractors and subcontractors on public work to submit certified payroll through the state DOL's system. The bulk upload is one XML file per project and week, in the state's own format. It is not the Payroll XML that state DOTs take; for that, use the main page.

Your file

Drop a CSV or a New York payroll XML file here

A CSV gets converted to XML, then checked. An XML file gets checked. Several weeks at once? Drop them together and the page also looks for two files that cover the same week.

How to lay out the CSV

One row per worker, per classification, per day worked. The first row holds the column names below. Column order does not matter. One file holds one project and one week, the way the state takes it.

ColumnWhat goes in it
prc_numberThe project's 10 character PRC number. Same on every row.
week_endingThe last day of the work week, as 2026-10-04 or 10/4/2026. Same on every row.
last_name, first_name, middle_nameThe worker's name. Middle name can be blank.
ssn_last4, date_of_birthFill one of them, not both. A full SSN is cut to its last 4; the rest never goes in the file.
apprenticeY if the worker is a New York registered apprentice, N or blank if not.
address1, address2, city, state, zip, countryThe worker's address. NY becomes New York; the state wants the full name. A ZIP like 12207-0002 is split for you, and one Excel cut to 4 digits gets its 0 back. Country can be blank for United States.
gross_earnings, net_wagesThe week's gross and net pay for the worker. Same on each of that worker's rows.
deductionsPairs like Federal Tax:150.00;State Tax:50.00. Up to 10. Blank if none.
work_categoryThe classification, as it reads on the wage schedule.
st_rate, ot_rateStraight time and overtime hourly rates, at most 2 decimals.
health, vacation, training, pension, otherOptional. Hourly supplement rates for this classification. Add health_ot and so on when the overtime rate differs. other needs other_explanation.
work_date, st_hours, ot_hoursThe day worked and the hours that day.

What the check looks for

Problems are things the state's upload rejects. Most of them pass the state's schema, so a schema check alone will not catch them.

It also explains four places where the state's guide page and its own schema disagree, so the upload's error makes sense:

Warnings are things a reviewer would ask about:

What it does not check

The rates in the prevailing wage schedule, whether the PRC number and classifications match your project, or the hours against your time cards. The check compares the file's own numbers with each other.