The setup that holds up is a construction-aware payroll system fed by a GPS time app, with both wired into the software you already use to run jobs. Every punch carries three tags: the job, the location, and the pay classification. Withholding, certified payroll, per diem and union reports all come off those tags, and nothing downstream can repair a wrong one.
How much software that takes depends less on headcount than on how many different rulebooks you’re running at once. Below: a quick way to score that, where mobile crews get burned, what a bad setup actually costs, how project software fits in, and what changed for 2026.
Score Your Complexity Before You Pick Software
Headcount is a poor guide. An eight-person crew building a bridge across a state line, under a union agreement and prevailing wage, has more payroll to get right than fifty people framing houses in Texas. So count what you’re running at the same time and add up points.
| What you count | Points each | How to count it |
|---|---|---|
| States | 3 | Every state you pay wages in, home state included |
| Local wage-tax jurisdictions | 2 | Every city, county or school district where you withhold |
| Union agreements | 4 | Every separate agreement, so two trades means two |
| Prevailing wage projects | 5 | Every project active at the same time |
A five-person remodeler in one state with one local wage tax scores 3 + 2 = 5. Fifty people on private jobs in Texas, which has no local wage tax, score 3. The eight-person bridge crew works in two states, withholds for two localities, has one union agreement and one prevailing wage project: 6 + 4 + 4 + 5 = 19. A 60-person outfit in three states with three localities and two prevailing wage projects, no union, scores 9 + 6 + 10 = 25.
| Score | Setup that fits | Where it breaks |
|---|---|---|
| 0 to 8 | Mainstream payroll (Gusto, ADP RUN, QuickBooks Payroll) plus a GPS time app (busybusy, ExakTime, Workyard, QuickBooks Time) | No certified payroll, no union fringe handling. One prevailing wage bid adds 5 points, so this tier ends fast. |
| 9 to 20 | A construction-specific payroll service (Miter and Payroll4Construction both advertise certified payroll, union and multi-state support) | Job costing often lives elsewhere, so confirm payroll data reaches your accounting. |
| 21 and up | A construction ERP with payroll (Foundation, Sage 300 CRE, Viewpoint Vista, CMiC, ComputerEase) | Cost and a long rollout. Worth it once payroll errors cost more than the software. |
Notice where the bridge crew lands. At 19 it doesn’t need an ERP. It needs a payroll service that handles certified payroll and union reporting. If you want payroll posting straight into job cost in the general ledger, move up one tier. Any tier can also hand payroll to an outsourced service or a PEO, but you still own the data going in, and nobody files correctly off bad time records.
The weights and cutoffs are a rule of thumb, not an industry standard. They reflect how much extra work each item creates, and you should adjust them if your mix is unusual. Headcount still drives price and how much you want to run in-house. It just doesn’t drive complexity. The product names aren’t endorsements, only the ones you’ll run into. Test whatever you shortlist with the vendor questions near the end.
What Changes When a Crew Crosses a State Line
Cross a border and several rulebooks switch on at once, and they don’t agree with each other. This is the cheat sheet.
| What | Follows | The catch |
|---|---|---|
| State income tax withholding | The state where the work happens, unless a reciprocity agreement says otherwise | Reciprocity covers state income tax only |
| Local income taxes | The city, county or school district where the work is done or the worker lives, depending on the locality | Ohio, Pennsylvania, Kentucky and Indiana all have them, each with its own rules |
| State unemployment (SUTA) | One state per employee, set by a four-step test | It’s not “wherever they worked that week” |
| Workers’ comp | The states named on your policy | Four states don’t allow private coverage |
| Prevailing wage | The project, not the employee | Applies to every hour on that job |
| Per diem | The GSA rate for the work location | Becomes taxable if the assignment runs past a year |
Take a Cincinnati crew pouring a slab across the river in Kentucky. Ohio and Kentucky have a reciprocity agreement, so an Ohio-resident employee can file a nonresident exemption form with Kentucky, and you generally keep withholding Ohio tax instead of Kentucky’s. A Kentucky resident on an Ohio job works the same way in reverse. The catch is that cities on both sides of the river have their own taxes, and reciprocity doesn’t touch them.
Know the agreements before you bid. Ohio has them with Indiana, Kentucky, Michigan, Pennsylvania and West Virginia. Pennsylvania and New Jersey have one with each other, but New Jersey has none with Ohio. Confirm with the state revenue department, since agreements and forms change.
Unemployment insurance is where people slip. An employee’s wages go to one state’s system, chosen by a four-step test applied in order: where the work is localized, where your base of operations is, where direction and control come from, and finally where the employee lives. For most crews that lands on the home state. Report to the wrong one and you’ll be untangling it with two agencies.
For workers’ comp, your policy lists states. Ask your broker about an other-states endorsement before the crew leaves, not after someone gets hurt. Four states (Ohio, North Dakota, Washington and Wyoming) run state-only funds. A Kentucky contractor with a private policy who sends a crew to Cincinnati generally has no coverage for them in Ohio until Ohio coverage is in place.
Per diem is tax-free only under an accountable plan: dates, place and business purpose on file for each trip. Rates follow GSA and reset every October 1. For fiscal 2027 the standard rate is $113 for lodging plus $68 for meals and incidentals, and plenty of locations run higher. A trip that crosses October 1 uses two rate sets. And “temporary” matters: if a job is expected to last more than a year, the travel pay generally becomes taxable wages.
Edge Cases That Trip Up Mobile Crews
Let the job record pick the state, not the GPS pin
Plenty of setups let the phone’s live location decide which state or locality a punch belongs to. That works until the job sits near a line, which is most of the time in places like Cincinnati and northern Kentucky or Louisville and southern Indiana. GPS accuracy depends on things like sky blockage and receiver quality, according to GPS.gov, and it gets worse next to tall structures, under bridges and in deep excavations. Location based on cell towers or Wi-Fi is rougher still. A pin that drifts across the line can tag a whole shift to the wrong state.
The fix is to separate two jobs. The job record (street address, state, locality) decides the tax jurisdiction. The GPS only confirms the worker was at that site. Size the geofence to the site, and on jobs close to a state or city line, have the supervisor approve the first punch of the day. A job that straddles a line, like a bridge or a pipeline, needs a written rule for splitting hours by where the work physically happened, and that rule should be checked with the states involved.
Drive time between jobs and states
Under the FLSA, an ordinary commute isn’t paid time. Travel from one job site to another during the workday is. A one-day assignment in another city is paid, minus the time the worker would normally spend commuting. Overnight travel is paid when it falls during normal working hours, on any day of the week. And if driving the truck is the work, the driver’s time is paid even outside those hours, while a passenger outside normal hours generally isn’t.
State law and union agreements often go further. Where a state has daily overtime, California being the usual example, hours worked inside that state can fall under its rules. Whether paid drive time inside the state counts is a question for an employment lawyer before a crew takes a company truck across that line. On the payroll side, record travel as its own time type, flagged paid or unpaid, with the state it happened in. Don’t bury it in regular hours.
What a Bad Setup Actually Costs
Most penalties for the wrong state or the wrong classification vary by state and by case, so any “average cost of a payroll error” would be made up. Here’s what is fixed, and what you can calculate yourself.
| The error | What it triggers | What’s known |
|---|---|---|
| Wrong classification on certified payroll | Back wages for the difference, owed to the worker | The Department of Labor lists falsified certified payrolls and misclassification among grounds for debarment, which lasts 3 years |
| Wrong or late W-2 or 1099 | An IRS information return penalty for each return | For returns due in 2026: $60, $130 or $340 depending on how late, and $680 for intentional disregard |
| Wrong qualified overtime in Box 12, code TT | A corrected W-2c, and penalties may apply | Per IRS guidance on the new reporting |
| Wages reported to the wrong SUTA state | Amounts and penalties set by each state | Varies by state; expect to deal with more than one agency |
Now the math on one realistic misclassification. Say the operator classification on a project pays $50.00 an hour including fringes and the laborer classification pays $36.00. Ten laborers each spend six hours a week running equipment but get paid as laborers. That’s 10 x 6 x $14 = $840 a week in back wages. On a 26-week job it’s $21,840, before overtime effects. These numbers are illustrative, not a survey. The bigger risk isn’t the $21,840. It’s the 3-year debarment from public work that can come with it. Miss 1099 deadlines on 12 subs past August 1 and the penalty alone is 12 x $340 = $4,080.
Connecting Payroll to Your Project Management Software
Most contractors already run jobs in something like Procore or Buildertrend. The useful question isn’t whether to connect payroll to it, but which system owns which data. Get that wrong and you end up maintaining the same job list in three places.
| Data | Should live in | Should flow to |
|---|---|---|
| Job list, addresses, cost codes | Project software | Time app and payroll |
| Hours, with job, cost code and classification | Time app | Payroll, then project software |
| Pay rates, wage determinations, fringe rates | Payroll | Stays there |
| Burdened labor cost (wages plus employer taxes, comp and fringes) | Payroll | Accounting and job cost |
In practice, “integrated” often means less than it sounds like. According to its own help page, the Gusto and Buildertrend connection moves employees and clock-in hours, but not pay rates. It covers hourly employees only, needs a Core or Pro Buildertrend plan, and matches people by email address. The busybusy and Procore integration goes further on the front end: per its site, employees, projects and cost codes come over from Procore, and hours go back. Vendors change these details, so check the current docs. The pattern is what matters. Hours travel well. Everything else tends to stay behind.
That’s why payroll needs its own copy of each job’s address and contract type. If the integration passes only hours, payroll has to work out the state and locality from the job record, and the classification from the punch. If it can’t, you’re back to fixing it by hand every pay period.
Three failure points show up again and again. A cost code gets renamed in the project tool and no longer matches anything in payroll. A foreman edits a timecard after payroll was approved, and the change never reaches the check. And salaried foremen, who are often left out of hourly syncs, get entered by hand and drift out of line.
The bigger problem is cost. Your estimates and job cost reports likely use a base wage, but a prevailing wage job in another state adds fringes, a different comp rate and possibly local taxes. If burdened cost doesn’t flow back, the project dashboard says the job is profitable while the books say otherwise.
Rounding is the quiet one. If one system carries a fringe-loaded rate of $47.375 and another rounds it to $47.38, the gap is half a cent an hour. Across 20 workers at 40 hours that’s 20 x 40 x $0.005 = $4.00 a week. It sounds trivial, but certified payroll totals are supposed to foot, and some portals check them. Ask your portal or agency what tolerance it applies. Then run one fringe-heavy week through the whole chain, and compare hours and dollars in the time app, payroll and the WH-347 to the cent. Do it before the first out-of-state or public job.
One Week From Punch to W-2
Vendors will show you clean demos. Here’s one messy week with the math written out. Assume an Ohio-resident laborer on private jobs, 25 hours in Ohio at $30 and 23 hours in Kentucky at $36.
| Line | Amount or treatment |
|---|---|
| Ohio job: 25 hours at $30 | $750.00 |
| Kentucky job: 23 hours at $36 | $828.00 |
| Straight-time pay for 48 hours | $1,578.00 |
| Weighted regular rate ($1,578 ÷ 48) | $32.875 |
| Overtime premium (8 hours x ½ x $32.875) | $131.50 |
| Gross pay | $1,709.50 |
| Qualified overtime for Box 12, code TT | $131.50 |
| State income tax withholding | Ohio, if the Kentucky nonresident exemption form is on file |
| Unemployment wages | One state under the four-step test, usually home |
Two things to notice. First, when someone works at two rates, the FLSA default is a weighted average of everything earned, not the rate of the last job. Second, only the $131.50 premium goes into code TT, not the full overtime pay. Some employers agree in advance to pay overtime at the rate of the job worked during the overtime hours, and that changes the numbers. If either job is prevailing wage, Davis-Bacon rules sit on top of all this, so have a specialist check the method. Whichever method you use, your system should show its work, and a vendor demo should show it too.
What Changed for 2026
Qualified overtime now goes on the W-2
Under the new federal overtime deduction, employers must report qualified overtime in Box 12 of the W-2 with code TT, starting with 2026 wages. Those forms go out in early 2027, and the IRS isn’t extending the penalty relief it gave for 2025.
Only the premium the FLSA requires counts, not the whole overtime paycheck. Say a laborer earns a $30 regular rate and works 48 hours. Eight overtime hours at $45 is $360 in overtime pay, but only the half-time portion, 8 x $15 = $120, is qualified overtime for that week. The FLSA calculation uses the regular rate, which can include things like production bonuses.
Construction gets hit harder than most industries because anything beyond the FLSA minimum doesn’t count. If your union agreement pays double time, or your state requires daily overtime, the part above what the FLSA demands (hours over 40 in the workweek) stays out of code TT. Your system has to split each overtime hour into the FLSA premium and everything else, using separate earnings codes all year. Report the full qualified amount even if it’s more than the worker can deduct; the deduction caps at $12,500, or $25,000 on a joint return. A wrong number means a corrected W-2c, and don’t lower anyone’s withholding on the assumption they’ll qualify. That takes an updated W-4 from the employee.
The 1099 threshold jumped to $2,000
For payments made in 2026, the reporting threshold for 1099-NEC and most 1099-MISC forms rose from $600 to $2,000, and it’s indexed to inflation after that. Labor still goes on the 1099-NEC and equipment rentals on the 1099-MISC. If your accounting software still flags subs at $600, change the setting. Keep collecting a W-9 before the first payment anyway. It beats chasing one in January.
Prevailing Wage and Certified Payroll
Davis-Bacon applies to federal construction contracts over $2,000. You submit payroll weekly with a signed statement of compliance. Form WH-347 is the standard format, though you can send the same information in your own layout. State and local prevailing wage programs add their own rates, forms and portals, so a crew working in two states can owe two formats for the same week.
Errors usually start in three places. Classification follows the work performed, hour by hour, so someone who runs a skid steer in the morning and hauls debris in the afternoon may split across classifications in one day. Fringe benefits have to be paid in cash or as contributions to a bona fide plan, and you need to show which. And overtime gets messy on split time: when someone works two classifications, or a prevailing wage job and a private one, in the same week, systems handle the math differently. Make any vendor walk you through a worked example, then have your CPA or a prevailing wage specialist check it.
Have supervisors assign the classification in the app at the moment of the punch. That timestamp is your audit trail.
Running Union and Non-Union Work in One System
It can be done in one system, but the job’s contract type has to decide the rules, not someone’s memory. On union jobs, overtime triggers come from the agreement and can be daily, weekly or tied to the day of the week. Non-union work follows the FLSA plus state law, and a few states, California for one, require daily overtime.
Fringe contributions are employer-paid and owed to the trust funds on the agreement’s schedule, usually monthly, with a remittance report. They aren’t deductions from the worker’s check. Keep them in a separate liability account so the money never blends into operating cash. Dues check-offs are the exception: those do come out of pay and go to the union. Travel and zone pay are set by the agreement too, so they need their own earnings codes.
Setting It Up in the Right Order
- Run a “new state” check before you bid: withholding and unemployment registration, reciprocity, local taxes, workers’ comp coverage, and whether it’s a prevailing wage job. Any “don’t know” is a cost to price in or a job to pass on.
- Build the job master in your project software. Every job gets a street address, city, county, state and contract type (private, state prevailing wage, federal Davis-Bacon or union).
- Set classifications and rates in payroll before day one, not after the first pay run.
- Turn on GPS clock-in with supervisor approval. Workers punch in, supervisors fix exceptions the same day.
- Create separate earnings codes for regular time, FLSA overtime premium, contract or state premium pay, per diem and travel time.
- Run a weekly wrong-state report that compares hours by state against the states you’re registered in. If someone punched in Indiana and you’re not set up there, you want to learn that on Friday, not at quarter-end.
- Reconcile on the schedule of whoever you owe: weekly certified payroll, monthly trust fund reports, quarterly state returns.
Questions to Put to a Vendor Before You Sign
- Can you show one employee working in two states and two classifications in the same week, from punch to paycheck to filing?
- Does the state come from the job record or from the phone’s location?
- Which reciprocity agreements and local taxes do you handle automatically, and which are on me?
- Can you split overtime into the FLSA premium and everything above it, and report Box 12, code TT?
- Which certified payroll formats do you produce, WH-347 and which state forms? At what decimal precision do you calculate rates and fringes?
- Can you produce trust fund remittance reports in the format my funds require?
- What exactly syncs with my project software, in which direction, and what does the integration cost?
If you do one thing this week, pull last quarter’s time records and count the hours worked outside your home state. Then score yourself with the table above. Those two numbers tell you which part of this article matters most to your business.
This is general information, not tax or legal advice. State rules and reciprocity agreements change, so confirm anything state-specific with the state’s revenue department or your CPA. Current federal per diem rates are on the GSA per diem page, and the Department of Labor explains Davis-Bacon requirements on its site.
![How to verify if a contractor is licensed and insured in [State]?](https://www.soccash.com/wp-content/uploads/2026/01/how-to-verify-if-a-contractor-is-licensed-and-insured-in-state-150x150.jpg)