Check the Setup
- Python 3.10 or newer
- A notebook environment such as Jupyter or Google Colab
- An internet connection
Individual councillor votes, agenda descriptions, decisions, and meeting timestamps for building voting-bloc and policy-topic analysis tools.
Report a ProblemFrom Source to Product Signal
Start with one meeting date and a small API page of individual votes. Meeting minutes remain the official record, excluded vote types reduce coverage, and consent votes may be entered after a meeting.
Install the packages, then run the notebook cell.
python -m pip install pandas requests
import pandas as pd
import requests
url = "https://opendata.vancouver.ca/api/explore/v2.1/catalog/datasets/council-voting-records/records"
response = requests.get(
url,
params={"limit": 100, "order_by": "vote_date DESC"},
timeout=30,
)
response.raise_for_status()
votes = pd.json_normalize(response.json()["results"])
columns = [
"vote_number",
"vote_date",
"agenda_description",
"council_member",
"vote",
"decision",
]
print(votes[columns].head())Test a Useful Signal
Test whether individual votes can support a bounded councillor-similarity view.
City of Vancouver is a government source. Last verified 2026-09-03. Temporal coverage: 2016-present.