Query the filings directly
766,501 campaign-finance records from five Florida counties, 2014–2026, behind six endpoints and an MCP server. Free, no payment details, no approval queue. Give an email address and you get a key.
curl -X POST https://florida.institute/api/v1/keys \
-H 'content-type: application/json' \
-d '{"email":"you@example.com","purpose":"what you are building"}'
The key is shown once and stored only as a hash, so it cannot be recovered — only revoked and reissued. Three active keys per address.
Six calls
Authenticate with Authorization: Bearer <key>. Every response
carries a meta block with the rows read and your remaining quota.
| Endpoint | Does | Parameters |
|---|---|---|
/api/v1/counties |
What is in the database | — |
/api/v1/names |
Find how a name is actually spelled in the filings | q, kind, limit |
/api/v1/donor |
Contributions and payments involving a person or firm | name, county, limit |
/api/v1/candidate |
Everything filed by one campaign | name, county, kind, limit |
/api/v1/top |
Largest contributions or payments in a county | county, kind, limit |
/api/v1/timeline |
Money by month | county |
/api/v1/offices |
What each office raised | county, limit |
Start with names
Filings record people surname-first, in spellings you cannot guess: the Miami-Dade
mayor is filed as Cava, Daniella Levine, and one law firm appears as both
SHUTTS & BOWEN LLP and Shutts and Bowen LLP. Searches
match from the start of a name, so resolve the spelling first.
curl -H "Authorization: Bearer $KEY" \
'https://florida.institute/api/v1/names?q=SHUTTS&limit=5'
curl -H "Authorization: Bearer $KEY" \
'https://florida.institute/api/v1/donor?name=SHUTTS&county=Orange&limit=20'
MCP server
The same data is available to AI agents over the Model Context Protocol. The server runs locally and talks to this API, so an agent can ask questions in plain language and get records back.
{
"mcpServers": {
"florida-institute": {
"command": "npx",
"args": ["-y", "@florida-institute/mcp"],
"env": { "FI_API_KEY": "fi_live_..." }
}
}
}
Until the package is published, clone the repo
and point your client at mcp/remote-server.mjs with
FI_API_KEY set. It has no dependencies.
What a key allows
300 calls and 200,000 rows an hour, resetting on the hour. That is far more than interactive use needs and enough for most research; it exists to stop a runaway loop, not to ration access. If you are doing something that needs more, say so at corrections@florida.institute and the key can be raised.
There is deliberately no free-text SQL endpoint. Every query above runs against an index with a hard row cap, which is what keeps the service free to offer. Bulk analysis is better served by the database itself: the full SQLite file is published at /data/research.db.gz and you can query it locally without a key or a limit.
Using the data
These are public records, republished. Use them for anything, including commercially. Attribution is requested but not required: The Florida Institute, florida.institute.
Two cautions carry over from the research notes. Contributor and payee names are recorded inconsistently, so a total for any single spelling is a floor and a count of distinct donors is a ceiling. And a record of money is not evidence of influence: everything here was lawfully given and voluntarily disclosed.
Found an error? corrections@florida.institute. We publish corrections in full.