Tax Compliance Across Multiple Jurisdictions

Managing payroll taxes becomes difficult as your workforce grows - especially if you have employees across multiple tax jurisdictions. Say an employee works half a pay cycle in New York and the other half in New Jersey. Should you withhold income tax for both states? Are there reciprocity agreements that apply? Thankfully, Zeal’s tax engine already accounts for all these cases.

In this guide

  • What determines how payroll taxes are withheld.
  • How to manage employees that live in one jurisdiction but work in another.
  • How to manage employees that work across multiple jurisdictions.
  • How to submit tax requirements for employers.

Payroll taxes

Payroll taxes are taxes paid by employers and employees on wages, tips, and salaries. This includes federal and state income taxes, Social Security and Medicare, as well as local taxes such as for school districts.

Technically, these taxes are all reconciled during end-of-year filings (most of us in the United States know the joys of tax season). However, to avoid payment defaults, the government mandates that payroll taxes be estimated, withheld, and remitted to the proper tax agencies throughout the year. This is one of the core services that Zeal provides.

Calculating payroll taxes

In order to properly calculate payroll taxes Zeal’s tax engine needs an employee's:

  • Compensation information - wages, tips, and/or salary earned.
  • Tax parameters - what deductions are claimed on the withholding statement(s) (W-4 form).
  • Residential address - where the employee lives.
  • Work location - where work is completed.

Zeal enforces that all this information is collected before an employee can be onboarded to the system (see employee onboarding for more details). For information that may vary between pay periods, Zeal will collect default values to fall back on.

An employee’s tax parameters and residential address are generally fixed. They may need to be updated on a one-off basis, but don’t vary shift to shift. So to remain compliant across multiple jurisdictions, we really just need to onboard correctly and then submit work locations along with compensation information.

Employees that live and work in different jurisdictions

Having an employee that lives in one jurisdiction, but works in another may seem like a difficult hurdle. However, it’s actually a problem that’s handled when onboarding an employee to Zeal.

Residential address and default work location

Zeal requires a valid address and work location in order to create an employee. The workLocationID will point to the employee’s default work location. Later, we’ll discuss how to override this for employees that work across varying jurisdictions.

🔔

Note

Remember to replace the placeholders such as {{testApiKey}} in the code samples below.

Create an employee

curl --request POST \
     --url https://api.zeal.com/employees \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer {{testApiKey}}' \
     --header 'Content-Type: application/json' \
     --data-raw '
{
     "new_employees": [
          {
               "overtime_rate": 1.5,
               "double_time_rate": 2,
               "autopilot": {
                    "autopilot_on": false
               },
               "is_943": false,
               "is_scheduleH": false,
               "email": "[email protected]",
               "first_name": "Richard",
               "last_name": "Hendricks",
               "title": "CEO",
               "default_pay_schedule": "semimonthly",
               "default_wage": 50,
               "workLocationID": "{{workLocationID}}",
               "start_date": "2022-01-01",
               "dob": "1985-05-25",
               "ssn": "123456789",
               "phone_number": "1234567890",
               "address": "1 Market St.",
               "city": "San Francisco",
               "state": "CA",
               "zip": "94110"
          }
     ],
     "companyID": "{{companyID}}"
}
'

Setting tax parameters

If you use Zeal’s white-label employee onboarding component, the UX will ensure that the proper tax parameters are gathered. Otherwise, you can get and set the tax parameters based on the living state and working state(s).

Generate employee tax parameter definitions

curl --request POST \
     --url https://api.zeal.com/employees/getTaxParameterDefinitions \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer {{testApiKey}}' \
     --header 'Content-Type: application/json' \
     --data '
{
     "jurisdictions": [
          "US",
          "CA"
     ]
}
'

Set employee tax parameters

