| Role family | Postings | Median midpoint |
|---|---|---|
| engineering | 3 | $110,000 |
| sales | 3 | $78,000 |
| other | 2 | $91,284 |
| marketing | 1 | $155,000 |
| product | 1 | $130,000 |
| support / ops | 1 | $88,875 |
| finance / legal | 1 | $60,000 |
| Title | Location | Low | High |
|---|---|---|---|
| Director, Public Relations & Communications | Canada | $150,000 | $160,000 |
| Senior Software Developer 2 | Kitchener, Toronto, Winnipeg, Vancouver, Can | $110,000 | $155,000 |
| Senior Product Manager - Createspace, Canada Based | KW, Toronto, Winnipeg, Vancouver, or Remote | $110,000 | $150,000 |
| Senior Proposal Manager | Kitchener, Ontario; Toronto, Ontario; Canada | $102,500 | $120,000 |
| Senior Software Developer | Kitchener, Toronto, Winnipeg, Vancouver, Can | $90,000 | $130,000 |
| Customer Success Manager (Higher Education) | Remote - USA | $80,000 | $97,750 |
| Software Developer | Kitchener, Toronto, Winnipeg, Vancouver, Can | $70,000 | $105,000 |
| Senior Solutions Engineer | Spain | $67,300 | $89,733 |
| Solutions Engineer | Canada | $72,000 | $84,000 |
| Solutions Engineer | United States | $72,000 | $84,000 |
| Proposal Manager | UK Remote; London, UK | $61,608 | $81,027 |
| Bilingual Product Support Analyst (Canadian French) | Kitchener Ontario, Toronto, Ontario, Ontario | $55,000 | $65,000 |
Across 12 postings that state a pay range, the median midpoint is $88,187. The middle 50% sits between $78,000 and $115,937, and the 90th percentile is $132,250. All figures are annualised and converted to USD.
12 of the postings we read from greenhouse carried a range on the day we measured (2026-10-24). The rest did not publish pay at all, so they are not in these numbers.
engineering is the largest family in this sample (3 postings, median $110,000). The table above lists every family we saw and the highest individual ranges.
No. This is what the company itself published in its job postings, normalised to a yearly USD range. Real offers vary by level, location and equity, and many postings omit pay entirely.
These 12 rows are part of one CSV covering every company we read: the full dataset (salary-ranges-full.csv) under CC BY 4.0. Or pull it into Python:
pip install https://sjdfi0wjvosdju9.github.io/packages/salaryranges-0.1.1-py3-none-any.whl
import salaryranges
salaryranges.by_company("d2l")
If you want the same numbers refreshed on a schedule, including the postings that never publish pay, that is the paid part: ATS Job Feed ($0.0015 per returned job).