UK Skilled Worker Visa 2026: The Going Rate Stack — Why Checking the General Threshold Isn't Enough
Most eligibility logic for UK Skilled Worker visa compliance starts with a single salary check: is the offered salary >= £38,700? That check is necessary. It is not sufficient.
The Home Office applies a two-constraint model, and failing either constraint produces a refusal. Building your compliance system around only one of them means your eligibility screen has a systematic blind spot.
The Two-Constraint Model
Every Skilled Worker visa application is assessed against both:
- General minimum salary — currently £38,700/year or £10.75/hour, whichever is higher (post-April 2024 thresholds)
- SOC-code going rate — the 25th percentile salary for the specific occupation, as defined in the Home Office Skilled Worker Appendix
The operative threshold is max(general_minimum, going_rate). An application that clears £38,700 but falls below the going rate for its SOC code fails on constraint 2.
For common SOC codes where going rates exceed the general minimum:
- SOC 2136 (Software developers): ~£49,400
- SOC 2121 (Civil engineers): ~£45,900
- SOC 2139 (IT professionals NEC): ~£43,800
- SOC 1132 (Marketing managers): ~£47,100
- SOC 2112 (Biological scientists): ~£40,200
If your eligibility check returns PASS at £39,000 for a software developer, it's wrong.
Modifier Stack: New Entrant and ISL Discounts
The system applies two potential discount multipliers. Neither is simply subtracted from the general minimum. Both apply to the going rate.
New Entrant Rate
Conditions for new entrant classification:
- Switching from Student or Graduate visa at time of application
- Within first 3 years of career post-graduation (PhD holders get additional flexibility)
- Under 26 at the date of application (removed as a standalone criterion in 2024 — now must meet one of the above)
Threshold calculation:
new_entrant_going_rate = max(going_rate * 0.70, 30_960)
operative_threshold = max(new_entrant_going_rate, 30_960)
Wait — those two lines collapse to:
operative_threshold = max(going_rate * 0.70, 30_960)
The common implementation error: treating £30,960 as a flat new entrant threshold regardless of the going rate. If the going rate is £50,000, the new entrant threshold is £35,000 — not £30,960. Setting the salary to £30,960 fails constraint 2.
Immigration Salary List (ISL) Discount
The ISL replaced the Shortage Occupation List in April 2024. For ISL-listed occupations, the going rate threshold is discounted by 20%. The general minimum is unaffected.
isl_going_rate_threshold = going_rate * 0.80
operative_threshold = max(isl_going_rate_threshold, 38_700)
The trap: When going_rate * 0.80 < 38_700, the ISL discount doesn't reduce the minimum at all. The general threshold becomes binding again.
Example: ISL role with going rate £45,000
- Discounted going rate: £36,000
- General minimum: £38,700
- Operative threshold: £38,700 (general minimum wins)
Example: ISL role with going rate £55,000
- Discounted going rate: £44,000
- General minimum: £38,700
- Operative threshold: £44,000 (discounted going rate wins)
The ISL discount only provides meaningful relief where going_rate > £48,375 (since 80% of that = £38,700, above which ISL starts beating the general floor).
Combined: New Entrant on ISL Role
operative_threshold = max(going_rate * 0.70, 30_960)
Note: new entrant on an ISL role does NOT stack the two discounts to get 50% of going rate. The new entrant rate applies, which already incorporates the more generous discount.
SOC Code Validation Is a Pre-Condition
Salary logic is only correct if the SOC code is correctly assigned. SOC codes are not self-evident from job titles:
- "Data analyst" → could be 2137 (IT business analysts), 2154 (data scientists), or 3539 (business associate professionals NEC)
- "Product manager" → 2137 or 1134 depending on scope
- "UX designer" → 2139 or 3111 (laboratory technicians) — a mistake that's been made
Home Office case workers cross-reference the SOC code against the job description in the Certificate of Sponsorship. Mismatches trigger requests for further information and can result in refusal.
Your compliance system should flag applications where:
- The job title doesn't clearly map to the assigned SOC code
- The assigned SOC code's going rate is significantly different from what the sponsor expected
- The salary is close to (within 5% of) the going rate threshold — these cases have no margin for SOC reclassification
Pseudocode for a Correct Eligibility Function
def skilled_worker_eligible(salary, soc_code, is_new_entrant, is_isl):
going_rate = get_going_rate(soc_code) # from current HO appendix
if is_new_entrant:
going_rate_threshold = max(going_rate * 0.70, 30_960)
general_floor = 30_960
elif is_isl:
going_rate_threshold = going_rate * 0.80
general_floor = 38_700
else:
going_rate_threshold = going_rate
general_floor = 38_700
operative_threshold = max(going_rate_threshold, general_floor)
return {
"eligible": salary >= operative_threshold,
"operative_threshold": operative_threshold,
"binding_constraint": "going_rate" if going_rate_threshold >= general_floor else "general_floor",
"margin": salary - operative_threshold
}
The binding_constraint field matters for error messages. If general_floor is binding, telling the user their SOC code's going rate is wrong won't help them.
Data Currency Problem
Going rates are updated periodically based on ASHE data. The going rate for SOC 2136 in 2023 was different from 2024. Any system that hardcodes going rates rather than pulling from a regularly updated source will drift out of compliance within 12 months.
For the current going rate table and a working eligibility check against real applicant parameters, ImmigrationGPT maintains an up-to-date implementation.
This post covers the technical structure of UK Skilled Worker salary thresholds as of September 2026. Immigration rules change. Verify against the current Home Office Skilled Worker Appendix before making compliance decisions.
Top comments (0)