Ballotpedia API: List ballot measures
Lists statewide ballot measures in a US state and year, in Ballotpedia order, with election dates, topics, measure types, yes/no vote meanings and results. Years without statewide measures return an empty list.
Unofficial. Not affiliated with or endorsed by Ballotpedia.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Year, required
year Election year, for example 2024.
2024
Whole number from 1800 to 2100.
- State, required
state US state name or two-letter code, for example California.
California
Input as JSON
{ "year": 2024, "state": "California"}Output
{ "measures": [ { "link": "https://ballotpedia.org/California_Proposition_1,_Behavioral_Health_Services_Program_and_Bond_Measure_(March_2024)" , "type": "Legislatively referred state statute", "result": "approved", "topics": [ "Housing", "Healthcare facility", "Healthcare governance" ], "measure_name": "California Proposition 1", "election_date": "2024-03-05", "no_vote_means": "A \"no\" vote opposed changing the Mental Health Services Act and issuing $6.38 billion in bonds for homeless individuals and veterans.", "yes_vote_means": "A \"yes\" vote supported : renaming the Mental Health Services Act (2004) to the Behavioral Health Services Act and expanding its purpose to include substance use disorders, including for persons without a mental illness; changing how revenue from the 1% tax on income above $1 million is spent under t…", "no_vote_percentage": 49.82, "yes_vote_percentage": 50.18 }, { "link": "https://ballotpedia.org/California_Proposition_2,_Public_Education_Facilities_Bond_Measure_(2024)" , "type": "Bond issue", "result": "approved", "topics": [ "Higher education funding", "Public education funding", "Bonds" ], "measure_name": "California Proposition 2", "election_date": "2024-11-05", "no_vote_means": "A \"no\" vote opposed issuing $10 billion in bonds to fund construction and modernization of public education facilities.", "yes_vote_means": "A \"yes\" vote supported issuing $10 billion in bonds to fund construction and modernization of public education facilities.", "no_vote_percentage": 41.3, "yes_vote_percentage": 58.7 }, { "link": "https://ballotpedia.org/California_Proposition_32,_$18_Minimum_Wage_Initiative_(2024)" , "type": "Citizen-initiated state statute", "result": "defeated", "topics": [ "Minimum wage" ], "measure_name": "California Proposition 32", "election_date": "2024-11-05", "no_vote_means": "A \"no\" vote opposed this ballot initiative, thereby maintaining the existing law which set the minimum wage to $16 per hour for all employers as of January 2024.", "yes_vote_means": "A \"yes\" vote supported increasing the state minimum wage to $18 per hour by 2026 for all employers and thereafter adjusting the rate annually by increases to the cost of living.", "no_vote_percentage": 50.71, "yes_vote_percentage": 49.29 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"ballotpedia.org/list_ballot_measures","input":{"year":2024,"state":"California"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "ballotpedia.org/list_ballot_measures" , "input": { "year": 2024, "state": "California" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "ballotpedia.org/list_ballot_measures" , "input": { "year": 2024, "state": "California" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run ballotpedia.org/list_ballot_measures# with {"year":2024,"state":"California"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "state", "year" ], "properties": { "year": { "type": "integer", "maximum": 2100, "minimum": 1800, "description": "Election year, for example 2024." }, "state": { "type": "string", "description": "US state name or two-letter code, for example California." } }}Output schema
{ "type": "object", "required": [ "measures" ], "properties": { "measures": { "type": "array", "items": { "type": "object", "required": [ "measure_name", "topics", "type", "election_date", "yes_vote_means", "no_vote_means", "result", "yes_vote_percentage", "no_vote_percentage", "link" ], "properties": { "link": { "type": "string" }, "type": { "type": [ "string", "null" ] }, "result": { "enum": [ "approved", "defeated", "upcoming" ], "type": "string" }, "topics": { "type": "array", "items": { "type": "string" } }, "measure_name": { "type": "string" }, "election_date": { "type": "string", "format": "date" }, "no_vote_means": { "type": "string" }, "yes_vote_means": { "type": "string" }, "no_vote_percentage": { "type": [ "number", "null" ] }, "yes_vote_percentage": { "type": [ "number", "null" ] } }, "additionalProperties": false }, "description": "Statewide measures in the order listed by Ballotpedia." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
ballotpedia.org/list_ballot_measures- Returns
- measure name, topics, type, election date, yes/no vote meanings, result, vote percentages, link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method ballotpedia.org/list_ballot_measures with the inputs above.
Ask your agent
- What statewide ballot measures were on the ballot in Ohio in 2023, and did each one pass or fail?
- Pull up Ballotpedia's list of 2024 California propositions with what a yes vote and a no vote meant for each
- Show me every statewide measure Colorado voters decided in 2020, including topics and vote percentages
- I need a rundown of Florida's 2018 constitutional amendments: measure type, election date, and final result
- Using Ballotpedia, list the statewide ballot questions in MA for 2022 with yes/no meanings and results
See more
All Ballotpedia methodsLooks up a Ballotpedia candidate or officeholder profile by name, with election results, background and published links. An optional state narrows people with the same name; unreported details are left blank.
ballotpedia.org/get_candidateGets a country's most recent held national election or referendum on ElectionGuide, optionally for a year and election type, with turnout and published candidate, party or option results.
electionguide.org/get_election_resultsLists Oyez Supreme Court cases for a term, sorted by argument date then name. Decision dates and vote splits are blank where Oyez does not provide them.
oyez.org/list_term_casesLists US IPOs from a chosen year, newest first. Each IPO comes with its IPO price, current price and return since IPO. Coverage begins in 2019.
stockanalysis.com/list_recent_iposLists the ranked top baby names and birth counts for a U.S. birth year, nationwide or for one state.
ssa.gov/list_top_baby_namesLists GOV.UK bank holidays for a UK region and year, including substitute days and notes, plus the next upcoming holiday. Years GOV.UK does not publish return an empty list and the published years.
gov.uk/list_bank_holidaysLists a country's public holidays for a year from Nager.Date, with local names, regional coverage and holiday types.
date.nager.at/list_public_holidaysLists the Fortune 500 for a year. You can filter by industry or sector and by headquarters state. Each company comes with its public financial and company details.
fortune.com/list_fortune_500