Data transparency
How CheckFairPay builds its Malaysian salary benchmarks
Every number on this site comes from the same pipeline. Here is exactly what goes into it, and where it stops being reliable.
- Public job titles
- 11,532
- Market observations
- 57,275
- High confidence (15+ obs.)
- 440
- Categories
- 31
Where the data comes from
The CheckFairPay market database aggregates Malaysian salary and hiring-market observations: advertised pay disclosed in the open market, published market benchmarks, and public labour statistics. No individual employer or user record is ever exposed, and we do not resell or republish any third-party dataset.
Most weight comes from advertised pay observations, which track the current market faster than annual survey reports. A minority of rows come from published market benchmarks rather than observed distributions, so percentiles should be read as market benchmarks, not a census.
Primary sources we reference
Our own percentiles are computed from advertised Malaysian pay observations. Where we describe statutory deductions, wage growth or national pay levels, we reference the primary source directly rather than restating a secondary summary. These sources are separate from our estimates and are never blended into a role percentile.
- Department of Statistics Malaysia (DOSM) — Salaries & Wages Survey Report
National median and mean monthly salaries and wages, published annually.
- Employees Provident Fund (EPF/KWSP) — contribution rates
Statutory employee and employer contribution schedules used in the payroll calculator.
- PERKESO (SOCSO) — contribution tables
Employment injury and invalidity scheme rates, plus Employment Insurance System (EIS).
- Lembaga Hasil Dalam Negeri (LHDN) — PCB / MTD schedule
Monthly tax deduction rules and personal relief amounts.
How roles are normalised
Raw job titles are noisy. We strip employer branding, location suffixes, contract markers and requisition codes, then map the remaining title to a canonical role. Titles that stay ambiguous after cleaning are excluded rather than guessed.
Each canonical role is assigned a seniority level (Intern through Director+) from title wording, and grouped into a role family so career-ladder comparisons stay like-for-like.
Deduplication and quarantine
The same vacancy is often advertised more than once. Before aggregating, identical role, employer and pay combinations are collapsed so one job cannot count several times, and titles that clean down to the same canonical role within a category are presented as a single benchmark.
Titles that turn out to be a department or a bare seniority word rather than an occupation — for example "Accounting", "Executive" or "Senior" — are quarantined from search indexes and marked for review instead of being deleted, so the underlying observations stay auditable and the decision is reversible.
Aggregation, cleaning and quarantine rules are applied programmatically. Individual rows are not read or approved by a human reviewer, and no user submission or uploaded resume is ever part of these benchmarks.
Percentiles, not averages
We publish P10, P25, median (P50), P75 and P90 monthly gross figures. Percentiles resist distortion from a handful of unusually high or low offers in a way that a simple average does not.
Read them as: P10 is near the floor of the market, the median is the typical offer, and P90 is what strong candidates in demanding employers command.
Sample size and confidence
A role needs at least 15 observations before we treat it as high confidence and publish it as a standalone indexable page. Below that threshold, figures remain visible in the product but are marked low confidence and kept out of search indexes.
Low confidence usually means the role is niche, newly emerging, or advertised without pay by most employers — not that the number is wrong, only that it is thinly supported.
Advertised, basic and total compensation
Figures are monthly gross basic pay unless stated otherwise. They exclude bonuses, commission, equity, shift allowances, overtime and employer EPF contributions.
Total compensation can sit materially above the basic figure, particularly in sales, oil and gas, and senior technology roles. When comparing an offer, compare basic against basic first.
Update cadence
The corpus is refreshed in periodic snapshots rather than in real time, and benchmarks are recomputed as new observations land.
Pages show the current market view. Year-on-year figures before the current period are back-cast estimates of the trend, not directly observed history, and are labelled as estimates.
Known limitations
Advertised ranges can be aspirational or deliberately wide. Some sectors under-disclose pay entirely, which biases coverage towards employers that do publish.
Geographic granularity is limited: Klang Valley roles dominate the corpus, so nationwide figures skew towards Kuala Lumpur and Selangor pay levels.
Treat every figure as directional evidence for a negotiation, not as a valuation of an individual.
Corrections
If a benchmark looks wrong for a role you know well, we want to hear it. Tell us the exact role page URL and what you believe the Malaysian market range to be; we re-check the underlying observations and either correct the row, quarantine it, or explain why it stands.
Where a figure is an estimate rather than a measurement — most obviously the pre-current-year points on role trend charts — it is labelled as an estimate on the page itself, so a correction request can tell the two apart.