See The Money publishes Arizona campaign finance data through a free, read-only API.
Every endpoint is a plain HTTP GET that returns JSON — no key, token, or
registration is required, and cross-origin requests are allowed, so you can call it
from scripts, spreadsheets, notebooks, or your own website.
The API is designed to be easy for AI assistants to use. Request
http://spotlightv2.arizona.vote/api to receive a machine-readable directory of every endpoint,
its parameters, and the conventions below. A typical flow: look up an entity id with
/api/entities/search, then pull its details, transactions, and filed
reports with the committee endpoints.
| Convention | Detail |
|---|---|
| Paging | Paged endpoints accept page (1-based, default 1) and pageSize (default 100, maximum 500) and respond with { page, pageSize, totalCount, data }. |
| Election cycles | cycleId is the system id from /api/cycles. Omit it to search every cycle on record. |
| Entity groups | entityGroupNumber values: 1 Candidate, 2 PAC, 3 Party, 4 Organization, 5 Independent Expenditure, 6 Proposition, 7 Individual, 8 Business. |
| Dates and amounts | Dates use YYYY-MM-DD. Amounts are decimal dollars; expenses are reported as positive amounts with their transaction type. |
Election cycles with their system ids, names, and date ranges. Use the cycleId values with every other endpoint.
curl "http://spotlightv2.arizona.vote/api/cycles"
Offices sought by candidates, each with its office type. Use officeID and officeTypeID with /api/transactions/search.
curl "http://spotlightv2.arizona.vote/api/offices"
Political parties. Use partyID with /api/transactions/search.
curl "http://spotlightv2.arizona.vote/api/parties"
Searches candidates, committees, individuals, and businesses by name. If the text starts
with digits it matches filer ids instead. The returned entityId is the id
the committee endpoints take.
curl "http://spotlightv2.arizona.vote/api/entities/search?name=smith"
[
{ "entityId": 12345, "entityGroupNumber": 1, "entityGroupType": "Candidate", "name": "John Smith" },
{ "entityId": 67890, "entityGroupNumber": 7, "entityGroupType": "Individual", "name": "Jane Smith" }
]
A committee's registration details — name, filer type, office sought, party, chairman, treasurer, and addresses — plus its lifetime cash on hand (income less expenses across every filing).
curl "http://spotlightv2.arizona.vote/api/committees/12345"
The committee's transactions, newest first: contributions received, expenses paid, and independent expenditures made by or about the committee. All parameters are optional.
curl "http://spotlightv2.arizona.vote/api/committees/12345/transactions?cycleId=44&page=1&pageSize=100"
The committee's publicly filed reports, including links to the filed documents.
curl "http://spotlightv2.arizona.vote/api/committees/12345/reports"
Searches every public transaction. All parameters are optional and combine with each other; supply as many or as few as you need.
| Parameter | Meaning |
|---|---|
filerId | Exact filer id (from /api/entities/search). |
filerName | Filer name text match; ignored when filerId is supplied. |
filerTypeId | 1 Candidate, 2 PAC, 3 Party. |
officeTypeId / officeId | Office sought (from /api/offices). |
partyId | Party (from /api/parties). |
cycleId | Election cycle (from /api/cycles). |
startDate / endDate | Transaction date range (both required together; ignored when cycleId is set). |
contributorName | Contributor name text match. |
state / city / employer / occupation | Contributor attributes; state is the two-letter code. |
minAmount / maxAmount | Amount range in dollars. |
includeIncome | Include contributions (default true). |
includeExpense | Include expenses (default false). |
includeIndependentExpenditures | Include independent expenditures (default false). When set, filer, office, and party selections also match the committee the expenditure was about. |
page / pageSize | Paging; see conventions. |
Contributions to a specific committee during the 2026 cycle:
curl "http://spotlightv2.arizona.vote/api/transactions/search?filerId=12345&cycleId=44"
Everything a contributor gave across all cycles:
curl "http://spotlightv2.arizona.vote/api/transactions/search?contributorName=Jane%20Smith"
Independent expenditures about gubernatorial candidates in the 2026 cycle:
curl "http://spotlightv2.arizona.vote/api/transactions/search?includeIndependentExpenditures=true&includeIncome=false&officeId=1&cycleId=44"
The data comes from campaign finance filings with the Arizona Secretary of State and refreshes nightly. Please cache what you fetch, keep request rates reasonable, and use paging rather than requesting very large result sets repeatedly. The API is provided as-is for transparency and research.