curl --request POST \
     --url https://api.zeal.com/employees/setTaxParameters \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer {{testApiKey}}' \
     --header 'Content-Type: application/json' \
     --data '
{
     "employeeID": "{{employeeID}}",
     "companyID": "{{companyID}}",
     "federalParameters": [
          {
               "code": "FILINGSTATUS",
               "jurisdiction": "US",
               "value": "H"
          }
     ],
     "stateParameters": [
          {
               "code": "FILINGSTATUS",
               "jurisdiction": "CA",
               "value": "H"
          },
          {
               "code": "REGULAR_ALLOWANCES",
               "jurisdiction": "CA",
               "value": "1"
          },
          {
               "code": "SUTA_CA_EXEMPT",
               "jurisdiction": "CA",
               "value": "NO_REPORTING"
          }
     ]
}
'

Employees that work in varying jurisdictions

It can be a little trickier to account for employees who may not always work in the same location. Many workers on Zeal’s system work for large staffing companies, and as such, may even work in several locations within the same pay period!

Include the work location in a shift

To handle this, Zeal allows you to submit a work location along with any shift in the employee check object.

Create an employe check

curl --request POST \
     --url https://api.zeal.com/employeeCheck \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer {{testApiKey}}' \
     --header 'Content-Type: application/json' \
     --data '
{
     "approval_required": false,
     "disbursement": {
          "method": "direct_deposit"
     },
     "shifts": [
          {
               "hourly": {
                    "hours": 8,
                    "amount": 25
               },
               "workLocationID": "{{workLocationID}}
          }
     ],
     "companyID": "{{companyID}}",
     "employeeID": "{{employeeID}}",
     "reportingPeriodID": "{{reportingPeriodID}}",
     "check_date": "2022-01-14"
}
'

Or add a shift to an existing check

curl --request POST \
     --url https://api.zeal.com/shifts \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer {{testApiKey}}' \
     --header 'Content-Type: application/json' \
     --data '
{
     "shifts": [
          {
               "hourly": {
                    "hours": 8,
                    "amount": 25
               },
               "workLocationID": "{{workLocationID}}
          }
     ],
     "companyID": "{{companyID}}",
     "employeeID": "{{employeeCheckID}}"
}
'

📝

Omitting the work location

If you omit a workLocationID Zeal, will fallback to the workLocationID on the employee object gathered during onboarding.

With the work location reported for every shit, Zeal can calculate taxes for every jurisdiction an employee works.

Submitting employer tax requirements

As you onboard employees in different jurisdictions, you’ll need to ensure that all the employer tax requirements have been submitted. These requirements give Zeal the information and legal permission that we need to properly file taxes in all jurisdictions the employer operates in.

This information can be submitted in the Tax Setup page. When you enter the Tax Setup page, you'll see alerts for any missing requirements the employer has.

Admin/Employer Dashboard

If you are using our white-label Employer Dashboard, employers can access their tax requirements through the Taxes page.

  1. Navigate to the Taxes page.

  1. At the top of the page, employers can see any missing requirements

  1. Employers can also search by state and locality to proactively submit tax requirements.

Embedding the Taxes Page

If you’ve built your own custom dashboards using our APIs, you can embed the Taxes component directly in your dashboard.

  1. Call Generate Employer Taxes Page Link
curl --request POST \
     --url https://api.zeal.com/authLinks/taxes \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer {{testApiKey}}' \
     --header 'Content-Type: application/json' \
     --data '
{
     "partnerID": "{{partnerID}}",
     "companyID": "{{companyID}}"
}
'
  1. Embed the link in your application through and iframe or open it up in a new tab.

Recap

  • Zeal automatically withholds and remits taxes to the proper tax agencies.
  • Zeal calculates payroll taxes based on an employee’s compensation, tax parameters, residential address, and work location.
  • All required information for an employee that lives in one location but works in another is gathered during onboarding.
  • To manage workers with varying work locations, you can submit a workLocationID as part of the shift object
    For each jurisdiction that you have employee’s, employer tax requirements must be submitted to give Zeal the information and permission to file taxes to that jurisdiction.
  • Tax requirements can be submitted via the Tax Setup page which can be accessed through the Partner Dashboard, Employer Dashboard, or embedded.