Access Montréal's operating budget, contracts, subsidies, procurement, tax rates,
real estate transactions, and participatory budget results. Analyze spending,
track supplier activity, and explore financial accountability.
/ Accéder au budget de fonctionnement de Montréal, aux contrats, subventions,
approvisionnement, tarifs fiscaux, transactions immobilières et résultats du budget
participatif. Analyser les dépenses, suivre les fournisseurs et examiner la reddition
de comptes financière.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Access Montréal's operating budget, contracts, subsidies, procurement, tax rates,
real estate transactions, and participatory budget results. Analyze spending,
track supplier activity, and explore financial accountability.
/ Accéder au budget de fonctionnement de Montréal, aux contrats, subventions,
approvisionnement, tarifs fiscaux, transactions immobilières et résultats du budget
participatif. Analyser les dépenses, suivre les fournisseurs et examiner la reddition
de comptes financière.
The contrats-et-subventions-api is a SEPARATE API, not accessible via CKAN DataStore.
This API provides a unified interface for contracts and subsidies:
Base URL:https://api.donneesquebec.ca/api/3/action/ (Données Québec, not CKAN)
NOT a CKAN package — different authentication & response format
Do NOT query it via CKAN's datastore_search_sql
Use standard REST GET requests instead
Recommendation: For most analyses, use the CKAN datasets above (they are CSV-based, easier). Only use the API if you need real-time contract/subsidy lookups.
1. Budget / Budget de fonctionnement
Dataset Overview
# Find DataStore resource ID
curl -s 'https://donnees.montreal.ca/api/3/action/package_show?id=budget' | \
python3 -c "
import json, sys
for r in json.load(sys.stdin)['result']['resources']:
if r.get('datastore_active'):
print(f'DataStore ID: {r[\"id\"]}')
"
Typical fields:
Department, division, program code
Line item description (personnel, supplies, capital, etc.)
Budget amount (CAD), actual spending, variance
Fiscal year (starts Jan 1)
Department code / classification
Common SQL queries:
-- Budget by departmentSELECT "DEPARTMENT", SUM(CAST("BUDGET_AMOUNT" ASFLOAT)) as total_budget
FROM "RESOURCE_UUID"
GROUPBY "DEPARTMENT"
ORDERBY total_budget DESC-- Current year spending vs. budgetSELECT "LINE_ITEM", "BUDGET_AMOUNT", "ACTUAL_SPENDING",
(CAST("ACTUAL_SPENDING" ASFLOAT) /CAST("BUDGET_AMOUNT" ASFLOAT) *100) as pct_used
FROM "RESOURCE_UUID"
WHERE "FISCAL_YEAR" =2026ORDERBY pct_used DESC
2. Contracts / Contrats
Key Point: Multiple Authorization Levels
Montreal has FOUR contract datasets based on authorization authority:
City officials (central) — contrats-octroyes-par-les-fonctionnaires-ville-centrale
City Council + Agglomeration Council — contrats-conseil-municipal-et-conseil-d-agglomeration
All use the same column structure, but represent different governance levels. When analyzing contracts, you may need to combine these datasets.
Common Fields
Contractor name & address
Contract amount (CAD)
Award date, start date, end date
Work description / subject
Responsible department / borough
Contract Query Examples
-- Find all contracts for a specific supplierSELECT "CONTRACTOR_NAME", "AMOUNT", "START_DATE", "END_DATE", "DESCRIPTION"
FROM "RESOURCE_UUID"
WHERELOWER("CONTRACTOR_NAME") LIKE'%contractor-name%'ORDERBY "START_DATE" DESC-- Largest contracts in current yearSELECT "CONTRACTOR_NAME", "AMOUNT", "DESCRIPTION", "AWARD_DATE"
FROM "RESOURCE_UUID"
WHERECAST("AMOUNT" ASFLOAT) >500000ORDERBY "AMOUNT" DESC-- Contract count by borough (from borough council contracts)SELECT "BOROUGH", COUNT(*) as contract_count, SUM(CAST("AMOUNT" ASFLOAT)) as total_value
FROM "RESOURCE_UUID"
GROUPBY "BOROUGH"
ORDERBY total_value DESC
CDN-NDG Exception
Côte-des-Neiges–Notre-Dame-de-Grâce (CDN-NDG) maintains its own contract archive outside CKAN.
Not all CDN-NDG contracts may appear in the borough-level dataset
Check the borough's local website for complete history
This is a known gap in unified data
3. Subsidies & Grants / Subventions
Two Datasets by Source
Dataset
Authorization
Content
subventions-conseil-de-ville-et-d-agglomeration
Municipal & agglomeration councils
Grants approved by elected bodies
subventions-du-comite-executif
Executive committee
Grants approved by exec committee
Common Fields
Recipient organization name
Grant amount (CAD)
Program / purpose code
Approval date, payment date
Duration (one-time, recurring)
Subsidy Queries
-- Grants to non-profits in a specific sectorSELECT "RECIPIENT", "AMOUNT", "PURPOSE", "APPROVAL_DATE"
FROM "RESOURCE_UUID"
WHERE "PURPOSE" LIKE'%health%'OR "PURPOSE" LIKE'%sante%'ORDERBY "AMOUNT" DESC-- Sum of grants by recipient over timeSELECT "RECIPIENT", COUNT(*) as grant_count, SUM(CAST("AMOUNT" ASFLOAT)) as total_received
FROM "RESOURCE_UUID"
WHERECAST("APPROVAL_DATE" ASDATE) >'2023-01-01'GROUPBY "RECIPIENT"
HAVINGSUM(CAST("AMOUNT" ASFLOAT)) >100000ORDERBY total_received DESC
4. Supplier List / Liste des fournisseurs
Dataset Overview
Dataset:liste-des-fournisseurs
Contains all active suppliers registered with the City for procurement.
Fields
Supplier legal name, trade name
Supplier ID / registration number
Category (supplies, services, construction, etc.)
Contact info (optional)
Status (active, inactive, suspended)
Business classification
Supplier Analysis
-- Active suppliers by categorySELECT "CATEGORY", COUNT(*) as supplier_count
FROM "RESOURCE_UUID"
WHERE "STATUS" ='active'GROUPBY "CATEGORY"
ORDERBY supplier_count DESC-- Find a specific supplierSELECT*FROM "RESOURCE_UUID"
WHERELOWER("SUPPLIER_NAME") LIKE'%business-name%'-- Suppliers not used in recent contracts-- (Requires joining with contract dataset)
5. Elected Officials' Expenses / Dépenses des élus
-- Expenses by councilorSELECT "OFFICIAL_NAME", SUM(CAST("AMOUNT" ASFLOAT)) as total_expenses
FROM "RESOURCE_UUID"
WHERECAST("DATE_APPROVED" ASDATE) BETWEEN'2025-01-01'AND'2025-12-31'GROUPBY "OFFICIAL_NAME"
ORDERBY total_expenses DESC-- Travel expenses over thresholdSELECT "OFFICIAL_NAME", "VENDOR", "AMOUNT", "CATEGORY", "DATE_INCURRED"
FROM "RESOURCE_UUID"
WHERE "CATEGORY" ='travel'ANDCAST("AMOUNT" ASFLOAT) >5000ORDERBY "AMOUNT" DESC
6. Tax Rates & Tarification / Taux de taxation
Dataset Overview
Dataset:taux-de-taxation-et-tarification
Property tax rates, service fees, and user charges.
Content
Property class (residential, commercial, industrial)
Tax rate per $100 of assessed value
Municipal tax, agglomeration tax, school tax (if applicable)
Service fees (water, sewer, waste, parking, etc.)
Effective date, changes year-over-year
Common Queries
-- Current residential tax rate by boroughSELECT "BOROUGH", "PROPERTY_CLASS", "MILL_RATE"
FROM "RESOURCE_UUID"
WHERE "PROPERTY_CLASS" ='residential'AND "EFFECTIVE_DATE" = (SELECTMAX("EFFECTIVE_DATE") FROM "RESOURCE_UUID")
-- Historical tax rate changesSELECT "BOROUGH", "PROPERTY_CLASS", "MILL_RATE", "EFFECTIVE_DATE"
FROM "RESOURCE_UUID"
WHERE "PROPERTY_CLASS" IN ('residential', 'commercial')
ORDERBY "EFFECTIVE_DATE" DESC
7. Real Estate Transactions / Transactions immobilières
Dataset Overview
Dataset:liste-des-transactions-immobilieres
City-owned property acquisitions, sales, and disposals.
Fields
Property address, lot number
Type of transaction (purchase, sale, gift, expropriation)
Amount (CAD, or N/A if gift/donation)
Date of transaction
Purpose / use
Department or bureau responsible
Analysis Examples
-- Property acquisitions by yearSELECTCAST(EXTRACT(YEARFROM "TRANSACTION_DATE") ASINT) asyear,
COUNT(*) as acquisitions,
SUM(CAST("AMOUNT" ASFLOAT)) as total_spent
FROM "RESOURCE_UUID"
WHERE "TRANSACTION_TYPE" ='purchase'GROUPBYyearORDERBYyearDESC-- Largest property sales (revenue to city)SELECT "ADDRESS", "AMOUNT", "PURPOSE", "TRANSACTION_DATE"
FROM "RESOURCE_UUID"
WHERE "TRANSACTION_TYPE" ='sale'ORDERBYCAST("AMOUNT" ASFLOAT) DESC
LIMIT 20
8. Financial Accountability / Reddition de comptes financière
Dataset Overview
Dataset:reddition-comptes-financiere
Annual financial statements and audited accounts.
Content
Assets, liabilities, equity summaries
Revenue by source (taxes, fees, grants, transfers)
Expenditures by department
Surplus/deficit for the fiscal year
Audit status and date
Used for compliance and public transparency reporting.
9. Participatory Budget / Budget participatif
Dataset Overview
Dataset:budget-participatif-montreal
Results of citizen-voted participatory budget projects.
Fields
Project title, description
Proponent / idea author
Winning year / round
Approved budget amount
Location / borough
Status (approved, in progress, completed)
Queries
-- Winning projects by boroughSELECT "BOROUGH", COUNT(*) as approved_projects,
SUM(CAST("BUDGET_AMOUNT" ASFLOAT)) as total_allocated
FROM "RESOURCE_UUID"
GROUPBY "BOROUGH"
ORDERBY total_allocated DESC-- Completed vs. in-progress projectsSELECT "STATUS", COUNT(*) as count, SUM(CAST("BUDGET_AMOUNT" ASFLOAT)) as total
FROM "RESOURCE_UUID"
GROUPBY "STATUS"
10. Capital Program / Programme triennal d'immobilisation
Multiple contract datasets. Montreal breaks contracts into 4 datasets by authorization level. Combining all is normal. CDN-NDG has its own archive outside CKAN.
Currency is CAD. All amounts are in Canadian dollars. Never assume USD or assume conversion.
Fiscal year ≠ calendar year. Montreal's fiscal year runs Jan 1 – Dec 31 (same as calendar). Some reports may reference prior years.
Tax rates change annually. Always check the latest EFFECTIVE_DATE in tarification data. Rates from 2024 may not apply to current queries.
Field names vary slightly. Column names in the actual DataStore may differ from examples here. Always check the dataset's datastore_info endpoint first.
Supplier list is active only. Inactive/historical suppliers may not appear. Use contract datasets to find historical vendor activity.
Assessed value ≠ market value. The property assessment data (used for tax rates) is reassessed every 3 years and may differ from real sale prices.
Contracts can have amendments. Some contract datasets may list amendments separately. Check if there are related records.
Approved ≠ paid. Grant approval date and payment date can differ significantly. Track both for cash flow analysis.
Real estate transactions may be gifts. Transaction type includes gifts, expropriation, etc. — not always sales. Check TRANSACTION_TYPE before assuming monetary value.
Provenance / Provenance
Source
Publisher
Gov Level
License
Contact
Budget
Ville de Montréal (Service de la gestion financière)