SG Job Market
Methodology

How the numbers are made

SG Job Market reads the public job postings on Singapore's national careers portal (MyCareersFuture) every day and keeps the structured fields — never the job description text. Postings there must carry a declared salary band, which is what makes Singapore one of the few markets where compensation can be benchmarked from employer-declared figures rather than self-reported ones.

The pain index

Every open role gets a score from 0 to 100. Five ingredients, fixed weights — an ingredient the snapshot carries no signal for drops to zero and the rest are rescaled to 100:

IngredientFieldHow it scalesWeight
Days openposted_date0 at day 0, full at 40 days
Repostsrepost_counteach repost adds a third, capped at 3
Applicant scarcitytotal_applicationsfull when nobody applied, 0 at the reference count ()
Attentiontotal_viewsfull when nobody has looked, 0 at the reference rate ( views a day)
Urgencyexpiry_datekicks in inside the last 14 days before expiry

Applicant counts read zero on every posting the portal publishes, so applicant scarcity sits at zero weight by configuration rather than for want of data; attention measures the same thing from the counter MCF does fill in. A posting's attention is its view count divided by the days it has been listed, and a role below the bottom quarter of its occupation — its industry's, when the occupation has fewer than twenty open roles — is flagged as getting few views. That is the “Few views” lens on Roles.

Bands: Critical at 85 and above, High from 70, Watch from 55. Below 55 a role is open but not a lead. The score is computed once, in the database, when the index is refreshed — so the table, the signals and this page can never disagree.

Direct employers and agencies

When a recruitment agency posts on an employer's behalf, the portal records the agency as the poster and the true employer separately. We surface both: a Direct tag means the employer is not yet working through an agency on that role; via names the agency that holds the mandate. Agency market share counts postings, not placements.

Salaries

Bands are shown per month in Singapore dollars. The minority of postings declared as annual are divided by twelve. Roles with no declared band — and placeholder bands outside S$500–60,000 a month, which some posters use instead of leaving the field blank — appear as undisclosed and are excluded from medians, never guessed.

Vacancies and occupations

A posting can carry more than one vacancy — almost half do — so headcount figures sum the declared vacancies rather than counting postings. A declared count of 100 or more is a placeholder (some posters enter 999) and counts as one. Occupation views group postings by their official SSOC 2020 code, the classification every posting carries, so a bank's software developer is counted with other software developers whatever category the employer chose; where a code has no official title, the most common posting title stands in and is marked as posted.

Time to close

Once a day the crawler walks every category's search pages again without opening a single posting, and records everything the portal still lists. A posting a complete pass no longer lists has been taken down — filled, or withdrawn — so its close date is the last day it was seen listed, and time to close is the number of days from its posting date to that day. A posting that was still listed on its expiry date was never taken down: it counts towards ran to expiry instead, and is left out of the median, because its age is the advertised posting length rather than a fill time. Roles still listed today have not closed yet and are not counted at all — which makes the median a little optimistic, since the slowest roles are the ones still open.

Figures stay hidden until 21 days of daily passes exist; a median over a handful of days would be noise. Closures older than 90 days age out, so the figure tracks the market rather than the whole archive.

Experience and pay

Every posting declares the minimum years of experience it wants, so bands can be read against it directly. The Compensation page's experience tab groups postings into 0–1, 2–4, 5–9 and 10+ years and shows the quartiles of the declared top of band in each. Worth of an extra year is the slope of a least-squares line fitted to the declared band against the years asked, in the database, with its sample size and r-squared shown beside it — a rate drawn through a handful of postings is not a rate, so the figure is hidden below two hundred declared bands. Postings asking more than twenty years are dropped from the fit: almost all are data entry, and one of them tilts a whole occupation.

Caveats worth knowing

  • Employers choose a posting's category themselves and often misfile it (a bank's security architect under Banking, a hospital's IT lead under Healthcare); we index the declared category alongside the title.
  • Agencies frequently re-list the same mandate as a new posting; the portal reports these as reposts, and some duplicates remain, so demand counts skew slightly high.
  • Applicant and view counts are the portal's own figures and refresh only when a posting changes; applicant counts read zero everywhere, and view counts, while present on 99% of postings, lag a posting's real traffic. Both ingredients are measured against a floor-guarded reference ( applicants, views a day) rather than a raw median.
  • Views per day divides a total that has been accumulating since the posting went up by the days it has been up, so a posting listed yesterday and one listed a year ago are compared on the same scale — but a burst of interest in week one is spread across the whole period.
  • The portal hides the hiring employer on most agency postings. Where it does, we detect agencies from the posting company's name (recruitment, consulting, staffing, talent, search, manpower, HR and similar markers) and show the role as via that agency with an undisclosed employer. This is a heuristic; a curated list corrects the cases it gets wrong (large staffing firms without such a word in their name, and consultancies hiring for themselves).
  • Week-over-week changes compare against the stored snapshot from seven days earlier, and skill trends compare the last four weeks with the four before; both stay hidden until the index has that much history.
  • Posting flags — declared on behalf of an employer, salary hidden, flexible work arrangements — are recorded for postings fetched since 9 September 2026; shares based on them stay hidden until at least half the open postings carry them.
  • A posting can leave the portal because it was filled, because the employer withdrew it, or because it was re-listed under a new id; the three are indistinguishable from outside, so “time to close” is time to leave the portal.
  • Years asked is what the employer wrote down, not what they will settle for, and pay rises with seniority as well as with years — the two cannot be separated from a posting alone, so read the slope as what the market advertises, not as a raise.
  • Coverage is Singapore only.
This site reads the live index. Figures refresh after each daily crawl, not continuously.