Method

How the salary data is built

Every number on this site comes from two kinds of public data: job postings that list a pay range, and government wage tables.

I work in recruiting, so I see a lot of offers. None of them are in here, and they never will be. Nothing from a private conversation or behind a login is either. If you can't check it, it doesn't go on the page.

Download the data (CSV, JSON). Free under CC BY 4.0. Credit Phil Mosher, baselinetalent.xyz. Data as of October 29, 2026.

Where the numbers come from

Two layers, kept apart: posted ranges from public job postings, and government survey figures from Job Bank and Statistics Canada.

Posted ranges

We pull postings straight from employers' own job boards: the public pages behind "Careers" on a company site, run on Greenhouse, Lever, Ashby and Workday. The employers include banks, insurers, telcos, Canadian scale-ups and startups, and U.S. companies with offices here.

We keep a posting only if it's in Canada (remote in Canada counts) and it states a pay range. In the data as of October 29, 2026, that leaves 909 tech postings we can place cleanly, from 123 employers.

Government survey figures

  • Job Bank. The federal government's wage tables by occupation and region, mostly built from the Statistics Canada Labour Force Survey. Reference period 2023-2024.
  • Statistics Canada Table 14-10-0444-01. The average wage employers offer on job vacancies, by occupation and region, over the latest four quarters.
  • Statistics Canada Table 14-10-0417-01. Employee wages by occupation and province, for context.

These are labelled "all levels, survey data, not job postings" everywhere they appear. They sit beside the posted ranges as a check. They never set a range and they're never averaged in.

The rules

Every rule is written down, and the scripts apply it.

  • One job counts once. Same company, same title and same range is one job, even if it's posted in five cities.
  • One company counts once per cell. A bank posting 30 developer jobs doesn't get 30 votes. We take that company's middle number and it counts as one.
  • We read the title. "Senior Software Engineer" is a senior software engineer. "Engineer" on its own tells us nothing, so it's out. Sales engineers, solutions engineers, interns and contract roles are out too.
  • Level comes from the title first. If the title has no level word, we use the years of experience the posting asks for. Junior is 0 to 1 years, intermediate 2 to 4, senior 5 to 7, staff or lead 8 or more.
  • Hourly pay becomes yearly at 2,080 hours. That's 40 hours a week, 52 weeks.
  • Ranges wider than 2.5 times get dropped. A range like "$50K to $200K" tells you nothing about the job.

The minimum

A cell only shows a number with 10 or more postings from 5 or more companies.

Below that, it says "Not enough posted ranges yet" and tells you how many postings we did find. I'd rather show you nothing than show you one company's pay scale and call it the market.

How to read a band

Each published cell has a middle number and a band around it.

  • The middle number is the median. Half the companies post above it, half below.
  • The low and high are the 25th and 75th percentiles. The middle half of companies sit in there.
  • The calculator also shows a wider band, the 10th to 90th percentile.

These are posted ranges, so they're what companies advertise for base salary. Bonus, equity and benefits aren't in them.

Does the band actually work?

Two of the three tests met their target on average. The wide band came in just under.

We hide 20% of the postings at random, rebuild every band from the other 80%, then check where the hidden ones land. We run it five times, with a different random draw each time.

TestTargetResultMet?
Hidden postings inside the low-to-high band (25th to 75th)40% to 60%47% (runs ranged 43% to 53%)Yes
Hidden postings inside the wide band (10th to 90th)75% or more74% (runs ranged 69% to 77%)No, just under
Median error, rebuilt middle number against the hidden postingsunder 10%8.6% (runs ranged 4% to 12%)Yes on average, not on every run

The wide band runs a little narrow because each company counts once. One company's postings can spread out a lot, like a bank posting the same title at three grades. We left it that way instead of bending the rule to hit the target. Cells near the 10-posting minimum move the most.

When the government number disagrees

If a cell's middle number is more than 25% off the Job Bank or StatCan figure, we flag it and say why, right under the table it's in.

Most flags go the same direction: posted ranges are higher. Here's what I think is happening:

  • Government figures cover every experience level. A senior or staff band will sit above that.
  • They cover every employer, including IT teams at companies that aren't tech companies.
  • Job Bank's reference period is 2023-2024.
  • In some cells, about half the postings come from U.S.-headquartered companies, and they post above local medians.

Designers get flagged hardest. The government groups UX and product designers with graphic designers and illustrators. So the comparison is a poor fit. Product managers have no government benchmark at all, because there's no clean occupation code for the job.

Why some cities are empty

Toronto and Vancouver have numbers. Winnipeg, Calgary and Montreal mostly don't, because of provincial pay-transparency law.

Ontario has required pay ranges in public job postings since January 1, 2026. B.C. has since November 2023. Manitoba, Alberta and Quebec don't. So those city pages show the Job Bank and StatCan figures with a plain note instead: Winnipeg, Calgary, Montreal.

What it costs to hire someone

The employer view adds what a company pays on top of base salary, at 2026 rates:

  • CPP (Quebec: QPP), including the second tier
  • EI premiums
  • Provincial health or payroll tax where it applies, with a small-company and a large-company number
  • Benefits. This one is an assumption: $175 per person per month, or $2,100 a year. No government source publishes this for tech companies, so we say so.

Bonus, equity, pension matching and recruiting fees aren't in it.

How often it updates

Monthly. The scripts that pull and build everything are in the site's repository, in the scripts/salary folder, and anyone can rerun them. The date on every salary page is the date of the latest posting pulled.

If something looks off, tell me. I'd rather fix it than defend it.

Their terms don't allow reuse here, or the figures sit behind a sign-up form, so these are links only.

Agency salary guides often blend base pay with bonuses, and they're built from the agency's own placements and surveys, which tilt toward the roles and levels it fills. The posted ranges here are base salaries that employers state in public job postings, so the two can differ for the same title without either being wrong.

Cite it

Canadian tech salary data by Phil Mosher, baselinetalent.xyz, licensed under CC BY 4.0. Link to this page or the page you used.

Questions people ask

Can I use this data?

Yes. It's free under CC BY 4.0. Credit Phil Mosher, baselinetalent.xyz, with a link. Downloads are on this page.

Does any of this come from recruiting conversations?

No. Public job postings and government tables only. No GuruLink data, no recruiting tool data, no private conversations, nothing behind a login.

How often is it updated?

Monthly. The scripts that pull and build everything are in the site's repository, and anyone can rerun them.

Sources