How we calculate QA salaries
PassRidge salaries are estimates built from 3686 pay ranges that employers published in public job ads. We convert them to USD, compare them with our earlier planning baselines, and move the baselines up where the postings say so. We never move them down on thin evidence. Below: the sources, the formula, and the limits.
Posted pay ranges, not surveys
Posted pay ranges from public employer job boards (Greenhouse, Lever, Ashby, SmartRecruiters) and public job feeds, converted to USD. Model = prior base x observed/prior ratio, shrunk toward the pooled ratio, floored at the prior.
- What counts. A listing with a published minimum and maximum pay for a QA-family role, with a country we can identify. Ranges without an identifiable country are left out. Hourly ranges are annualised at 2,080 hours and monthly ranges ×12. Ranges that annualise below $6,000 or above $600,000 are dropped as errors.
- Collection date. 2026-10-20. Each range is converted to USD at the indicative rates in our FX table and treated as the midpoint of the offered band.
- Level. We infer junior, mid, senior or lead from keywords in the job title (default mid-level), then compare the midpoint with our prior estimate for that role, level and country.
- Not used. Self-reported salaries, recruiter surveys and government wage statistics (such as BLS OEWS in the US) are not inputs to the current model. Adding official statistics is the next planned step.
- Live listings. Our jobs feed holds 605 listings with a real posted range; the rest show a model estimate marked “est.”. Estimates are never fed back into the model.
One formula behind every number
The finder, the role pages and all country pages use the same arithmetic, so a figure never disagrees with itself.
median = base_usd[role][level] × 1,000 × pay_index[country] × fx[country]
Round to two significant digits. p10 = median × 0.82 and p90 = median × 1.22. City pay is the country median times a city factor (1.00 = country median).
Role base pay
US median by role and level, from the prior estimate times a role factor learned from posted US ranges.
Country index
Pay relative to the US, from a prior index times a regional adjustment learned from non-US ranges.
Currency
USD converted at indicative planning rates, refreshed manually. Local figures move with currency, USD figures do not.
Shrink to the pooled result, never below the prior
- Observed ratio. For each posted range we compute posted midpoint ÷ prior estimate (capped at 2.5×). The US pooled median ratio is 1.122; the non-US pooled ratio is 1.134.
- Shrinkage. Each role or region factor is (sum of observed ratios + k × target) ÷ (n + k) with k = 6. With few observations the factor stays close to the target; with many it follows the data. For Manual QA Tester, n = 911 gives a weight of 0.99 on the data and a factor of 1.203.
- Half-way target. Where a cell has no data, the target is half-way between 1.0 and the pooled ratio, so a big-technology sample is not extrapolated to roles and regions it does not describe.
- Floor. Every factor is at least 1.00. Posted ranges win over the model, and the model is raised to match the market but never lowered below the prior. This is a deliberate policy: it avoids understating pay on thin data.
- Country normalisation. Country indexes are relative to the US, so they are divided by the average role factor. A country can therefore have a lower index than before while its USD pay still rose; the hub shows the change in USD.
How the range is derived
The median comes from the model. The range does not come from a measured distribution of salaries; it is a fixed band around the median.
The low end a candidate can expect, for example a weaker negotiation or a smaller employer.
The model value after rounding to two significant digits.
The high end, typical of large technology employers and strong negotiation.
The same multipliers apply to every role, level, country and city. They are a presentation convention, not a measured percentile.
How much data sits behind each role and region
Strong for automation, SDET and manual testing in the US. Thin or absent for game, localization and data QA, where the model stays at its prior.
By role (US observations)
| Role | n (US) | Sample | Weight on data | Role factor | Prior mid | Now | Ranges in feed |
|---|---|---|---|---|---|---|---|
| Manual QA Tester | 911 | 0.99 | 1.20× | $68k | $82k | 252 | |
| QA Automation Engineer | 1105 | 0.99 | 1.24× | $98k | $121k | 116 | |
| SDET | 124 | 0.95 | 1.11× | $118k | $131k | 72 | |
| QA Lead / Manager | 170 | 0.97 | 1.00× | $110k | $110k | 57 | |
| Mobile QA Engineer | 4 | 0.40 | 1.20× | $88k | $106k | 2 | |
| Performance Test Engineer | 23 | 0.79 | 1.55× | $95k | $147k | 13 | |
| Security / Penetration Tester | 22 | 0.79 | 1.65× | $110k | $181k | 17 | |
| Game QA Tester | 2 | 0.25 | 1.38× | $48k | $66k | 3 | |
| Accessibility Tester | 2 | 0.25 | 1.23× | $80k | $98k | 3 | |
| Business / Test Analyst | 39 | 0.87 | 1.24× | $72k | $89k | 29 | |
| Data / ETL QA Engineer | 12 | 0.67 | 1.17× | $85k | $100k | 1 | |
| Localization QA Tester | 4 | 0.40 | 1.00× | $48k | $48k | 1 | |
| AI / LLM Evaluation QA | 34 | 0.85 | 1.48× | $70k | $104k | 11 | |
| Release / DevOps Engineer | 10 | 0.62 | 1.37× | $105k | $144k | 8 | |
| Technical Writer (QA / Docs) | 17 | 0.74 | 1.26× | $72k | $90k | 20 |
By region (non-US observations)
| Region | Countries in the index | n (non-US) | Regional adjustment | Listings | With posted range |
|---|---|---|---|---|---|
| North America | United States, Canada | 485 | 1.38× | 1486 | 479 |
| UK & Ireland | United Kingdom, Ireland | 210 | 1.13× | 204 | 30 |
| Western Europe | Germany, Netherlands, France, Spain, Portugal, Italy, Switzerland, Austria, Belgium | 166 | 1.07× | 399 | 26 |
| Nordics | Sweden, Denmark, Norway, Finland | 6 | 1.00× | 36 | 1 |
| Central & Eastern Europe | Poland, Czechia, Romania, Hungary, Bulgaria, Estonia, Lithuania, Greece, Ukraine | 135 | 1.11× | 418 | 40 |
| Latin America | Brazil, Argentina, Mexico, Colombia | 46 | 1.98× | 265 | 1 |
| Asia-Pacific | India, Philippines, Singapore, Australia | 122 | 1.20× | 1091 | 18 |
| Middle East & Africa | United Arab Emirates, Israel | 37 | 1.11× | 113 | 1 |
US = 2479 of 3686 observations; North America in the table is Canada only. “Listings” counts every QA listing in our jobs feed for the region's index countries; “with posted range” counts those with a real range.
What this data cannot tell you
Use the numbers as a benchmark for a conversation, not as a quote. Treat anything outside the US, Canada and the UK as indicative.
- Big-technology bias. Employers that publish pay ranges are mostly large technology and gaming companies, which pay above the market average.
- Thin outside the US. Only 1207 non-US observations; some regions have two or three.
- Base pay only. Bonus, equity, benefits and overtime are excluded. Pay in India is often quoted as total cost to company.
- Asking, not paid. A posted band is what an employer is willing to offer, not what every hire receives.
- Take-home and city factors are estimates with generic assumptions.
Refreshed every quarter
Page quality gate. Role-by-country pages are offered to search engines only when enough evidence sits behind them: at least 5 of 8 checks pass (live listings, posted ranges in the country and role, regional and role sample sizes, city coverage, Flex availability). Pages below the bar stay available to readers but are not submitted. Each country page shows its evidence.
Disclaimer. Salary figures are estimates for information only. They are not an offer, a guarantee of pay, or financial, tax or legal advice. Pay varies with employer, contract type, skills and negotiation.
Methodology FAQ
Is this a salary survey?
No. It is a model calibrated on pay ranges that employers publish in job ads. It shows what employers offer in public listings, not what every employee earns.
Why can the model never go below your earlier estimate?
Posted ranges in our sample come mostly from large technology employers, which post higher than the market average. Raising estimates where data says so, but never lowering them on thin evidence, avoids understating pay. We expect to widen the sample before changing this policy.
How do you get p10 and p90?
Every p10 is the median x 0.82 and every p90 is the median x 1.22. These are fixed multipliers used on every page, not measured percentiles of individual salaries.
How often is the data updated?
Quarterly. The current data set was collected on 2026-10-20. The next refresh is planned for January 2027.
Which countries have the thinnest data?
Outside the US, Canada and the UK. Only 1207 of 3686 observations are non-US, so pay in smaller markets leans on the regional adjustment.