Codes · reference
Every ADP client we onboard has different deduction codes — is there any standard at all?
No, and there is no partial standard either: ADP and Paylocity both let each company invent its own codes, so the only reliable move is to read the employer's code list from the API at onboarding rather than mapping to anything you expect to recur.
By Eli Wilson · Published
There is no standard. Not a weak one, not a partial one — deduction codes are tenant configuration on the two largest systems whose contracts are readable, and the vendors say so in their own documentation.
Two opposite designs
| System | Code taxonomy | Consequence for you |
|---|---|---|
| ADP Workforce Now | Company-defined | Must validate against the tenant’s codeList before every write |
| Paylocity | Company-defined | Docs instruct discovery via GET rather than hardcoding |
| UKG Pro | Configuration-driven | A dedicated deduction-code configuration endpoint exists |
| Gusto | Vendor-fixed | Numeric benefit_type (1 Medical, 5 401(k), 111 529 Savings) |
| Finch | Vendor-fixed | Closed BenefitType enum, normalised across providers |
| Merge | Vendor-fixed, very coarse | benefit_plan_type has five values in total |
Company-defined, in the vendors’ own words
Paylocity states that each company ID creates its own custom definitions of earning and
deduction codes. Codes fall into category D, E or T — deduction, earning or tax — and
pair with a detType that determines how payroll treats the amount. There are 40 standard
deduction types and 26 earning types available, but which codes a given employer has, and
what they call them, is that employer’s own configuration.
ADP is the same shape with a sharper edge: your consumer application must validate the
deduction code against
/meta/data/transforms/payrollInstruction/generalDeductionInstruction/deductionCode/codeList
before building the payload for a write. And that codelist has a documented hole — known
issue US1294444 states that a newly added Post-tax code with frequency OTO does not
return in the codelist, with no workaround.
So even the discovery mechanism has a gap you have to code around.
Vendor-fixed, and what it costs
Gusto and Finch go the other way: a closed, stable vocabulary. This is much easier to build
against, and the limitation is exactly the one you would predict — you cannot express
something the enum does not name. Merge shows what happens when normalisation goes too far:
every deduction type a payroll system distinguishes is compressed into MEDICAL,
HEALTH_SAVINGS, INSURANCE, RETIREMENT and OTHER, with the original code preserved only
as a free-text deduction_code string of up to 60 characters.
Dated evidence table
| Documented evidence | Paylocity states codes are company-defined and instructs GET-based discovery. ADP requires codeList validation and documents US1294444. Gusto publishes numeric benefit_type identifiers. Merge’s benefit_plan_type enumerates five values. All checked 2026-09-10; ADP’s guide last modified 2022-09-22. |
| Strongest example | Paylocity’s advice to iterate retirement loan codes — 401L1 to 401L2 — rather than recycling an old code. That is guidance about managing a namespace the employer owns, which only makes sense if the namespace is theirs. |
| What remains unproven | How much codes actually vary between employers in practice, since we have enumerated none from a live tenant. Whether ADP’s codeList gap extends beyond OTO post-tax codes. |
The scorecard for onboarding
Apply this to every payroll system you support:
- Is there a code-list endpoint? If not, onboarding needs a manual mapping step and a spreadsheet, and you should price that in.
- Does the list include everything you can write to? ADP’s documented
OTOgap means the answer can be no even when an endpoint exists. - Does the code carry tax treatment? On Paylocity the
detTypedoes. If treatment rides on the code, your mapping step is also a compliance step. - Can you create a code? Rarely. ADP requires a form for pre-tax; Paylocity codes are
company-level configuration; Gusto gates creation per type via
writable_by_application. - What is your behaviour on an unknown code? Decide deliberately. Failing the onboarding loudly is almost always better than writing to a default and discovering it at year end.
Frequently asked
- Is there an industry code standard I am missing?
- Not for deduction codes. There are standards adjacent to this problem — ASC X12 834 for benefit enrolment, for instance — but none normalises payroll deduction or earning codes across vendors. The unified API vendors build their own normalisation layer precisely because no standard exists to adopt.
- Can I rely on code names being descriptive?
- No. Codes are alphanumeric labels chosen by whoever configured the company, and the check-stub description is a separate field from the internal description on Paylocity. Two employers can use the same string for different plans, and the same plan can carry different codes at two employers on the same payroll system.
Source limits
Not verified hands-on. We have not enumerated codes from a live tenant on any system, so we cannot confirm how much variation occurs in practice — only that the vendors document codes as company-defined. We did not assess whether ADP's 81–96 percentage range is fixed across tenants or configurable. Rippling, isolved, Paychex and Paycom publish nothing readable, so they are absent from the comparison.
Sources checked
| Source | Publisher | Document date | We checked |
|---|---|---|---|
| Deduction Instruction API Guide for ADP Workforce Now | ADP | 2022-09-22 | 2026-09-10 |
| Pay Setup — Deductions & Earnings | Paylocity | — | 2026-09-10 |
| Gusto Embedded Payroll — benefits reference | Gusto | — | 2026-09-10 |
| Employer Benefits — Merge HRIS | Merge | — | 2026-09-10 |
| UKG Pro HCM API reference | UKG | — | 2026-09-10 |
Wrong or out of date? payrolldataspecs@gmail.com — corrections are free. How claims are scored: methodology.