# Opportunity Exchange — full corpus > The core reference documents in one fetch. Each is individually current at its own URL; start at https://veilpoint.ca/llms.txt. Deliberately not inlined: job postings — https://veilpoint.ca/jobs.md (churns daily) — and the NOC 2021 classification — https://veilpoint.ca/noc.md (large lookup table). --- # Opportunity Exchange — Saskatchewan Canonical: https://veilpoint.ca/ Retrieved: 2026-07-27T07:12:21.962Z Cite: Opportunity Exchange (VeilPoint), "Opportunity Exchange — Saskatchewan", https://veilpoint.ca/, retrieved 2026-07-27. A regional economic mobility platform for Saskatchewan: advertised vacancies weighed against local cost of living, with the shortest credential route into each role. Every document below is plain markdown — fetch it directly, no account or key required. ## Machine-readable surfaces - [Occupation catalogue](https://veilpoint.ca/roles.md) — all roles with wages, demand and entry requirements in one document - [Role fact sheets](https://veilpoint.ca/role/industrial_mechanic.md) — `/role/{id}.md` for each occupation in the catalogue - [Sectors](https://veilpoint.ca/sectors.md) — vacancy, wage and demand rollups; `/sectors/{slug}.md` for detail - [Job postings](https://veilpoint.ca/jobs.md) — the advertised market, newest first - [Communities](https://veilpoint.ca/directory.md) — the 20-municipality reference set; `/directory/{id}.md` for each business directory - [Housing](https://veilpoint.ca/real-estate.md) — prices, listings and the own-vs-rent model; `/real-estate/{id}.md` per community - [Trade](https://veilpoint.ca/trade.md) — provincial exports and grain deliveries (real published data) - [Wages](https://veilpoint.ca/wages.md) — measured wages by occupation group × province and vacancies by NOC unit group (real published data) - [Rents](https://veilpoint.ca/rents.md) — CMHC average rents and vacancy rates for every surveyed centre in Canada (real published data) - [Data sources](https://veilpoint.ca/sources.md) — provenance and serving mode of every source; read before quoting figures - [NOC 2021](https://veilpoint.ca/noc.md) — all 516 national occupational unit groups, bilingual, with platform coverage flags ## JSON API, bulk data, MCP - [Agent access and MCP setup](https://veilpoint.ca/agents.md) — setup, discovery links and interface policies; HTML at https://veilpoint.ca/agents - [Agent capability manifest](https://veilpoint.ca/.well-known/agent-capabilities.json) — automatic discovery, MCP configuration, tool names and interface policies - [Full corpus](https://veilpoint.ca/llms-full.txt) — the core reference documents concatenated in one fetch - [OpenAPI spec](https://veilpoint.ca/api/v1/openapi.json) — keyless read-only JSON API, including `/api/v1/outcomes` (what a wage leaves over per month, by community) - [Dataset and relationship catalogue](https://veilpoint.ca/api/v1/catalog) — stable identifiers, typed joins, methodologies, versions and operational endpoint semantics - [Private decision evaluator](https://veilpoint.ca/evaluate) — human form plus `POST /api/v1/evaluate` and MCP `evaluate_pathways`; stated constraints are no-store and never placed in URLs - Bulk snapshots — `/data/catalog.json`, `/data/occupations.json`, `/data/sectors.json`, `/data/municipalities.json`, `/data/jobs.json`, `/data/trade.json`, `/data/wages.json`, `/data/rents.json`; content-hash ETags, so conditional refetches cost a 304 - MCP server — streamable-HTTP endpoint at `https://veilpoint.ca/mcp` ## Conventions - Append `.md` to a covered page path for its markdown twin. - Every document states its canonical HTML URL, retrieval time, data status, and a ready-made `Cite:` line. - Synthetic placeholder figures are labelled as such; per-source serving mode is at `/about/data`. - URLs, the ids inside them, and published fragment anchors are permanent — citations stay valid. - Operational meanings are separate: `/api/health` is liveness, `/api/readiness` is traffic readiness, and `/api/public-launch-status` is the stricter promotion gate. --- # Occupation catalogue Canonical: https://veilpoint.ca/roles.md Retrieved: 2026-07-27T07:12:21.962Z Cite: Opportunity Exchange (VeilPoint), "Occupation catalogue", https://veilpoint.ca/roles.md, retrieved 2026-07-27. > **Data status.** Synthetic placeholder: labour-market figures are structurally realistic but not measured. The platform is pre-launch; per-source serving status is at /about/data. 27 Saskatchewan occupations. Wages are hourly CAD; demand is a 0–100 score. Fact sheet per role at `/role/{id}.md`. | id | Title | NOC | TEER | Sector | Median wage | Range | Demand | Outlook | Regulated | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | industrial_mechanic | Industrial Mechanic | 72400 | TEER 2 | Industrial Maintenance | $41.8 | $32.4–$51.3 | 84 | Strong replacement demand | yes | | water_operator | Water / Wastewater Operator | 92101 | TEER 2 | Utilities | $36.2 | $28.5–$44.9 | 74 | Stable public utility demand | yes | | heavy_equipment_technician | Heavy Equipment Technician | 72401 | TEER 2 | Equipment Service | $39.4 | $31.8–$47.7 | 81 | Strong service demand | yes | | power_engineer | Power Engineer | 92100 | TEER 2 | Process Operations | $44.7 | $35.5–$54.8 | 79 | High-value but credential-sensitive | yes | | construction_electrician | Construction Electrician | 72200 | TEER 2 | Construction Trades | $38.1 | $29.7–$47.6 | 87 | Strong openings, more route friction | yes | | logistics_coordinator | Logistics Coordinator | 13201 | TEER 3 | Supply Chain | $31.9 | $24.8–$39.5 | 76 | Accessible route with steady demand | no | | continuing_care_assistant | Continuing Care Assistant | 33102 | TEER 3 | Health Support | $26.8 | $22.4–$31.7 | 90 | Very strong demand, lower congruence | no | | parts_technician | Parts Technician | 14401 | TEER 3 | Equipment Service | $30.4 | $24.6–$37.9 | 68 | Good fit and fast route | no | | licensed_practical_nurse | Licensed Practical Nurse | 32101 | TEER 3 | Healthcare | $34.5 | $28–$41.2 | 94 | Critical shortage province-wide | yes | | truck_driver_class1 | Truck Driver (Class 1) | 73300 | TEER 3 | Transportation | $28.5 | $22–$38 | 90 | Persistent driver shortage | yes | | welder | Welder | 72106 | TEER 2 | Skilled Trades | $36.8 | $26–$48.5 | 82 | Strong demand with seasonal peaks | yes | | farm_equipment_operator | Farm Equipment Operator | 84120 | TEER 4 | Agriculture | $24 | $18–$34 | 76 | Seasonal but reliable | no | | educational_assistant | Educational Assistant | 43100 | TEER 3 | Education | $22.5 | $18–$28 | 70 | Consistent school division demand | no | | plumber | Plumber | 72300 | TEER 2 | Skilled Trades | $40.2 | $30–$50.5 | 80 | Strong — compulsory trade with replacement demand | yes | | office_administrator | Office Administrator | 13110 | TEER 3 | Business Administration | $24 | $18.5–$32 | 72 | Stable broad-sector demand | no | | cook | Cook | 63200 | TEER 3 | Hospitality | $18.5 | $15.5–$26 | 86 | Persistent hospitality shortage | no | | carpenter | Carpenter | 72310 | TEER 2 | Construction | $34 | $24–$44 | 78 | Positive — housing and infrastructure | yes | | it_support_technician | IT Support Technician | 22220 | TEER 2 | Information Technology | $28 | $21–$38 | 74 | Growing — digital transformation demand | no | | automotive_service_technician | Automotive Service Technician | 72410 | TEER 2 | Automotive | $32 | $22–$42 | 76 | Steady replacement demand | yes | | retail_store_manager | Retail Store Manager | 62010 | TEER 2 | Retail | $22 | $17–$32 | 68 | Steady — turnover-driven openings | no | | community_support_worker | Community Support Worker | 42201 | TEER 2 | Community & Social Services | $25.8 | $20.5–$33.4 | 82 | Strong and growing — government-funded sector | no | | employment_counsellor | Employment Counsellor | 42202 | TEER 2 | Community & Social Services | $27.4 | $21.8–$36.2 | 66 | Stable with LMIA and training-program funding support | no | | health_safety_coordinator | Health & Safety Coordinator | 22232 | TEER 2 | Occupational Health & Safety | $36.5 | $28–$48.2 | 74 | Consistent demand driven by WCB and regulatory compliance requirements | no | | warehouse_worker | Warehouse Worker | 14400 | TEER 4 | Transportation & Logistics | $21.4 | $18–$27.8 | 76 | High volume — consistent turnover-driven openings | no | | hospitality_worker | Hospitality & Hotel Worker | 65200 | TEER 4 | Hospitality & Tourism | $19.2 | $16.5–$26.4 | 70 | Steady — persistent staffing shortages across hospitality sector | no | | home_care_worker | Home Care Worker | 44101 | TEER 4 | Health Support | $22.8 | $18.5–$28.6 | 88 | Very high demand — aging population and home-first care policy | no | | grain_crop_worker | Grain & Crop Farm Worker | 85100 | TEER 4 | Agriculture | $20.4 | $17–$27.5 | 72 | Persistent seasonal demand — strong in harvest and seeding seasons | no | --- # Sectors Canonical: https://veilpoint.ca/sectors Retrieved: 2026-07-27T07:12:21.961Z Cite: Opportunity Exchange (VeilPoint), "Sectors", https://veilpoint.ca/sectors, retrieved 2026-07-27. > **Data status.** Derived from at least one placeholder input; confidence tier D; oldest input 2026-04-08. OEX sector catalogue rollup over the same summaries served in the interface. Vacancies count advertised postings — see the data status above for whether the corpus is real or preview; tightness is vacancies per available candidate (above 1, demand outstrips supply). Detail per sector at `/sectors/{id}.md`. | id | Sector | Occupations | Vacancies | Available talent | Tightness | Median wage | Demand | | --- | --- | --- | --- | --- | --- | --- | --- | | transport-and-logistics | Transport & Logistics | 3 | 264 | 0 | No candidate denominator (observed shortage) | $28.5/hr | 81/100 | | health-and-care | Health & Care | 3 | 239 | 0 | No candidate denominator (observed shortage) | $26.8/hr | 91/100 | | retail-and-hospitality | Retail & Hospitality | 3 | 171 | 0 | No candidate denominator (observed shortage) | $19.2/hr | 75/100 | | construction-and-trades | Construction & Trades | 4 | 170 | 0 | No candidate denominator (observed shortage) | $38.1/hr | 82/100 | | equipment-and-manufacturing | Equipment & Manufacturing | 4 | 143 | 0 | No candidate denominator (observed shortage) | $39.4/hr | 77/100 | | business-and-technology | Business & Technology | 3 | 131 | 0 | No candidate denominator (observed shortage) | $28/hr | 73/100 | | agriculture | Agriculture & Agribusiness | 2 | 128 | 0 | No candidate denominator (observed shortage) | $24/hr | 74/100 | | public-and-community | Public & Community Services | 2 | 76 | 0 | No candidate denominator (observed shortage) | $27.4/hr | 74/100 | | resources-and-utilities | Resources & Utilities | 2 | 48 | 0 | No candidate denominator (observed shortage) | $44.7/hr | 77/100 | | education | Education | 1 | 30 | 0 | No candidate denominator (observed shortage) | $22.5/hr | 70/100 | --- # Saskatchewan communities Canonical: https://veilpoint.ca/directory Retrieved: 2026-07-27T07:12:21.890Z Cite: Opportunity Exchange (VeilPoint), "Saskatchewan communities", https://veilpoint.ca/directory, retrieved 2026-07-27. > **Data status.** Real published data: names, coordinates and populations are 2021 census figures. Business directory per community at `/directory/{id}.md`. | id | SGC 2021 | Community | Region | Type | Population (2021) | Latitude | Longitude | Primary sectors | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | saskatoon | 4711066 | Saskatoon | Saskatoon | city | 266,141 | 52.1332 | -106.67 | Health, Mining, Manufacturing, Education | | regina | 4706027 | Regina | Regina | city | 226,404 | 50.4452 | -104.6189 | Public administration, Manufacturing, Oil and gas, Finance, Health | | prince-albert | 4715066 | Prince Albert | North Central | city | 37,756 | 53.2033 | -105.7531 | Health, Forestry, Public administration, Retail | | moose-jaw | 4707039 | Moose Jaw | South Central | city | 33,665 | 50.3934 | -105.5519 | Manufacturing, Agriculture, Health, Defence | | swift-current | 4708004 | Swift Current | Southwest | city | 16,750 | 50.2881 | -107.7939 | Agriculture, Oil and gas, Retail, Health | | yorkton | 4709012 | Yorkton | East Central | city | 16,280 | 51.2139 | -102.4628 | Agriculture, Manufacturing, Retail, Health | | north-battleford | 4716029 | North Battleford | Northwest | city | 13,836 | 52.7575 | -108.2861 | Agriculture, Health, Retail, Public administration | | weyburn | 4702047 | Weyburn | Southeast | city | 11,019 | 49.6611 | -103.8525 | Oil and gas, Agriculture, Health, Retail | | estevan | 4701024 | Estevan | Southeast | city | 10,851 | 49.1392 | -102.9861 | Oil and gas, Utilities, Mining, Retail | | lloydminster | 4717029 | Lloydminster | Northwest | city | 19,739 | 53.2783 | -110.0053 | Oil and gas, Retail, Manufacturing, Health | | warman | 4711068 | Warman | Saskatoon | city | 12,419 | 52.3219 | -106.5842 | Construction, Retail, Manufacturing | | martensville | 4711070 | Martensville | Saskatoon | city | 10,549 | 52.2903 | -106.6664 | Construction, Retail, Manufacturing | | humboldt | 4715008 | Humboldt | East Central | city | 6,003 | 52.2014 | -105.1233 | Manufacturing, Agriculture, Mining, Health | | melfort | 4714051 | Melfort | North Central | city | 5,992 | 52.8569 | -104.6103 | Agriculture, Retail, Health | | meadow-lake | 4717052 | Meadow Lake | Northwest | city | 5,344 | 54.1303 | -108.4344 | Forestry, Agriculture, Retail, Health | | melville | 4705074 | Melville | East Central | city | 4,562 | 50.9297 | -102.8047 | Transportation, Agriculture, Health | | kindersley | 4713008 | Kindersley | West Central | town | 4,624 | 51.4675 | -109.1553 | Oil and gas, Agriculture, Retail | | nipawin | 4714076 | Nipawin | North Central | town | 4,242 | 53.3672 | -104.0089 | Agriculture, Forestry, Utilities, Retail | | rosetown | 4712006 | Rosetown | West Central | town | 2,317 | 51.5539 | -108 | Agriculture, Retail, Transportation | | la-ronge | 4718041 | La Ronge | Far North | northern-village | 2,304 | 55.1006 | -105.2842 | Public administration, Health, Mining, Forestry | --- # Housing market by community Canonical: https://veilpoint.ca/real-estate.md Retrieved: 2026-07-27T07:12:21.897Z Cite: Opportunity Exchange (VeilPoint), "Housing market by community", https://veilpoint.ca/real-estate.md, retrieved 2026-07-27. > **Data status.** Derived from at least one placeholder input; confidence tier D; oldest input 2025-10-31. OEX province-wide collection of the per-community ownership models. 20 communities. Prices are CAD. "Own" is the full monthly cost of owning the median home (mortgage, tax, maintenance); "Rent" is the local one-bedroom median. Detail per community at `/real-estate/{id}.md`. | id | Community | Region | Median price | Yr/yr | Own $/mo | Rent $/mo | Days on market | Balance | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | martensville | Martensville | Saskatoon | $451,000 | +7% | $2,937 | $1,180 | 69 | sellers | | warman | Warman | Saskatoon | $448,000 | +1% | $2,918 | $1,193 | 68 | sellers | | saskatoon | Saskatoon | Saskatoon | $422,000 | 0% | $2,768 | $1,559 | 34 | sellers | | regina | Regina | Regina | $416,000 | -1% | $2,728 | $1,478 | 35 | sellers | | lloydminster | Lloydminster | Northwest | $301,000 | -1% | $1,963 | $1,345 | 62 | sellers | | swift-current | Swift Current | Southwest | $296,000 | +1% | $1,929 | $999 | 72 | sellers | | humboldt | Humboldt | East Central | $283,000 | +2% | $1,840 | $1,133 | 63 | sellers | | moose-jaw | Moose Jaw | South Central | $271,000 | +5% | $1,769 | $1,337 | 52 | sellers | | prince-albert | Prince Albert | North Central | $260,000 | +5% | $1,698 | $1,213 | 57 | sellers | | meadow-lake | Meadow Lake | Northwest | $252,000 | +4% | $1,638 | $1,125 | 63 | sellers | | yorkton | Yorkton | East Central | $251,000 | +1% | $1,636 | $1,217 | 68 | sellers | | weyburn | Weyburn | Southeast | $241,000 | +7% | $1,569 | $1,183 | 70 | balanced | | melfort | Melfort | North Central | $231,000 | +1% | $1,502 | $1,133 | 75 | sellers | | kindersley | Kindersley | West Central | $231,000 | +6% | $1,501 | $1,112 | 70 | sellers | | la-ronge | La Ronge | Far North | $229,000 | +1% | $1,486 | $1,055 | 72 | sellers | | estevan | Estevan | Southeast | $224,000 | +2% | $1,459 | $1,005 | 68 | sellers | | north-battleford | North Battleford | Northwest | $220,000 | +0% | $1,433 | $1,159 | 67 | sellers | | nipawin | Nipawin | North Central | $214,000 | -2% | $1,390 | $1,105 | 81 | sellers | | rosetown | Rosetown | West Central | $185,000 | +7% | $1,200 | $1,055 | 78 | sellers | | melville | Melville | East Central | $181,000 | +1% | $1,176 | $1,111 | 71 | sellers | --- # Saskatchewan trade Canonical: https://veilpoint.ca/trade Retrieved: 2026-07-27T07:12:21.894Z Cite: Opportunity Exchange (VeilPoint), "Saskatchewan trade", https://veilpoint.ca/trade, retrieved 2026-07-27. > **Data status: real published data.** Statistics Canada — merchandise exports by product section, Saskatchewan, 2025, as of 2025-12-31. Curated annual snapshot from Statistics Canada and the Canadian Grain Commission. ## Provincial exports by product section (2025) Total: $43,631,135,000 CAD. | NAPCS section | Value (CAD thousands) | Share | | --- | --- | --- | | Farm, fishing and intermediate food products | 17,904,961 | 41.0% | | Energy products | 14,297,932 | 32.8% | | Metal ores and non-metallic minerals | 8,997,081 | 20.6% | | Industrial machinery, equipment and parts | 617,712 | 1.4% | | Forestry products and building and packaging materials | 540,976 | 1.2% | | Basic and industrial chemical, plastic and rubber products | 324,597 | 0.7% | | Metal and non-metallic mineral products | 306,442 | 0.7% | | Motor vehicles and parts | 189,431 | 0.4% | | Consumer goods | 188,376 | 0.4% | | Electronic and electrical equipment and parts | 170,065 | 0.4% | | Special transactions trade | 84,184 | 0.2% | | Aircraft and other transportation equipment and parts | 9,378 | 0.0% | ## Producer grain deliveries (crop year 2024–25) Total: 26,277,287 tonnes across 107 delivery points. ### Provincial totals by crop | Crop | Tonnes | | --- | --- | | Wheat | 10,960,178 | | Canola | 5,575,926 | | Amber Durum | 4,395,656 | | Barley | 1,532,896 | | Lentil | 1,409,225 | | Peas | 1,099,126 | | Oat | 911,653 | | Canaryseed | 114,856 | | Flaxseed | 103,354 | | Chick Peas | 82,605 | | Mustard Seed | 31,825 | | Rye | 25,893 | | Soybeans | 24,256 | | Corn | 5,685 | | Beans | 3,549 | | Faba bean | 604 | ### Delivery points | Delivery point | Latitude | Longitude | Total tonnes | Top crop | | --- | --- | --- | --- | --- | | Saskatoon | 52.1493 | -106.7302 | 1,264,151 | Wheat | | Moose Jaw | 50.395 | -105.5475 | 990,234 | Amber Durum | | Weyburn | 49.6693 | -103.8856 | 978,634 | Amber Durum | | Swift Current | 50.288 | -107.7863 | 946,175 | Amber Durum | | Melfort | 52.8517 | -104.6493 | 940,193 | Wheat | | Tisdale | 52.8424 | -104.0438 | 856,648 | Wheat | | Kindersley | 51.4582 | -109.1489 | 814,392 | Amber Durum | | Rosetown | 51.5709 | -107.9211 | 673,677 | Wheat | | Melville | 50.9399 | -102.7253 | 662,147 | Wheat | | Yorkton | 51.2249 | -102.4657 | 659,433 | Wheat | | Colonsay | 51.9679 | -105.8402 | 625,724 | Wheat | | Davidson | 51.263 | -105.9948 | 546,238 | Wheat | | Balgonie | 50.4915 | -104.2769 | 543,522 | Wheat | | Canora | 51.6008 | -102.4429 | 501,490 | Wheat | | Last Mountain S | 50.9372 | -104.5546 | 447,751 | Wheat | | Hamlin | 52.8766 | -108.3132 | 439,646 | Wheat | | Northgate | 49.0045 | -102.2669 | 439,348 | Amber Durum | | Estevan | 49.1766 | -103.0505 | 435,465 | Canola | | Pasqua | 50.3817 | -105.3513 | 421,408 | Amber Durum | | Wadena | 51.9465 | -103.7915 | 413,014 | Wheat | | Aberdeen | 52.3256 | -106.2592 | 402,815 | Wheat | | Assiniboia | 49.6145 | -106.0301 | 377,598 | Amber Durum | | Grenfell | 50.4152 | -102.9468 | 371,926 | Wheat | | Antelope | 50.1413 | -108.3602 | 370,903 | Amber Durum | | Clavet | 52.0313 | -106.4037 | 357,758 | Wheat | | Whitewood | 50.3169 | -102.2419 | 351,960 | Wheat | | Reford | 52.3017 | -108.6906 | 347,351 | Wheat | | Maymont | 52.5557 | -107.6855 | 334,473 | Wheat | | Maidstone | 53.0807 | -109.3007 | 321,537 | Wheat | | Nokomis | 51.5108 | -105.0068 | 320,287 | Wheat | | Biggar | 52.0602 | -108.0104 | 316,172 | Wheat | | Dixon | 52.2045 | -105.2518 | 313,811 | Canola | | White Star | 53.3134 | -105.7397 | 313,112 | Wheat | | Humboldt | 52.1926 | -105.0399 | 307,760 | Wheat | | Strongfield | 51.2929 | -106.5998 | 303,552 | Wheat | | Fairlight | 49.8891 | -101.7083 | 300,510 | Wheat | | Prairie West | 51.7882 | -108.7324 | 276,266 | Wheat | | N Battleford | 52.7794 | -108.2823 | 275,621 | Wheat | | Amazon | 51.578 | -105.4636 | 274,654 | Wheat | | Booth Siding | 51.4106 | -104.6219 | 261,147 | Wheat | | Carnduff | 49.1748 | -101.7318 | 258,655 | Wheat | | Gull Lake | 50.0874 | -108.513 | 256,489 | Amber Durum | | Unity | 52.433 | -109.1297 | 247,724 | Wheat | | Crooked River | 52.8589 | -103.783 | 230,068 | Wheat | | Oban | 52.1254 | -108.1368 | 225,813 | Wheat | | Kegworth | 50.1697 | -103.0149 | 219,723 | Wheat | | Balcarres | 50.8069 | -103.5776 | 208,608 | Wheat | | Naicam | 52.3559 | -104.4951 | 204,832 | Wheat | | Corinne | 50.0513 | -104.6366 | 202,406 | Amber Durum | | Brass | 52.3481 | -108.7244 | 200,282 | Wheat | | Moosomin | 50.1681 | -101.7114 | 195,500 | Wheat | | Brada | 52.7208 | -108.1916 | 187,156 | Wheat | | Quill Lake | 52.0629 | -104.2345 | 185,192 | Wheat | | Marshall | 53.1758 | -109.7481 | 184,109 | Wheat | | Lloydminster | 53.2559 | -109.9663 | 174,576 | Wheat | | Carlea | 53.1535 | -103.8993 | 171,807 | Oat | | Reed Lake | 50.428 | -107.1389 | 156,214 | Amber Durum | | Regina East | 50.4247 | -104.4232 | 153,548 | Canola | | Regina | 50.4427 | -104.5764 | 141,881 | Lentil | | Belle Plaine | 50.3999 | -105.1656 | 138,845 | Lentil | | Leader | 50.869 | -109.4794 | 132,952 | Amber Durum | | Watson | 52.123 | -104.5445 | 129,954 | Canola | | Carmichael | 50.0479 | -108.6441 | 127,467 | Amber Durum | | Eston | 51.1442 | -108.7199 | 118,045 | Amber Durum | | Luseland | 52.079 | -109.3896 | 101,204 | Wheat | | Elrose | 51.2035 | -108.0312 | 97,793 | Amber Durum | | Valparaiso | 52.8487 | -104.217 | 86,652 | Barley | | Nicklen Siding | 53.1025 | -104.0342 | 74,365 | Wheat | | Kamsack | 51.5552 | -101.8928 | 74,052 | Wheat | | Maple Creek | 49.9105 | -109.4789 | 69,290 | Amber Durum | | Cupar | 50.9438 | -104.2115 | 68,235 | Wheat | | Condie | 50.5535 | -104.738 | 63,126 | Lentil | | Congress | 49.7517 | -106.0184 | 62,707 | Amber Durum | | Waldron | 50.8343 | -102.46 | 62,586 | Wheat | | Lucky Lake | 50.9829 | -107.1385 | 60,785 | Wheat | | Ituna | 51.1592 | -103.4677 | 59,527 | Oat | | Beechy | 50.8759 | -107.3821 | 59,391 | Amber Durum | | Dinsmore | 51.3271 | -107.4634 | 54,803 | Wheat | | Marengo | 51.4771 | -109.784 | 53,942 | Wheat | | Neville | 49.9613 | -107.6305 | 51,955 | Lentil | | Laporte | 51.2189 | -109.5526 | 49,439 | Lentil | | Watrous | 51.6681 | -105.4592 | 49,268 | Barley | | Outlook | 51.592 | -106.9164 | 49,186 | Peas | | Wilkie | 52.4111 | -108.6961 | 45,175 | Lentil | | Dafoe | 51.7528 | -104.5276 | 44,982 | Peas | | Leross | 51.2862 | -103.8733 | 43,618 | Barley | | Delisle | 51.8972 | -107.1264 | 42,073 | Lentil | | St Gregor | 52.1786 | -104.8285 | 37,847 | Canaryseed | | Aylesbury | 50.9389 | -105.6894 | 36,190 | Lentil | | Francis | 50.1077 | -103.8836 | 30,091 | Lentil | | Vanguard | 49.907 | -107.2946 | 27,100 | Lentil | | Foam Lake | 51.6438 | -103.5598 | 26,010 | Oat | | Indian Head | 50.5281 | -103.664 | 24,326 | Canola | | Cutknife | 52.7422 | -109.0158 | 23,559 | Peas | | Carrot River | 53.2833 | -103.5786 | 22,394 | Oat | | Milestone | 49.9945 | -104.5234 | 18,921 | Canaryseed | | Herbert | 50.4247 | -107.2238 | 13,733 | Wheat | | Lang | 49.92 | -104.3769 | 12,505 | Wheat | | Runciman | 52.9834 | -104.0462 | 8,909 | Peas | | Gravelbourg | 49.8746 | -106.5218 | 6,760 | Mustard Seed | | Shaunavon | 49.6423 | -108.4136 | 6,402 | Lentil | | Success | 50.4617 | -108.0839 | 4,189 | Chick Peas | | Loreburn | 51.2175 | -106.5149 | 1,577 | Chick Peas | | Pambrun | 49.888 | -107.4568 | 906 | Lentil | | Hepburn | 52.454 | -106.798 | 717 | Flaxseed | | Radville | 49.5086 | -104.2857 | 414 | Flaxseed | | Arborfield | 53.1099 | -103.6513 | 234 | Canola | --- # Wages and vacancies Canonical: https://veilpoint.ca/wages Retrieved: 2026-07-27T07:12:21.895Z Data as of: 2026-03-31 Cite: Opportunity Exchange (VeilPoint), "Wages and vacancies", https://veilpoint.ca/wages, data as of 2026-03-31, retrieved 2026-07-27. > **Data status.** Real published data: curated Statistics Canada snapshots — LFS employee wages by occupation group and province (annual) and JVWS job vacancies with offered wages by NOC 2021 unit group (quarterly). Wage medians are published at occupation-group level, not per unit group; each estimate names the grouping that answered. Vacancy cells absent at small sizes are suppressed by Statistics Canada — absence is not zero. Median and average hourly wages by province (Labour Force Survey, 2025 annual averages) and job vacancies with offered wages by NOC 2021 unit group (Job Vacancy and Wage Survey, 2026 Q1). Per-occupation queries: `/api/v1/wages?noc={code}` (any of the 516 unit groups, geographies compared) and `/api/v1/wages?province={SK|47|canada}`; MCP tool `get_wages`. Offered wages marked (E) are Statistics Canada "use with caution" estimates. ## Median hourly wage by province, all occupations (2025) | Geography | Median $/hr | Average $/hr | Employees (thousands) | | --- | --- | --- | --- | | Canada | $30.77 | $36.4 | 18,317.6 | | Newfoundland and Labrador | $28 | $33.42 | 226.9 | | Prince Edward Island | $26.63 | $30.11 | 82.9 | | Nova Scotia | $27.37 | $32.39 | 469 | | New Brunswick | $27 | $31.27 | 366.7 | | Quebec | $30 | $35.05 | 4,132.4 | | Ontario | $31.25 | $37.72 | 7,119.9 | | Manitoba | $26.75 | $31.63 | 655.9 | | Saskatchewan | $28.85 | $33.39 | 533.3 | | Alberta | $32 | $37.35 | 2,238.8 | | British Columbia | $32.49 | $37.95 | 2,491.9 | ## Highest-vacancy occupations, Canada (2026 Q1) | NOC | Occupation | TEER | Vacancies | Offered $/hr | | --- | --- | --- | --- | --- | | 65201 | Food counter attendants, kitchen helpers and related support occupations | 5 | 24,400 | $17.6 | | 31301 | Registered nurses and registered psychiatric nurses | 1 | 17,125 | $37.35 | | 33102 | Nurse aides, orderlies and patient service associates | 3 | 13,505 | $25.15 | | 73300 | Transport truck drivers | 3 | 13,310 | $29.9 | | 64100 | Retail salespersons and visual merchandisers | 4 | 12,725 | $19.1 | | 63200 | Cooks | 3 | 9,040 | $19.7 | | 42201 | Social and community service workers | 2 | 8,925 | $25.45 | | 75101 | Material handlers | 5 | 7,885 | $20.85 | | 32101 | Licensed practical nurses | 2 | 7,480 | $32.55 | | 75110 | Construction trades helpers and labourers | 5 | 7,075 | $25.2 | | 42202 | Early childhood educators and assistants | 2 | 6,855 | $23.45 | | 65102 | Store shelf stockers, clerks and order fillers | 5 | 6,830 | $17.5 | | 65310 | Light duty cleaners | 5 | 6,650 | $20.1 | | 72410 | Automotive service technicians, truck and bus mechanics and mechanical repairers | 2 | 6,620 | $32.6 | | 65200 | Food and beverage servers | 5 | 5,900 | $17.2 | ## Highest-vacancy occupations, Saskatchewan (2026 Q1) | NOC | Occupation | TEER | Vacancies | Offered $/hr | | --- | --- | --- | --- | --- | | 65201 | Food counter attendants, kitchen helpers and related support occupations | 5 | 635 | $16.2 | | 31301 | Registered nurses and registered psychiatric nurses | 1 | 580 | $41.2 | | 33102 | Nurse aides, orderlies and patient service associates | 3 | 510 | $21.95 | | 73300 | Transport truck drivers | 3 | 445 | $29.25 | | 65310 | Light duty cleaners | 5 | 380 | $17.5 | | 63200 | Cooks | 3 | 365 | $17.55 | | 42201 | Social and community service workers | 2 | 345 | $22.55 | | 64100 | Retail salespersons and visual merchandisers | 4 | 340 | $17.8 | | 32101 | Licensed practical nurses | 2 | 280 | $36.25 | | 65200 | Food and beverage servers | 5 | 275 | $15.95 | | 62020 | Food service supervisors | 2 | 250 | $18.9 | | 72401 | Heavy-duty equipment mechanics | 2 | 250 | $36.55 | | 42202 | Early childhood educators and assistants | 2 | 215 | $16.95 | | 64410 | Security guards and related security service occupations | 4 | 200 | $21.3 | | 75110 | Construction trades helpers and labourers | 5 | 200 | $19.9 | ## Method - Employee wages: Statistics Canada — employee wages by occupation (Labour Force Survey), 2025 — both full- and part-time employees, all genders, 15 years and over. Published at occupation-group granularity (major groups, sub-major groups, merged spans); per-unit-group queries return the most specific published grouping and say which level answered. - Vacancies: Statistics Canada — job vacancies and offered wages by occupation (JVWS), 2026 Q1 — unadjusted for seasonality. These are measured vacancies: quarterly statistical survey estimates, not browsable postings anyone can apply to. Statistics Canada suppresses small cells; a missing occupation × province row means "not published", never zero. - 642 wage rows and 2,833 vacancy rows currently served; the complete tables are one fetch at `/data/wages.json`. --- # Rents and vacancy rates Canonical: https://veilpoint.ca/rents Retrieved: 2026-07-27T07:12:21.903Z Data as of: 2025-10-31 Cite: Opportunity Exchange (VeilPoint), "Rents and vacancy rates", https://veilpoint.ca/rents, data as of 2025-10-31, retrieved 2026-07-27. > **Data status.** Real published data: curated CMHC Rental Market Survey snapshots via Statistics Canada — average rents by unit type and rental vacancy rates for every surveyed centre in Canada, October survey. Suppressed cells are null and suppressed centres absent — never zero. CMHC Rental Market Survey, October 2025: average monthly rents by unit type (row and apartment structures of three units and over) and rental vacancy rates for every surveyed centre in Canada. 178 centres with published rents, 152 with published vacancy rates. Queries: `/api/v1/rents?province={SK|47}` and `/api/v1/rents?centre={code}`; MCP tool `get_rents`. A dash is a suppressed cell — not published at that size, never zero. ## Saskatchewan centres (October 2025) | Code | Centre | Province | Bachelor | 1BR | 2BR | 3BR+ | Vacancy | | --- | --- | --- | --- | --- | --- | --- | --- | | 750 | Estevan | Saskatchewan | $625 | $863 | $1,005 | $1,090 | — | | 47840 | Lloydminster | Saskatchewan | — | $1,123 | $1,345 | $1,487 | 3.5% | | 715 | Moose Jaw | Saskatchewan | $792 | $997 | $1,337 | $1,863 | 4.8% | | 735 | North Battleford | Saskatchewan | $706 | $924 | $1,159 | $1,247 | 3.7% | | 745 | Prince Albert | Saskatchewan | $759 | $1,073 | $1,213 | $1,300 | 5.6% | | 705 | Regina | Saskatchewan | $901 | $1,240 | $1,478 | $1,900 | 2.6% | | 725 | Saskatoon | Saskatchewan | $981 | $1,281 | $1,559 | $1,792 | 3.1% | | 720 | Swift Current | Saskatchewan | $685 | $830 | $999 | $1,273 | 5.5% | | 710 | Yorkton | Saskatchewan | $903 | $1,076 | $1,217 | $1,444 | 2.1% | ## All surveyed centres (October 2025) | Code | Centre | Province | Bachelor | 1BR | 2BR | 3BR+ | Vacancy | | --- | --- | --- | --- | --- | --- | --- | --- | | 015 | Corner Brook | Newfoundland and Labrador | $562 | $776 | $949 | $1,071 | 1% | | 1006009 | Gander | Newfoundland and Labrador | — | $849 | $1,005 | $999 | 0.9% | | 010 | Grand Falls-Windsor | Newfoundland and Labrador | — | $620 | $945 | — | — | | 001 | St. John's | Newfoundland and Labrador | $945 | $1,064 | $1,348 | $1,327 | 2.1% | | 105 | Charlottetown | Prince Edward Island | $984 | $1,066 | $1,354 | $1,548 | 1.7% | | 110 | Summerside | Prince Edward Island | — | $963 | $1,241 | $1,057 | 3.2% | | 225 | Cape Breton | Nova Scotia | $830 | $840 | $1,134 | $1,432 | 2.7% | | 205 | Halifax | Nova Scotia | $1,362 | $1,539 | $1,828 | $2,254 | 2.6% | | 210 | Kentville | Nova Scotia | $667 | $1,044 | $1,128 | $1,129 | 1.4% | | 220 | New Glasgow | Nova Scotia | — | $842 | $1,070 | $1,291 | 1.9% | | 1204010 | Queens | Nova Scotia | — | — | $1,114 | — | 0% | | 215 | Truro | Nova Scotia | $796 | $1,011 | $1,273 | $1,753 | 1.5% | | 328 | Bathurst | New Brunswick | $580 | $776 | $1,108 | $1,346 | 3.9% | | 13330 | Campbellton | New Brunswick | — | $851 | $922 | $1,253 | 0.9% | | 335 | Edmundston | New Brunswick | $618 | $716 | $995 | $1,005 | 1% | | 320 | Fredericton | New Brunswick | $1,046 | $1,208 | $1,431 | $1,774 | — | | 329 | Miramichi | New Brunswick | — | $662 | $1,132 | — | — | | 305 | Moncton | New Brunswick | $1,028 | $1,164 | $1,452 | $1,607 | 3.8% | | 310 | Saint John | New Brunswick | $838 | $1,001 | $1,290 | $1,283 | 2.1% | | 410 | Alma | Quebec | $597 | $583 | $828 | $771 | 1.5% | | 481 | Amos | Quebec | — | $930 | $1,002 | $1,011 | 0.5% | | 406 | Baie-Comeau | Quebec | $566 | $728 | $855 | $904 | 1.1% | | 437 | Cowansville | Quebec | $614 | $796 | $1,147 | $1,224 | 1.9% | | 411 | Dolbeau-Mistassini | Quebec | $424 | $484 | $677 | $681 | 0.5% | | 447 | Drummondville | Quebec | $712 | $904 | $1,044 | $1,306 | — | | 2403005 | Gaspé | Quebec | $526 | $688 | $918 | $859 | 1.7% | | 450 | Granby | Quebec | $905 | $884 | $1,154 | $1,393 | 2.1% | | 24502 | Hawkesbury | Quebec | — | — | $1,056 | — | — | | 456 | Joliette | Quebec | $662 | $796 | $1,114 | $1,080 | — | | 446 | La Tuque | Quebec | $554 | $523 | $600 | $703 | 1.3% | | 468 | Lachute | Quebec | $627 | $806 | $1,134 | $1,171 | 1.5% | | 2401023 | Les Îles-de-la-Madeleine | Quebec | — | $780 | $921 | $1,073 | 2.2% | | 403 | Matane | Quebec | $524 | $613 | $786 | $962 | 1.4% | | 2479088 | Mont-Laurier | Quebec | $560 | $598 | $788 | $849 | 2.2% | | 2418050 | Montmagny | Quebec | $589 | $654 | $865 | $911 | 0.7% | | 462 | Montréal | Quebec | $1,005 | $1,131 | $1,346 | $1,625 | 2.9% | | 24505 | Ottawa-Gatineau | Quebec | $1,046 | $1,362 | $1,451 | $1,508 | 3.8% | | 2475040 | Prévost | Quebec | — | $747 | $1,322 | $1,549 | 5.3% | | 421 | Québec | Quebec | $855 | $1,107 | $1,276 | $1,464 | 2.4% | | 2462037 | Rawdon | Quebec | — | $743 | $1,069 | $1,522 | — | | 404 | Rimouski | Quebec | $681 | $756 | $935 | $1,091 | — | | 405 | Rivière-du-Loup | Quebec | $598 | $693 | $857 | $1,057 | 0.8% | | 485 | Rouyn-Noranda | Quebec | $559 | $681 | $1,007 | $911 | 1% | | 408 | Saguenay | Quebec | $658 | $762 | $986 | $997 | 1.3% | | 2491042 | Saint-Félicien | Quebec | $454 | $542 | $812 | $860 | 0.4% | | 428 | Saint-Georges | Quebec | $482 | $617 | $798 | $882 | 1% | | 452 | Saint-Hyacinthe | Quebec | $762 | $964 | $1,203 | $1,484 | 2.2% | | 2475028 | Sainte- Sophie | Quebec | — | $997 | $1,198 | $1,473 | 0.9% | | 2477022 | Sainte-Adèle | Quebec | — | $773 | $1,034 | $1,414 | 0.6% | | 2426030 | Sainte-Marie | Quebec | $664 | $851 | $965 | $1,084 | 1.6% | | 465 | Salaberry-de-Valleyfield | Quebec | $677 | $773 | $1,125 | $1,130 | — | | 412 | Sept-Îles | Quebec | $727 | $819 | $956 | $1,088 | 1.7% | | 444 | Shawinigan | Quebec | $474 | $658 | $830 | $904 | 1.5% | | 433 | Sherbrooke | Quebec | $712 | $905 | $1,062 | $1,375 | 2.7% | | 454 | Sorel-Tracy | Quebec | $500 | $677 | $943 | $1,165 | 0.6% | | 430 | Thetford Mines | Quebec | $585 | $663 | $819 | $927 | 1.1% | | 442 | Trois-Rivières | Quebec | $699 | $828 | $1,017 | $1,111 | 2.7% | | 480 | Val-d'Or | Quebec | $647 | $793 | $1,071 | $1,011 | 1% | | 440 | Victoriaville | Quebec | $587 | $817 | $991 | $987 | — | | 568 | Barrie | Ontario | $1,111 | $1,583 | $1,749 | $1,953 | 4.2% | | 3544018 | Bracebridge | Ontario | — | $1,165 | $1,513 | $1,584 | 3.9% | | 543 | Brantford | Ontario | $1,204 | $1,448 | $1,604 | $1,618 | 3.2% | | 3514004 | Brighton | Ontario | — | — | $1,403 | — | 4.3% | | 3518039 | Brock | Ontario | — | $1,030 | $1,296 | — | 0% | | 512 | Brockville | Ontario | $976 | $1,140 | $1,339 | $1,247 | 4.3% | | 531 | Centre Wellington | Ontario | — | $1,298 | $1,562 | $1,637 | 3.7% | | 556 | Chatham-Kent | Ontario | $1,188 | $1,203 | $1,365 | $1,199 | 4.4% | | 527 | Cobourg | Ontario | — | $1,320 | $1,610 | $1,885 | 3.2% | | 567 | Collingwood | Ontario | — | $1,418 | $1,634 | — | 4.5% | | 501 | Cornwall | Ontario | $956 | $1,082 | $1,276 | $1,352 | 3.5% | | 582 | Elliot Lake | Ontario | $769 | $789 | $871 | $1,044 | 1.9% | | 3544002 | Gravenhurst | Ontario | — | $1,269 | $1,555 | $2,386 | — | | 3511015 | Greater Napanee | Ontario | $955 | $1,066 | $1,244 | — | — | | 580 | Greater Sudbury | Ontario | $904 | $1,244 | $1,555 | $1,839 | 1.1% | | 550 | Guelph | Ontario | $1,331 | $1,627 | $1,803 | $2,099 | 2.9% | | 3528018 | Haldimand County | Ontario | — | $1,132 | $1,137 | — | — | | 537 | Hamilton | Ontario | $1,078 | $1,402 | $1,659 | $1,866 | 3.5% | | 35502 | Hawkesbury | Ontario | $651 | $764 | $1,108 | $1,389 | 0.3% | | 3544042 | Huntsville | Ontario | — | $1,514 | $1,581 | — | 1.9% | | 533 | Ingersoll | Ontario | — | $1,124 | $1,194 | — | 3.8% | | 530 | Kawartha Lakes | Ontario | — | $1,311 | $1,591 | — | 3.3% | | 598 | Kenora | Ontario | — | $1,005 | — | — | — | | 3541024 | Kincardine | Ontario | — | — | $1,767 | — | 3.4% | | 3532038 | Kings Subdivision | Ontario | — | $823 | $1,020 | — | 0.7% | | 521 | Kingston | Ontario | $1,198 | $1,503 | $1,763 | $2,593 | 2.4% | | 541 | Kitchener-Cambridge-Waterloo | Ontario | $1,255 | $1,546 | $1,816 | $1,861 | 4% | | 3538040 | Lambton Shores | Ontario | — | — | $1,473 | — | 4.7% | | 555 | London | Ontario | $1,066 | $1,371 | $1,645 | $1,872 | 3.8% | | 3542047 | Meaford | Ontario | — | $919 | $1,192 | — | 0% | | 571 | Midland | Ontario | — | $1,290 | $1,541 | — | 3.4% | | 547 | Norfolk | Ontario | $667 | $1,004 | $988 | — | 0.9% | | 575 | North Bay | Ontario | $827 | $1,078 | $1,404 | $1,491 | 2.7% | | 3531040 | North Perth | Ontario | $1,117 | $1,398 | $1,282 | $1,434 | 4.7% | | 569 | Orillia | Ontario | $923 | $1,475 | $1,553 | $1,648 | 3.2% | | 532 | Oshawa | Ontario | $1,334 | $1,586 | $1,762 | $2,131 | 3.6% | | 35505 | Ottawa-Gatineau | Ontario | $1,332 | $1,593 | $1,916 | $2,090 | 2.9% | | 566 | Owen Sound | Ontario | $935 | $1,130 | $1,361 | $1,376 | 2.3% | | 515 | Pembroke | Ontario | $855 | $953 | $1,200 | $1,766 | 2.7% | | 516 | Petawawa | Ontario | — | $1,079 | $1,225 | $1,104 | 1.2% | | 529 | Peterborough | Ontario | $990 | $1,232 | $1,513 | $1,736 | 3.3% | | 528 | Port Hope | Ontario | — | $1,536 | $1,588 | — | 2.9% | | 3513020 | Prince Edward | Ontario | — | $1,337 | $1,405 | — | — | | 562 | Sarnia | Ontario | $971 | $1,235 | $1,502 | $1,626 | 4.9% | | 3541045 | Saugeen Shores | Ontario | — | $1,177 | $1,790 | $1,828 | 8.2% | | 590 | Sault Ste. Marie | Ontario | $942 | $1,167 | $1,394 | $1,604 | 2.5% | | 3518020 | Scugog | Ontario | — | $1,117 | $1,452 | — | — | | 539 | St. Catharines-Niagara | Ontario | $1,189 | $1,318 | $1,527 | $1,567 | 3.8% | | 553 | Stratford | Ontario | $1,074 | $1,508 | $1,663 | $1,776 | 4.1% | | 3502025 | The Nation | Ontario | — | $1,062 | $1,692 | — | — | | 595 | Thunder Bay | Ontario | $976 | $1,173 | $1,493 | $1,794 | 3.9% | | 546 | Tillsonburg | Ontario | $1,184 | $1,195 | $1,308 | — | 4.5% | | 586 | Timmins | Ontario | $859 | $1,177 | $1,291 | $1,528 | 3.7% | | 535 | Toronto | Ontario | $1,491 | $1,761 | $2,045 | $2,294 | 3% | | 3542004 | West Grey | Ontario | — | — | $1,055 | — | 0% | | 3548055 | West Nipissing | Ontario | $657 | $852 | $1,151 | — | — | | 559 | Windsor | Ontario | $948 | $1,193 | $1,451 | — | 3.6% | | 544 | Woodstock | Ontario | — | $1,409 | $1,645 | $1,604 | 2.8% | | 610 | Brandon | Manitoba | $652 | $810 | $1,096 | $1,327 | — | | 607 | Portage La Prairie | Manitoba | $656 | $829 | $1,257 | $1,359 | 8.4% | | 605 | Steinbach | Manitoba | $792 | $944 | $991 | $1,402 | 1.9% | | 640 | Thompson | Manitoba | $866 | $1,007 | $1,136 | $1,163 | 6% | | 602 | Winnipeg | Manitoba | $914 | $1,232 | $1,570 | $1,849 | 2.8% | | 750 | Estevan | Saskatchewan | $625 | $863 | $1,005 | $1,090 | — | | 47840 | Lloydminster | Saskatchewan | — | $1,123 | $1,345 | $1,487 | 3.5% | | 715 | Moose Jaw | Saskatchewan | $792 | $997 | $1,337 | $1,863 | 4.8% | | 735 | North Battleford | Saskatchewan | $706 | $924 | $1,159 | $1,247 | 3.7% | | 745 | Prince Albert | Saskatchewan | $759 | $1,073 | $1,213 | $1,300 | 5.6% | | 705 | Regina | Saskatchewan | $901 | $1,240 | $1,478 | $1,900 | 2.6% | | 725 | Saskatoon | Saskatchewan | $981 | $1,281 | $1,559 | $1,792 | 3.1% | | 720 | Swift Current | Saskatchewan | $685 | $830 | $999 | $1,273 | 5.5% | | 710 | Yorkton | Saskatchewan | $903 | $1,076 | $1,217 | $1,444 | 2.1% | | 806 | Brooks | Alberta | $1,003 | $1,176 | $1,406 | $1,638 | 2.5% | | 825 | Calgary | Alberta | $1,438 | $1,581 | $1,908 | $2,118 | 4.9% | | 833 | Camrose | Alberta | — | $1,228 | $1,346 | $1,244 | 1.6% | | 828 | Canmore | Alberta | — | $1,858 | $2,438 | $3,676 | 1.8% | | 845 | Cold Lake | Alberta | — | $1,092 | $1,328 | $1,472 | — | | 835 | Edmonton | Alberta | $1,108 | $1,301 | $1,598 | $1,802 | 3.8% | | 850 | Grande Prairie | Alberta | $1,069 | $1,223 | $1,427 | $1,604 | 2.3% | | 821 | High River | Alberta | — | $1,106 | $1,286 | $1,538 | 0.9% | | 832 | Lacombe | Alberta | — | $1,157 | $1,451 | $1,561 | 1.6% | | 810 | Lethbridge | Alberta | — | $1,370 | $1,593 | $1,683 | 4.2% | | 48840 | Lloydminster | Alberta | $886 | $1,130 | $1,301 | $1,432 | 3.5% | | 805 | Medicine Hat | Alberta | $1,011 | $1,120 | $1,217 | $1,468 | 3.2% | | 820 | Okotoks | Alberta | — | — | $1,778 | $2,039 | 3.1% | | 4808001 | Red Deer County | Alberta | — | — | $1,703 | — | 4.2% | | 830 | Red Deer | Alberta | $1,036 | $1,220 | $1,418 | $1,677 | — | | 826 | Strathmore | Alberta | — | $1,283 | $1,520 | $1,463 | 1.6% | | 831 | Sylvan Lake | Alberta | — | $1,355 | $1,467 | $1,505 | 2.8% | | 865 | Wetaskiwin | Alberta | — | $984 | $1,294 | $1,605 | — | | 860 | Wood Buffalo | Alberta | $1,010 | $1,199 | $1,457 | $2,026 | 13.2% | | 932 | Abbotsford-Mission | British Columbia | $1,077 | $1,278 | $1,623 | $2,294 | 3.1% | | 944 | Campbell River | British Columbia | $1,258 | $1,282 | $1,656 | $1,979 | 2% | | 930 | Chilliwack | British Columbia | $885 | $1,222 | $1,523 | $2,250 | — | | 943 | Courtenay | British Columbia | $1,328 | $1,459 | $1,691 | $1,860 | — | | 905 | Cranbrook | British Columbia | $828 | $1,052 | $1,472 | $1,805 | 1.4% | | 975 | Dawson Creek | British Columbia | $835 | $959 | $1,202 | $1,331 | 0.7% | | 937 | Duncan | British Columbia | $876 | $1,283 | $1,624 | $1,787 | 2.9% | | 977 | Fort St. John | British Columbia | $805 | $917 | $1,196 | $1,351 | 2.4% | | 925 | Kamloops | British Columbia | $1,328 | $1,345 | $1,673 | $1,913 | — | | 915 | Kelowna | British Columbia | $1,394 | $1,597 | $2,098 | $2,713 | 6.3% | | 938 | Nanaimo | British Columbia | $1,244 | $1,527 | $1,895 | $2,057 | — | | 939 | Parksville | British Columbia | $1,133 | $1,546 | $1,563 | $2,143 | 0.9% | | 913 | Penticton | British Columbia | $933 | $1,197 | $1,511 | $2,117 | 2.6% | | 940 | Port Alberni | British Columbia | $886 | $994 | $1,279 | $1,601 | 2.2% | | 945 | Powell River | British Columbia | — | $957 | $1,182 | $1,225 | 4% | | 970 | Prince George | British Columbia | $940 | $1,214 | $1,422 | $1,553 | 4.3% | | 955 | Prince Rupert | British Columbia | $766 | $1,143 | $1,154 | $1,207 | 1.6% | | 952 | Quesnel | British Columbia | — | $889 | $1,226 | $1,130 | 2% | | 920 | Salmon Arm | British Columbia | — | $1,151 | $1,336 | — | 0.8% | | 934 | Squamish | British Columbia | $1,516 | $1,626 | $2,179 | $2,086 | 0.1% | | 5907035 | Summerland | British Columbia | — | $1,349 | $1,671 | — | 3.7% | | 965 | Terrace | British Columbia | — | — | $1,205 | $1,619 | 1% | | 933 | Vancouver | British Columbia | $1,667 | $1,807 | $2,364 | $2,820 | 3.7% | | 918 | Vernon | British Columbia | $846 | $1,234 | $1,607 | $1,826 | 3.4% | | 935 | Victoria | British Columbia | $1,349 | $1,624 | $2,121 | $2,742 | 3.3% | | 950 | Williams Lake | British Columbia | — | $1,082 | $1,455 | $1,906 | 0.2% | | 995 | Yellowknife | Northwest Territories | $1,606 | $1,757 | $2,109 | $2,449 | 1.3% | | 505 | Ottawa-Gatineau | Interprovincial | $1,295 | $1,542 | $1,757 | $1,919 | 3.1% | ## Method - Rents: CMHC Rental Market Survey — average rents by centre, October 2025 — Statistics Canada table 34-10-0133-01, row and apartment structures of three units and over. - Vacancy rates: CMHC Rental Market Survey — vacancy rates by centre, October 2025 — Statistics Canada tables 34-10-0130/0131/0132-01, merged by centre size. - These are measured survey rents, not current listing prices — a published snapshot of the October survey. - Centre codes are CMHC/StatCan geography codes (CMA, census agglomeration, CSD, or provincial part). Interprovincial centres carry no single province. - These measured rents also feed the discretionary-income model for the surveyed Saskatchewan communities on role and community pages. - 178 rent rows and 152 vacancy rows currently served; the complete tables are one fetch at `/data/rents.json`. --- # Data sources and serving status Canonical: https://veilpoint.ca/sources.md Retrieved: 2026-07-27T07:12:21.895Z Cite: Opportunity Exchange (VeilPoint), "Data sources and serving status", https://veilpoint.ca/sources.md, retrieved 2026-07-27. > **Data status.** Factual metadata: this document describes the provenance and serving mode of every data source the platform serves. It is the machine twin of /about/data. What every source runs on today. `mode: placeholder` means synthetic figures pending a partner integration; `curated` and `live` are real data. Delivery mode does not determine confidence: a direct published measurement remains Tier A when carried as a curated snapshot. The source table reports the weakest record tier currently served. Tiers: A direct primary-source observation · B published reference or reported observation · C modeled estimate · D synthetic placeholder. | Source | Mode | Health | Kind | Weakest record tier | Records | Refresh | | --- | --- | --- | --- | --- | --- | --- | | Job postings | placeholder | ok | placeholder | D | 1400 | Daily once the Job Bank feed is connected. | | Cost of living | placeholder | ok | placeholder | D | 20 | Monthly or annual by input series. | | Municipal economics | placeholder | ok | placeholder | D | 20 | Runtime request to the configured GeoLayer service. | | Training catalogue | placeholder | ok | placeholder | D | 54 | Weekly once institutional rosters are connected. | | Talent signals | placeholder | ok | placeholder | D | 339 | On profile change and account activity. | | Business directory | placeholder | ok | placeholder | D | 1557 | Monthly registry refresh once connected. | | Real estate | placeholder | ok | placeholder | D | 20 | Daily once MLS or permitted listing feeds are connected. | | Geography | curated | ok | provincial | B | 126 | Annual curated refresh, or when reference datasets are updated. | | Trade | curated | ok | statistics-canada | A | 119 | Annual curated refresh from published export and grain data. | | Wages & vacancies | curated | ok | statistics-canada | A | 3475 | Annual (LFS wages); quarterly (JVWS vacancies). | | Rents | curated | ok | cmhc | A | 330 | Annual (October survey). | ## Upstreams and licences - **Job postings** — upstream: ESDC Job Bank partner XML feed. Licence: ESDC Job Bank terms or Open Government licence, depending on feed.. Awaiting Job Bank network approval. Adapter scaffolded in jobs/jobbank.ts; requires feed credentials and the posting-to-occupation mapping pass. - **Cost of living** — upstream: CMHC Rental Market Survey · StatsCan CPI · municipal tax rolls. Licence: CMHC and Statistics Canada terms, depending on input.. Rent and vacancy figures are measured CMHC Rental Market Survey data (curated rents layer) for the communities CMHC surveys; remaining fields and unsurveyed communities are synthetic. Live adapter scaffolded in cost-of-living/cmhc.ts — requires StatsCan regional CPI series and municipal mill-rate collection. The forecasting model itself is complete and unit-tested. - **Municipal economics** — upstream: GeoLayer economic protocol (sibling service). Licence: GeoLayer service terms.. Live adapter is fully implemented — set OEX_GEOLAYER_BASE_URL to a running GeoLayer instance and OEX_GEOLAYER_PROVIDER=http. Note that GeoLayer GDP is synthetic in both modes by design. - **Training catalogue** — upstream: SaskPolytech · SIIT · Suncrest College · Great Plains College. Licence: Institutional permission required for live intake and seat data.. Synthetic catalogue derived from the occupation reference set. No provider has a public programs API — intake dates and seat availability require institutional agreements. Partnership dependency, not an engineering one. - **Talent signals** — upstream: OEX seeker accounts. Licence: First-party OEX user consent and platform privacy terms.. Synthetic standalone population. Signed-in app flows now use @oex/db accounts, persistent disclosure grants and the access audit log; this provider remains as the zero-config corpus for demos and bootstrap seeding. - **Business directory** — upstream: Provincial business registry · ISC corporate registry. Licence: Provincial registry terms or business-submitted data terms.. Synthetic directory. A live build ingests the provincial corporate registry for the roster and sector coding; featured placement is a platform-native paid product and needs the billing integration, not an external feed. - **Real estate** — upstream: Saskatchewan REALTORS® Association MLS · CREA. Licence: MLS/CREA or listing-provider permission required.. Synthetic housing market. A live build ingests the provincial MLS feed for prices, listings and velocity. The ownership model is complete and unit-tested — only the inputs are synthetic. - **Geography** — upstream: AAFC Soils of Canada (Soil Landscapes of Canada) · Saskatchewan Detailed Soil Survey · Saskatchewan Geological Survey — Mineral Deposit Index (SMDI) · ECCC Canadian Climate Normals 1981–2010. Licence: Published government reference data licences.. Real curated data: soil zone and agricultural capability per community, every current mineral operation in the province, and climate normals from the nearest ECCC station. Refreshed by re-running the recipes documented in the reference files. - **Trade** — upstream: Statistics Canada — merchandise exports by product section, Saskatchewan, 2025 · Canadian Grain Commission — grain deliveries at prairie points, 2024–25. Licence: Published Statistics Canada and Canadian Grain Commission data terms.. Real curated data: provincial merchandise exports by product section and producer grain deliveries by delivery point. Annual refresh via the recipes in the data files; a WDS live adapter can replace the snapshot later. - **Wages & vacancies** — upstream: Statistics Canada — employee wages by occupation (Labour Force Survey), 2025 · Statistics Canada — job vacancies and offered wages by occupation (JVWS), 2026 Q1. Licence: Statistics Canada Open Licence.. Real curated data: LFS employee wages by occupation group × province (2025) and JVWS vacancies with offered wages by NOC unit group × province/territory (2026 Q1). Refresh via the wage recipes; a WDS live adapter can replace the snapshot later. - **Rents** — upstream: CMHC Rental Market Survey — average rents by centre, October 2025 · CMHC Rental Market Survey — vacancy rates by centre, October 2025. Licence: Statistics Canada Open Licence (CMHC RMS data as published by Statistics Canada).. Real curated data: CMHC Rental Market Survey average rents by unit type and vacancy rates for every surveyed centre (October 2025). Annual refresh via the rent recipes; a WDS live adapter can replace the snapshot later. --- # Agent access Canonical: https://veilpoint.ca/agents Retrieved: 2026-07-27T07:12:21.963Z Cite: Opportunity Exchange (VeilPoint), "Agent access", https://veilpoint.ca/agents, retrieved 2026-07-27. Every public machine interface is keyless and read-only: a streamable-HTTP MCP server, a JSON REST API described by OpenAPI 3.1, markdown twins of every covered page, and bulk JSON snapshots. ## MCP setup - Endpoint: https://veilpoint.ca/mcp — streamable HTTP, stateless JSON-RPC POST - Protocol: POST `initialize`, then `notifications/initialized`, `tools/list`, `tools/call`. - No API key, no account, no retained session. Client configuration: ```json { "mcpServers": { "opportunityExchange": { "type": "http", "url": "https://veilpoint.ca/mcp" } } } ``` ## Discovery documents - Agent capability manifest: https://veilpoint.ca/.well-known/agent-capabilities.json - OpenAPI 3.1: https://veilpoint.ca/api/v1/openapi.json - Endpoint catalogue: https://veilpoint.ca/api/v1/catalog · bulk catalogue: https://veilpoint.ca/data/catalog.json - Agent index: https://veilpoint.ca/llms.txt · full corpus: https://veilpoint.ca/llms-full.txt · machine index: https://veilpoint.ca/index.md ## Truth states Every envelope reports `meta.evidence.truthState` from one closed vocabulary: - `preview` — synthetic demonstration records; never actionable, never market fact. - `measured_aggregate` — statistical survey estimates (JVWS vacancies): measurements, not browsable postings. - `snapshot` — authoritative published data for a stated period; real, dated, not real-time. - `live` — current actionable provider-backed records; the only state permitting live language. - `mixed` — derived results inherit their weakest material input. ## Policies - Every JSON envelope carries `meta.evidence` and `meta.citeAs`; read the evidence object (`truthState`, `isActionable`, `qualification`) before quoting a figure. - Pathway-evaluation constraints travel only in a POST body: never in URLs, never stored. - Rate limit: 300 requests per 60s per client on `/api/v1`, `/data` and `/mcp`. Every limited response carries `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset`; a 429 carries `Retry-After`.