What goes into the Pay Index
The Pay Index is built from three primary-source buckets. Every row is verified before it lands in the dataset.
Established Gulf compensation surveys. Banded ranges extracted from licensed and publicly-available GCC compensation reports. We hold the originals on file and re-verify against them on every monthly refresh. We don’t publish the specific publication list — that’s a competitive asset, and naming sources gives competitors a shortcut they haven’t earned. What we publish is the source count behind every band.
Written offer letters. Tenure Pro members share their offer letters with us. They’re anonymised before being mapped to a canonical role and added to the dataset. The original documents never leave Tenure’s storage.
Verified live job listings. Our pipeline reviews live employer and recruiter listings across DIFC, ADGM, KAFD, and the wider GCC. Each listing carries a recorded URL and is reviewed for a disclosed monthly base figure or a banded range before being added.
Self-reported numbers without a source — the staple of crowdsourced salary sites — are not included. We exclude them by design. The credibility cost of a single inflated entry destroys the value of the dataset for every other reader.
The source count is the credibility signal
We don’t publish a separate “confidence rating”. Every role row shows the number of verified sources behind it, and that’s the rating. A row with 24 sources doesn’t need a green badge to validate it — the 24 is the badge.
Internally, our data pipeline does flag low-source slices for re-verification: any (sector, role, city, firm-tier) cell with fewer than five fresh sources is queued for the next refresh cycle. But that’s our problem to solve, not yours. What you see on the surface is the source count, full stop.
How sources become percentiles
Every source lands in salary_sources tagged with a canonical role, firm tier, city, and country. A nightly cron job runs PostgreSQL’s PERCENTILE_CONT to compute P10, P25, P50, P75, and P90 across each (sector, role, city, firm tier) slice. Linear interpolation matches the approach used by Levels.fyi and Bloomberg Terminal — the percentile bands you see on the sector hubs are computed live from the underlying sources, not hand-curated ranges.
Why monthly base, not total compensation
GCC pay conversations happen in monthly base. Bonus, housing, transport, and equity components vary too widely to fold into a single headline figure without distorting it. We surface those separately on role detail pages so you can see the package shape rather than a single inflated number.
What we refresh, and how often
The Pay Index is refreshed monthly. The materialised view powering the percentile distributions runs nightly to incorporate any new sources. Sources older than 12 months are excluded from the active calculations until corroborated by a fresh document. Each sector hub surfaces its last-refresh date in the hero meta block.
What we don’t do
- We don’t crowdsource salaries from anonymous user submissions.
- We don’t scrape competitor salary sites — every source traces back to a primary document.
- We don’t inflate ranges to flatter the reader. Some sectors ship with smaller source counts; we surface the count rather than hide it.
- We don’t paywall the methodology. Every reader sees how the dataset is built.
Frequently asked questions
Where does Pay Index data come from?▾
Every number is anchored to a primary source we hold on file. There are three buckets. (1) Extracts from established Gulf compensation surveys — published reports we license, hold, and re-verify against. (2) Written offer letters shared by Tenure Pro members, anonymised before being mapped to a canonical role. (3) Verified live job listings from employer and recruiter sites across DIFC, ADGM, KAFD, and the wider GCC, with the URL recorded against each row. We treat the specific source list as a competitive asset and don't publish it — what we publish is the source count behind every band.
Why don't you crowdsource salaries?▾
Crowdsourcing is the dominant model for Glassdoor and LinkedIn Salary Insights. It's also why nobody negotiating in the Gulf trusts those numbers. Self-reported salaries skew high (people round up), have no verification path, and can't be corroborated. We built the Pay Index against the opposite premise: every figure has a primary source we can point to. The cost is that we have fewer total entries. The benefit is that every entry is real.
How many sources are behind a typical band?▾
It varies by sector and role. Banking VP currently sits on 24 verified sources. Legal Senior Legal Counsel sits on 24. The Marketing executive ladder ranges from 8 to 30 per role. Every role row on every sector hub shows its underlying source count — that's the credibility signal. There's no separate 'confidence rating' to interpret. The number of sources is the rating.
What's a 'canonical role' and why does it matter?▾
Job titles in the Gulf vary wildly — the same person might be a Vice President at one bank, a Director at another, and a Senior Manager at a third. We normalise titles to a canonical role within each sector so percentiles aren't distorted by title inflation. This is why we publish full role names like 'Senior Vice President' rather than abbreviations.
Why monthly base only? What about bonuses and allowances?▾
GCC compensation conversations happen in monthly base. Bonus, housing, transport, and equity components vary too widely to fold into a single headline figure without distorting it. They surface separately on role detail pages so you can see the package shape, not an inflated single number.
How fresh is the data?▾
The Pay Index refreshes monthly. Sources older than 12 months are flagged and excluded from active percentile calculations until corroborated by a fresh document. Each sector hub displays its last refresh date in the hero meta block.
Why only UAE, Saudi, and Qatar?▾
Three reasons. First, these three markets account for ~90% of the white-collar professional traffic in the Gulf. Second, they're the markets where we have enough verified sources per sector to ship credible percentile distributions. Third, narrowing the scope is how we guarantee accuracy — we'd rather ship four cities at high quality than nine at varying quality. Oman, Bahrain, and Kuwait will return when we have the source depth to do them justice.
How is the percentile distribution computed?▾
We use linear interpolation across sources via PostgreSQL's PERCENTILE_CONT — the same approach Levels.fyi and Bloomberg use. Each percentile (P10, P25, P50, P75, P90) is computed independently per (sector, role, city, firm tier) slice. The materialised view holding these percentiles refreshes nightly.
Why don't I see a salary range for my exact role?▾
Two reasons. (1) Your role might fall under a related canonical role we already track — try the closest match and use the calculator drawer to position yourself within the range. (2) Your sector may still be in build (Phase 1 ships Corp & Retail Banking and Legal & Compliance in full; the others ship through Phase 2). If you'd like to flag a gap, contact us — Pro member offer letters help us strengthen sectors faster.
Got a question this didn’t answer?
We treat the methodology as a living document. If something feels off, it’s probably worth fixing publicly.
Get in touch →