Next free-source hunt
We check for new free data every weekday.
Datasets / Agriculture & Food
open.canada.ca/

AAFC Annual Crop Inventory

Freeauth: noneCustom#agriculture-food#geospatial#historical-data#alt-data#commodities✓ verified Nov 1, 2026

AAFC Annual Crop Inventory

Agriculture and Agri-Food Canada publishes annual crop and land-cover classifications as GeoTIFF files and ArcGIS ImageServer services, with pixel class codes, labels, colours and service metadata. The keyless REST service supports image, catalogue, metadata, sampling and mensuration requests.

Required Attribution:

Contains information licensed under the Open Government Licence – Canada.

Coverage

The inventory begins with the Prairie provinces in 2009 and 2010 and expands to a national inventory from the 2011 growing season; the 2025 service covers all provinces and Yukon. Resolution is 30 m from 2011 onward and 56 m for 2009-2010, with an overall target accuracy of at least 85% stated by the provider.

Verdict

This is a field-scale crop-location and land-cover signal for mapping acreage patterns and sampling conditions by crop class. It is an annual classified raster, not a live crop-progress or yield feed. Classification errors, mixed pixels, changing training data and class definitions can affect year-to-year comparisons. Early years cover only the Prairies at coarser resolution, and the latest service extends only to Yukon rather than all northern territories.

Get the free weekly email

Free weekly email of newly verified free data. Unsubscribe by emailing us.

Use in your agent

Sample AAFC 2025 crop classes into pandas and Parquet. Checked against the provider's documentation on Nov 1, 2026.

Raw skill file (/skills/aafc-annual-crop-inventory.md)Also in our MCP server: call get_ingestion_skill with {"slug": "aafc-annual-crop-inventory"}.

Access

  • No account or key. The ArcGIS ImageServer getSamples endpoint and crop-class CSV are public.

Request

bash
curl --get 'https://agriculture.canada.ca/imagery-images/rest/services/annual_crop_inventory/2025/ImageServer/getSamples' --data-urlencode 'geometry={"points":[[-106,52],[-97,50],[-113,53],[-79,44],[-72,46]],"spatialReference":{"wkid":4326}}' --data-urlencode 'geometryType=esriGeometryMultipoint' --data-urlencode 'returnFirstValueOnly=true' --data-urlencode 'f=json'

Format

ArcGIS REST JSON samples with input location, class value, source raster ID and resolution; a separate CSV maps numeric codes to English and French class labels and colours.

Load into pandas and Parquet

Needs Python 3 with requests, pandas and pyarrow.

python
"""Sample five coordinates from the AAFC 2025 crop inventory -> pandas -> Parquet."""
import io
import requests
import pandas as pd

SERVICE = "https://agriculture.canada.ca/imagery-images/rest/services/annual_crop_inventory/2025/ImageServer/getSamples"
CLASSES = "https://agriculture.canada.ca/atlas/data_donnees/annualCropInventory/supportdocument_documentdesupport/aci_crop_classifications_iac_classifications_des_cultures.csv"
params = {
    "geometry": '{"points":[[-106,52],[-97,50],[-113,53],[-79,44],[-72,46]],"spatialReference":{"wkid":4326}}',
    "geometryType": "esriGeometryMultipoint",
    "returnFirstValueOnly": "true",
    "f": "json",
}
r = requests.get(SERVICE, params=params, timeout=60)
r.raise_for_status()
samples = pd.json_normalize(r.json()["samples"])
samples["Code"] = pd.to_numeric(samples["value"])
c = requests.get(CLASSES, timeout=60)
c.raise_for_status()
classes = pd.read_csv(io.BytesIO(c.content), encoding="latin-1")[["Code", "Label"]]
df = samples.merge(classes, on="Code", how="left")
df.to_parquet("aafc_crop_inventory_samples.parquet", index=False)
print(len(df), "samples", "; ".join(f'{int(x.Code)}={x.Label}' for x in df.itertuples()))

Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 5 samples 34=Urban/developed; 158=Soybeans; 146=Spring wheat; 122=Pasture/forages; 146=Spring wheat

Limits

  • Rate limit: Not stated.
  • The example samples five coordinates; use tiled raster downloads or bounded service requests for area analysis.
  • The product is annual rather than real time.

Quirks

  • getSamples may return sample rows in an order different from the input points; use locationId to restore input order.
  • Join the numeric value to the classification CSV before interpreting a pixel.
  • The source classification CSV is bilingual and was decoded as Latin-1 in the checked environment.

Terms and attribution

  • Open Government Licence – Canada permits commercial and non-commercial reuse under its conditions.
  • Acknowledge the information source and, where possible, link to the licence.

Sources

Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer