Part of the guide: Saudi HR & Payroll Toolkit 2026: GOSI, End of Service, Days

Saudi GOSI Contribution Rates 2026: Old vs New Law

By Published 12 min read HR & Payroll
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.

CategoryOld lawNew law (from July 2026)
Saudi employee pension9%10%
Saudi employee SANED0.75%0.75%
Total employee deduction9.75%10.75%
Employer pension9%10%
Employer SANED0.75%0.75%
Employer occupational hazards2%2%
Total employer contribution11.75%12.75%
Combined Saudi contribution21.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 periodPension (each side)Full employee deductionFull employer contribution
July 2024 to June 20259%9.75%11.75%
July 2025 to June 20269.5%10.25%12.25%
July 2026 to June 202710%10.75%12.75%
July 2027 to June 202810.5%11.25%13.25%
From July 202811%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 componentMonthly amount
Basic salarySAR 8,000
Housing allowanceSAR 2,000
Transport allowanceSAR 1,000
Total salarySAR 11,000
GOSI calculation baseSAR 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
CalculationOld lawNew law
GOSI salarySAR 10,000SAR 10,000
Employee deductionSAR 975SAR 1,075
Employer contributionSAR 1,175SAR 1,275
Combined contributionSAR 2,150SAR 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.

CalculationOld lawNew law (July 2026)
GOSI salary (capped)SAR 45,000SAR 45,000
Employee deductionSAR 4,387.50SAR 4,837.50
Employer contributionSAR 5,287.50SAR 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.

ContributionRate
Employee contribution0%
Employer occupational hazards2%

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:

  1. Sign in at GOSI.
  2. Open the contributions section.
  3. Open the relevant contribution period.
  4. Check the contribution start date, earlier periods and the registered wage.

For an employer:

  1. Sign in to the GOSI establishment account and select the establishment.
  2. Open contributor records and review registered wages.
  3. Go to Financial Services and open the Bill Dashboard.
  4. 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_date
  • gosi_scheme: old, new or expat, assigned from verified contribution history
  • nationality
  • 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.

Free tools for HR & Payroll work

All free tools →

More HR & Payroll articles