BandingJob

How we work out the numbers

Every figure on this site comes from real job ads, the kind you see when you search for work. We read the pay an employer puts on the ad, collect all the ads for a job, and show you the middle of the pack, so you can tell whether an offer is normal, low, or generous.

The short version

  • We read live job ads on JobStreet Malaysia. When an ad states a salary, we record it.
  • We show the middle, not an average.One very high salary can drag an average up and mislead you. The middle figure, the median, is the one where half of ads pay more and half pay less. It is a fairer “typical”.
  • We show the spread. The band on each page is where most ads sit, the middle half. If it is wide, pay for that job is all over the place. If it is tight, the market agrees.
  • We wait until we have enough. A job needs at least 20 ads before we show a figure. Fewer than that and one odd ad would swing the number.
  • It is advertised pay, not take-home. Ads pad their ranges, and rarely say whether a figure includes allowances. Use our numbers to sense-check, not as a promise.

For the data-minded

Sources

The current figures are built entirely from JobStreet Malaysia’s public search API, the same feed that powers its job-search results. We read it directly, page by page, and take the salary an employer states on each ad. Every page is dated with when the data was last read (last read 27 September 2026). We name the source, and the endpoint, because a salary site that hides where its numbers come from is asking for trust it has not earned.

Technical note: the data is read server-side from my.jobstreet.com/api/jobsearch/v5, a public endpoint that needs no login. We aggregate the whole set into the bands you see; we never republish an individual listing.

Indeed Malaysia and LinkedIn are not in these numbers yet. Neither exposes its listings the way JobStreet does, so adding them is separate work, not a switch we can flip. When another source is included, we will say so on the page and show how much of the sample it makes up. We will never quote a figure as multi-source when it is not.

The percentile band

For each ad we take the midpoint of its advertised range as one data point, converting any weekly, daily, or annual figure to a monthly one first (a job never mixes pay periods in one pool). We then sort every point for a role and read off:

  • 25th percentile (P25), a quarter of ads pay below this.
  • Median (50th), the middle. The headline figure.
  • 75th percentile (P75), a quarter of ads pay above this.

The box on each page is P25 to P75, the line inside it is the median, and the whiskers run to the lowest and highest ad we saw. The middle-half band deliberately ignores the extremes, where a single mistyped ad does the most damage.

The minimum sample

A role appears only once at least 20 priced ads support it. Below that a percentile is noise dressed as a benchmark, so the page, and the sitemap, simply do not exist. Right now 234 roles clear that bar.

How often a job comes up

Separately from pay, we count how many times a role appears across all the ads we read, whether or not the ad states a salary. That is the “how often it comes up” figure. It is a demand signal: a role advertised hundreds of times is one employers are hunting for.

Rising or cooling

Movement needs history, and history takes time. Each time we refresh the data we bank a dated snapshot; a role is marked rising or cooling only once we can compare two of them, on how much its advertising volume changed. We hold 2 snapshots so far, so most roles read Newuntil the next refresh. We would rather say “we do not know yet” than invent a trend from a single reading.

Keeping up to date

This is a living site. The figures you see are always the latest reading, and every page is stamped with the date it was read on. We re-read the whole dataset and re-date every page; and the build refuses to run once the data passes 45 days old, so you never see a stale number dressed up as current.

Each refresh also banks a compact monthly record of every role, its pay band and how often it was advertised. That is what lets the site compare this year to last: a 2026 figure is not overwritten and forgotten, it is kept as a dated point, so once a role has a year of history we can show whether its pay went up or down. Until that history exists, we show nothing rather than guess.

What we do not do

  • We do not ask people to self-report salaries; memories are stale and unverifiable.
  • We do not publish employer reviews.
  • No employer pays to change a figure, and none can.

Browse profession bands · About BandingJob · Salary guides