Part of the guide: Saudi HR & Payroll Toolkit 2026: GOSI, End of Service, Days
Saudi GOSI Contribution Rates 2026: Old vs New Law
Why did your GOSI deduction go up in July 2026 while your colleague's stayed exactly the same? It almost always comes down to when you first joined Saudi Arabia's social insurance system, not when you started your current job.
GOSI contribution rates 2026 follow two systems. Under the old law, Saudi employees pay 9.75% and employers pay 11.75%. Under the new law, rates from 1 July 2026 are 10.75% for the employee and 12.75% for the employer. Non-GCC expatriate employees pay nothing, while the employer pays 2% for occupational hazards.
If you only need the number for one salary, the GOSI calculator does it in a few seconds. The rest of this guide explains which rate applies to whom, how the deduction is calculated, and how to reconcile it with a GOSI invoice.
GOSI contribution rates 2026: old vs new law
GOSI is the General Organization for Social Insurance (المؤسسة العامة للتأمينات الاجتماعية), Saudi Arabia's social insurance authority. Employers register eligible workers and pay monthly contributions. For Saudi employees, part of that contribution is deducted from salary and the employer pays the rest.
The change came with the new Social Insurance Law issued under Royal Decree M/273. The law took effect on 3 July 2024, and its phased pension increases started in July 2025. Since then, two contribution systems have run side by side.
| Category | Old law | New law (from July 2026) |
|---|---|---|
| Saudi employee pension | 9% | 10% |
| Saudi employee SANED | 0.75% | 0.75% |
| Total employee deduction | 9.75% | 10.75% |
| Employer pension | 9% | 10% |
| Employer SANED | 0.75% | 0.75% |
| Employer occupational hazards | 2% | 2% |
| Total employer contribution | 11.75% | 12.75% |
| Combined Saudi contribution | 21.50% | 23.50% |
These percentages apply to the employee's contributory (GOSI) salary, not necessarily the whole salary package. SANED is the unemployment insurance branch. Occupational hazards covers work injuries and is paid entirely by the employer.
The new law only raises the pension portion. SANED and occupational hazards stay the same. You can confirm the structure on the official GOSI awareness platform.
New-law pension schedule, 2024 to 2028
The new law does not apply the full increase at once. The employee and employer pension portions each rise by 0.5 percentage points every July until they reach 11%.
| Effective period | Pension (each side) | Full employee deduction | Full employer contribution |
|---|---|---|---|
| July 2024 to June 2025 | 9% | 9.75% | 11.75% |
| July 2025 to June 2026 | 9.5% | 10.25% | 12.25% |
| July 2026 to June 2027 | 10% | 10.75% | 12.75% |
| July 2027 to June 2028 | 10.5% | 11.25% | 13.25% |
| From July 2028 | 11% | 11.75% | 13.75% |
The full employee deduction is pension plus 0.75% SANED. The full employer contribution is pension plus 0.75% SANED plus 2% occupational hazards.
Old-law employees do not follow this schedule. Their rates stay at 9.75% and 11.75%.
The July 2026 legislation update from Deel Local Payroll also confirms the 0.5-point increase on each side.
Who follows the old law and who follows the new law?
This is where payroll teams make their biggest mistake. The deciding factor is the employee's earlier contribution history, not their current employment contract and not their join date with your company.
Old law: contribution history before 3 July 2024
A Saudi employee who had any contribution period under the Social Insurance Law or the Civil Retirement (pension) Law before 3 July 2024 generally stays under the old rates.
Example: Ahmed first joined GOSI in 2021. He resigned in 2025 and started at another company in September 2026. The new contract does not move him into the new system, so his employee deduction stays at 9.75%.
The edge case people miss is short or old coverage. A Saudi who was registered briefly years ago still has a prior contribution period. So does someone who worked in a government job under civil retirement. Unless GOSI's records say otherwise, they are on the old law.
New law: first-time contributors from 3 July 2024
The new system applies to Saudi workers with no contribution periods at all before 3 July 2024.
Example: Khalid started his first insured job in September 2024. From July 2026, his employee deduction is 10.75%, rising to 11.25% in July 2027.
If Ahmed and Khalid have identical salaries in the same department, their deductions still differ.
Don't use age to choose the contribution rate. Age matters for some retirement rules, but contribution history decides the contribution system. Don't rely only on the registration date with your company either. Check earlier contribution periods in GOSI, including civil retirement coverage, before assigning the scheme.
How to calculate GOSI salary and deductions
Which salary components are included
GOSI contributions are calculated on:
GOSI salary = Basic salary + Housing allowance
Transport allowance, overtime and ordinary reimbursements are not included. The maximum monthly contributory wage is SAR 45,000.
| Salary component | Monthly amount |
|---|---|
| Basic salary | SAR 8,000 |
| Housing allowance | SAR 2,000 |
| Transport allowance | SAR 1,000 |
| Total salary | SAR 11,000 |
| GOSI calculation base | SAR 10,000 |
Housing can be paid in cash or provided in kind. For cash housing, use the agreed allowance amount. For employer-provided accommodation, GOSI has its own valuation rules, generally based on two months of basic salary per year, with exceptions.
Don't assume housing is always 25% of basic salary. Some employers use a percentage, others a fixed amount. Payroll must follow the employee's actual housing arrangement and the wage registered with GOSI.
Example: SAR 10,000 under the old and new law
A Saudi employee with SAR 8,000 basic and SAR 2,000 housing has a GOSI salary of SAR 10,000.
Old law:
- Employee: SAR 10,000 × 9.75% = SAR 975
- Employer: SAR 10,000 × 11.75% = SAR 1,175
- Total: SAR 2,150
New law, from July 2026:
- Employee: SAR 10,000 × 10.75% = SAR 1,075
- Employer: SAR 10,000 × 12.75% = SAR 1,275
- Total: SAR 2,350
| Calculation | Old law | New law |
|---|---|---|
| GOSI salary | SAR 10,000 | SAR 10,000 |
| Employee deduction | SAR 975 | SAR 1,075 |
| Employer contribution | SAR 1,175 | SAR 1,275 |
| Combined contribution | SAR 2,150 | SAR 2,350 |
At this salary, the employee pays SAR 100 more per month under the July 2026 new-law rate, and so does the employer. These figures exclude any other payroll deductions. To see the effect on take-home pay, use the salary and paycheck calculator.
Salaries above the SAR 45,000 cap
If basic is SAR 40,000 and housing is SAR 10,000, the total is SAR 50,000, but GOSI is calculated on SAR 45,000.
| Calculation | Old law | New law (July 2026) |
|---|---|---|
| GOSI salary (capped) | SAR 45,000 | SAR 45,000 |
| Employee deduction | SAR 4,387.50 | SAR 4,837.50 |
| Employer contribution | SAR 5,287.50 | SAR 5,737.50 |
A payroll system that forgets the cap overcharges every senior employee, every month.
Expatriate employees
For ordinary non-GCC expatriate employees, the rule is simpler.
| Contribution | Rate |
|---|---|
| Employee contribution | 0% |
| Employer occupational hazards | 2% |
On a SAR 10,000 contributory salary, the employee pays SAR 0 and the employer pays SAR 200. The 2% is an employer cost and must not be deducted from the employee's salary.
GCC nationals working in Saudi Arabia can fall under the GCC extension of insurance protection, so don't automatically apply the expatriate rule to them.
Why your GOSI invoice doesn't match payroll
I maintain a Laravel HR/payroll system for a company in Saudi Arabia. For this kind of application, I'd avoid storing one fixed GOSI percentage for every employee. The calculation looks simple until one employer has old-law Saudis, new-law Saudis and expatriates on the same payroll.
These are the problems I'd check first.
1. Applying the July increase to everyone
The 0.5-point pension increase applies only to new-law employees. If your payroll raises every Saudi's deduction in July, old-law employees get overcharged.
2. Calculating housing differently from the registered wage
If payroll stores housing as 25% of basic, but the wage registered with GOSI uses a fixed amount, both the employee and employer contributions will differ. Store the housing arrangement explicitly, calculate the eligible value, and compare it with the registered wage.
3. Including transport allowance
Adding transport to the GOSI base inflates the deduction. Keep eligible GOSI components separate from the full compensation package.
4. Copying salary proration for mid-month joiners
An employee who starts on the 17th may receive a prorated salary. Don't assume the GOSI contribution is prorated with the same formula. Contribution months follow GOSI's registration and billing rules, so check the registered contribution period and the invoice instead.
5. Mixing Hijri and Gregorian dates
Saudi HR systems often use both calendars. Store an unambiguous Gregorian DATE for the first contribution and for each payroll period, and never compare formatted date strings from different calendars. This matters most around the 3 July 2024 cutoff and the annual July rate changes.
How to check deductions in the GOSI portal
If a deduction looks wrong, check the source data. Don't adjust payroll until the totals happen to match. Menu labels change between portal updates, so look for the closest equivalent if a name differs.
For an employee:
- Sign in at GOSI.
- Open the contributions section.
- Open the relevant contribution period.
- Check the contribution start date, earlier periods and the registered wage.
For an employer:
- Sign in to the GOSI establishment account and select the establishment.
- Open contributor records and review registered wages.
- Go to Financial Services and open the Bill Dashboard.
- Review the monthly bill, balances and adjustments: additions, removals and wage updates for the month.
The invoice includes both employee and employer portions, so compare it with the employer cost plus employee deductions, not with employee deductions alone. If a difference remains, reconcile each worker's registered wage, coverage period, scheme and rate before correcting anything.
Laravel payroll: store GOSI rules instead of hard-coding rates
For developers building a Saudi HR system, don't write this:
$gosi = $salary * 0.0975;
It is only correct for an old-law Saudi employee, and only if $salary is basic plus housing, capped at SAR 45,000. It has been wrong for new-law employees since July 2025.
A better design stores, per employee:
first_gosi_contribution_dategosi_scheme:old,neworexpat, assigned from verified contribution historynationality- Basic salary and the eligible housing allowance
If historical coverage is unknown, leave gosi_scheme empty and flag the record for review. Don't default to new.
Then store the rates in an effective-dated table, with every branch as its own column:
CREATE TABLE gosi_rates (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
scheme ENUM('old', 'new', 'expat') NOT NULL,
effective_from DATE NOT NULL,
pension_employee_pct DECIMAL(5,2) NOT NULL DEFAULT 0,
pension_employer_pct DECIMAL(5,2) NOT NULL DEFAULT 0,
saned_employee_pct DECIMAL(5,2) NOT NULL DEFAULT 0,
saned_employer_pct DECIMAL(5,2) NOT NULL DEFAULT 0,
hazards_employer_pct DECIMAL(5,2) NOT NULL DEFAULT 0,
UNIQUE KEY uq_scheme_effective (scheme, effective_from)
);
-- 2024-01-01 is a placeholder: set it to the earliest payroll month you calculate with this table.
INSERT INTO gosi_rates
(scheme, effective_from,
pension_employee_pct, pension_employer_pct,
saned_employee_pct, saned_employer_pct, hazards_employer_pct)
VALUES
('old', '2024-01-01', 9.00, 9.00, 0.75, 0.75, 2.00),
('expat', '2024-01-01', 0.00, 0.00, 0.00, 0.00, 2.00),
('new', '2024-07-03', 9.00, 9.00, 0.75, 0.75, 2.00),
('new', '2025-07-01', 9.50, 9.50, 0.75, 0.75, 2.00),
('new', '2026-07-01', 10.00, 10.00, 0.75, 0.75, 2.00),
('new', '2027-07-01', 10.50, 10.50, 0.75, 0.75, 2.00),
('new', '2028-07-01', 11.00, 11.00, 0.75, 0.75, 2.00);
If GOSI ever changes SANED or hazards, you add a row. You don't touch code.
The calculation resolves the rate by contribution month, not by the day salary is paid. Salary for June paid on 2 July must still use June's rate. The calculation also works in halalas (integers), so float rounding can't drift across hundreds of employees:
<?php
namespace App\Services;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use RuntimeException;
class GosiCalculator
{
private const CAP_HALALAS = 4500000; // SAR 45,000
public function calculate(object $employee, string $payrollMonth): array
{
if (! in_array($employee->gosi_scheme, ['old', 'new', 'expat'], true)) {
throw new RuntimeException("GOSI scheme not verified for employee {$employee->id}");
}
// Rates change on 1 July, so match on the end of the contribution month.
$monthEnd = Carbon::parse($payrollMonth)->endOfMonth()->toDateString();
$rate = DB::table('gosi_rates')
->where('scheme', $employee->gosi_scheme)
->where('effective_from', '<=', $monthEnd)
->orderByDesc('effective_from')
->first();
if ($rate === null) {
throw new RuntimeException("No GOSI rate for scheme {$employee->gosi_scheme} in {$monthEnd}");
}
$base = min(
self::CAP_HALALAS,
(int) round(((float) $employee->basic_salary + (float) $employee->housing_allowance) * 100)
);
$employeePct = $rate->pension_employee_pct + $rate->saned_employee_pct;
$employerPct = $rate->pension_employer_pct + $rate->saned_employer_pct + $rate->hazards_employer_pct;
return [
'base' => $base / 100,
'employee' => round($base * $employeePct / 100) / 100,
'employer' => round($base * $employerPct / 100) / 100,
'rate_id' => $rate->id, // store this with the finalized payroll run
];
}
}
Expatriates now go through the same code path with their own rows. GCC nationals and other special coverage categories should get their own scheme value rather than being forced into expat.
To verify it works, test both sides of a July boundary. This assumes a GosiRatesSeeder that inserts the rows above:
<?php
namespace Tests\Feature;
use App\Services\GosiCalculator;
use Database\Seeders\GosiRatesSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class GosiCalculatorTest extends TestCase
{
use RefreshDatabase;
public function test_new_law_rate_steps_up_in_july_2026(): void
{
$this->seed(GosiRatesSeeder::class);
$employee = (object) [
'id' => 1,
'gosi_scheme' => 'new',
'basic_salary' => '8000.00',
'housing_allowance' => '2000.00',
];
$calc = new GosiCalculator();
$this->assertSame(1025.0, $calc->calculate($employee, '2026-06-01')['employee']); // 10.25%
$this->assertSame(1075.0, $calc->calculate($employee, '2026-07-01')['employee']); // 10.75%
}
}
Add the same pair for an old employee and assert that nothing changes in July. That one test catches mistake #1 above.
In production, I'd also store the rate ID and contributory wage used for each finalized payroll run. Otherwise, historical payslips change when employee data or future rates are updated. Check your rounding against GOSI's billed figures before going live, since a halala difference per employee adds up on the invoice.
If you're hosting this kind of payroll application, the Laravel deployment checklist for cPanel covers the setup. If monthly payroll jobs or invoice checks run on the scheduler, the Laravel schedule:run troubleshooting guide shows how to confirm they actually run. A payroll database also needs a tested backup, such as the automatic cPanel backup to Google Drive.
Retirement age changes under the new GOSI law
The new Social Insurance Law also changes retirement eligibility. Keep these rules separate from monthly contribution calculations.
For workers entering the new system with no earlier contribution periods, the standard retirement age is 65 Gregorian years. Early retirement is possible up to ten years earlier with at least 360 contribution months, subject to eligibility conditions.
Workers with contribution periods before 3 July 2024 can face transitional rules. For existing contributors who were below 50 Hijri years and had fewer than 240 contribution months at the cutoff, the normal retirement age rises gradually, ranging from 58 to 65 Gregorian years depending on age at the cutoff. The contribution period required for early retirement may also rise from 25 to 30 years.
These retirement adjustments don't move anyone onto the new-law contribution rate. A transitional contributor can have a later retirement age and still pay 9.75%.
To check an individual case, use the retirement eligibility calculator in your account on the GOSI portal.
One more source of confusion: the GOSI pension and the end-of-service award are separate. End-of-service is paid by the employer under the Labor Law, whatever happens with GOSI. The end-of-service calculator covers that side.
FAQ
Does the employee GOSI deduction increase every 1 July?
Only for Saudi employees under the new law. Their pension contribution rises by 0.5 percentage points each July from 2025 through 2028. The full employee deduction is 10.75% from July 2026, 11.25% from July 2027 and 11.75% from July 2028. Old-law employees stay at 9.75%.
Does changing jobs move me to the new GOSI law?
No. The scheme follows your contribution history, not your employer. If you had any contribution period before 3 July 2024, a new job after that date normally keeps you on the old law and the 9.75% employee deduction.
Is housing allowance always included in GOSI salary?
Yes. Housing is part of the contributory salary together with basic pay. Cash housing normally uses the agreed amount, while in-kind accommodation has its own valuation rules. The contributory wage is capped at SAR 45,000 per month.
Do expatriate employees pay GOSI in Saudi Arabia?
Ordinary non-GCC expatriates don't pay any employee contribution. The employer pays 2% for occupational hazards. GCC nationals and some special employment arrangements need a separate check.
If you need hands-on help checking an HR or payroll implementation, you can contact HeadsNTail.
What to do next: compare your July payroll against the GOSI Bill Dashboard, confirm every Saudi employee's earlier contribution history, and keep an effective-dated rate table so your application keeps calculating the correct GOSI contribution rates for 2026 and the July 2027 and 2028 steps.


