Check the setup
- Python 3.10 or newer
- A notebook environment such as Jupyter or Google Colab
- A free Open States API key saved in the OPENSTATES_API_KEY environment variable
State bill, legislator, and jurisdiction records for building state-level policy trackers that stay inside Open States use limits.
From source to product signal
Open States API v3 returns bills and legislators for U.S. states. Start with one jurisdiction and a small page of recent bills. Coverage and scrape lag vary by state, and this feed is not the enrolled text of record.
Install the packages, then run the notebook cell.
python -m pip install pandas requests
import os
import pandas as pd
import requests
response = requests.get(
"https://v3.openstates.org/bills",
params={
"jurisdiction": "Colorado",
"sort": "updated_desc",
"per_page": 10,
"page": 1,
},
headers={"X-API-KEY": os.environ["OPENSTATES_API_KEY"]},
timeout=30,
)
response.raise_for_status()
bills = pd.json_normalize(response.json()["results"])
bills["retrieved_at_utc"] = pd.Timestamp.now(tz="UTC")
print(bills[["identifier", "title", "latest_action_date"]].head(10))Test a useful signal
Test whether a ten-bill extract can power a focused state-policy inbox.
Open States / Plural Policy is a nonprofit source. Last verified 2026-08-17. Temporal coverage: current sessions with historical coverage by jurisdiction.