Environment Canada GeoMet API
Free Canadian weather API with no key: OGC API - Features access to climate stations, daily and hourly records, and forecasts, as standards-compliant GeoJSON. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Environment Canada GeoMet API?
Environment and Climate Change Canada's GeoMet platform serves climate and weather data through a standards-compliant OGC API - Features interface with no key. Collections are queried as GeoJSON FeatureCollections, with climate stations returning full metadata and identifiers.
Rather than inventing a bespoke interface, ECCC implemented OGC API - Features, the modern OGC standard. That means the same request grammar — `/collections`, `/collections/{id}/items`, `bbox`, `datetime`, `limit` — works here and against any other conformant server, and existing GIS clients can consume it without a custom driver. It is a more disciplined design than most national weather APIs manage.
One quirk will catch you immediately: latitude and longitude in the station properties are integers scaled by 10⁷. `485500000` is 48.55 degrees, and `-1234200000` is -123.42. The GeoJSON `geometry` on each feature carries the properly formatted decimal coordinates, so use that for mapping and treat the properties versions as an internal encoding. Every field is also duplicated in English and French, following federal bilingualism requirements, which roughly doubles the payload but means you get both languages for free. `CLIMATE_IDENTIFIER` is the key that links a station into the daily and hourly observation collections.
Quick facts
- Base URL
https://api.weather.gc.ca- Authentication
- No API key and no registration. Canadian federal government open data.
- Rate limit
- No published limit. Use `limit` and paging rather than requesting whole collections.
- Pricing
- Free under the Open Government Licence - Canada.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Environment Canada GeoMet API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Fetch a climate station record
GET https://api.weather.gc.ca/collections/climate-stations/items?limit=1&f=json
curl 'https://api.weather.gc.ca/collections/climate-stations/items?limit=1&f=json'const res = await fetch("https://api.weather.gc.ca/collections/climate-stations/items?limit=1&f=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.weather.gc.ca/collections/climate-stations/items?limit=1&f=json", timeout=20)
res.raise_for_status()
print(res.json()){
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"STN_ID": 2,
"STATION_NAME": "CHEMAINUS BARE POINT",
"PROV_STATE_TERR_CODE": "BC",
"ENG_PROV_NAME": "BRITISH COLUMBIA",
"FRE_PROV_NAME": "COLOMBIE-BRITANNIQUE",
"COUNTRY": "CAN",
"LATITUDE": 485500000,
"LONGITUDE": -1234200000,
"TIMEZONE": "PST",
"ELEVATION": "3.00",
"CLIMATE_IDENTIFIER": "101AE00",
"TC_IDENTIFIER": null,
"WMO_IDENTIFIER": null,
"STATION_TYPE": "N/A",
"NORMAL_CODE": "G",
"PUBLICATION_CODE": 1,
"DISPLAY_CODE": 9,
"ENG_STN_OPERATOR_ACRONYM": null,
"FRE_STN_OPERATOR_ACRONYM": null,
"ENG_STN_OPERATOR_NAME": null,
"FRE_STN_OPERATOR_NAME": null,
"FIRST_DATE": "1979-01-01 00:00:00",
"LAST_DATE": "1979-12-31 00:00:00",
"HLY_FIRST_DATE": null,
"HLY_LAST_DATE": null,
"DLY_FIRST_DATE": "1979-11-01 00:00:00",
"DLY_LAST_DATE": "1979-12-31 00:00:00",
"MLY_FIRST_DATE": "1979-01-01 00:00:00",
"MLY_LAST_DATE": "1979-12-01 00:00:00",
"HAS_MONTHLY_SUMMARY": "Y",
"HAS_NORMALS_DATA": "N",
"HAS_HOURLY_DATA": "N"
},
"geometry": {
"type": "Point",
"coordinates": [
-123.7,
48.916666666666664
]
},
"id": "101AE00"
}
],
"numberMatched": 8615,
"numberReturned": 1,
"links": [
{
"type": "application/geo+json",
"rel": "self",
"title": "TParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
(collection) | path | Required | Collection id, such as `climate-stations`, `climate-daily` or `climate-hourly`. List them at `/collections`. climate-stations |
limit | query | Optional | Maximum features to return. Always set it — collections are large. 1 |
f | query | Optional | Output format, `json` for GeoJSON or `html` for a browsable page. json |
bbox | query | Optional | Spatial filter as `minLon,minLat,maxLon,maxLat` in decimal degrees. -125,48,-122,50 |
datetime | query | Optional | Temporal filter, a single instant or an interval, in RFC 3339. 2026-01-01/2026-01-31 |
CLIMATE_IDENTIFIER | query | Optional | Filter observation collections to one station. 101AE00 |
Response fields
typestring- Always `FeatureCollection` — this is standard GeoJSON.
features[].geometryobject- Point geometry with properly formatted decimal coordinates. Use this for mapping, not the scaled properties.
features[].properties.STN_IDinteger- Internal station identifier.
features[].properties.STATION_NAMEstring- Station name, in uppercase.
features[].properties.LATITUDE / LONGITUDEinteger- Coordinates scaled by 10⁷ — `485500000` means 48.55 degrees. Divide, or use the geometry instead.
features[].properties.CLIMATE_IDENTIFIERstring- The key that links this station to the daily and hourly observation collections.
features[].properties.PROV_STATE_TERR_CODE / ENG_PROV_NAME / FRE_PROV_NAMEstring- Province code plus its English and French names.
features[].properties.ELEVATIONstring- Elevation in metres, serialised as a string.
features[].properties.TIMEZONEstring- Station timezone abbreviation such as `PST`.
features[].properties.TC_IDENTIFIER / WMO_IDENTIFIERstring- Transport Canada and World Meteorological Organization identifiers, often null.
features[].properties.NORMAL_CODE / STATION_TYPEstring- Whether climate normals are computed for the station, and its operational classification.
What you can build with the Environment Canada GeoMet API
- Find Canadian climate stations within a bounding box
- Pull historical daily or hourly observations for a station
- Feed a GIS client that already speaks OGC API - Features
- Build a bilingual weather product using the paired English and French fields
Common errors and how to fix them
Stations plot in the wrong hemisphere
`LATITUDE` and `LONGITUDE` in properties are scaled by 10⁷.
Fix: Divide by ten million, or simply use the GeoJSON `geometry`, which is already correct.
Enormous response
Collections contain thousands of features.
Fix: Always send `limit`, and filter with `bbox` or `datetime`. Requesting a whole collection is never the right move.
Unknown collection id
Collection names differ from what you might guess.
Fix: Fetch `/collections` first and use the ids it lists.
Null identifiers
Not every station has a Transport Canada or WMO identifier.
Fix: Use `CLIMATE_IDENTIFIER` as the join key — that one is always present.
Environment Canada GeoMet API — frequently asked questions
Is the Environment Canada API free?
Yes, free with no key, published under the Open Government Licence - Canada.
Why are the coordinates such large numbers?
The properties store latitude and longitude as integers scaled by ten million, an internal encoding. The GeoJSON geometry on each feature carries the ordinary decimal coordinates, so use that.
What is OGC API - Features?
An open standard for serving geospatial features over HTTP. Because ECCC implemented it, the same query grammar and existing GIS clients work here without any custom integration.
How do I get actual observations rather than station metadata?
Query the `climate-daily` or `climate-hourly` collections, filtering by the `CLIMATE_IDENTIFIER` you got from the stations collection.
Tools that pair with this API
Coordinate Converter
Convert GPS coordinates between decimal degrees, degrees-minutes-seconds and decimal minutes instantly. Paste any format like 40°26'46"N and copy the result.
GeoJSON Validator
Validate GeoJSON against RFC 7946 and get the exact JSON path of every problem: unclosed rings, swapped coordinates, missing properties and more.
CSV Column Statistics Calculator
Profile a CSV column by column: type, blanks, distinct values, min, max, mean, median, standard deviation and percentiles, plus top values — all in-browser.
Environment Canada GeoMet is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.