Plinth

Developers · Public data

The Grants API

Every grant in the US grantmaking universe — about 205,000 funders and 17.9 million grants, read straight from public IRS filings — behind a small JSON API. We built it for our own grants work and opened it for anyone.

Every endpoint takes an API key. Generating one is free and takes a minute — no card — and includes 50 calls a month, enough to try the whole surface. Building something that pulls at volume is where we ask you to pay: a paid plan raises it to 10,000 calls a month. See access & limits.

Get a free API key

New · No code needed

Ask the data in plain English

Prefer not to touch the API? Ask a plain question and get a sourced answer with the chart to match, every figure traced back to the filing. Three free questions a day per visitor, then an API key.

Open the chat

Authentication

Send your key in an X-API-Key header (or as a Authorization: Bearer token — both work). Generate one from your account; it starts plinth_sk_. Keys are secrets — keep them server-side, never in browser JavaScript or a committed file.

curl -H "X-API-Key: $PLINTH_API_KEY" \
  https://data.useplinth.com/api/grants/summary

Every response carries your remaining allowance, so you can back off before you hit the wall:

X-Calls-Limit: 50
X-Calls-Remaining: 37
401
No key, or a key we don’t recognize.
402
Monthly allowance spent, or the account is inactive. The message says which.

Base URL

Everything lives under /api on this site. Responses are JSON and cached (the underlying data refreshes monthly) — cache on your side too: a repeat call is a repeat call against your allowance even when we serve it from memory.

# the whole universe, one call
curl -H "X-API-Key: $PLINTH_API_KEY" https://data.useplinth.com/api/grants/summary

Grants

All four share the same filters (below). Combine them freely.

GET/grants/summary

Aggregate totals for the filter — dollars, grant count, distinct funders and recipients — plus a year-by-year breakdown.

/api/grants/summary

GET/grants/funders

Funders ranked by giving: total amount, grant count, recipients reached, and the years they were active.

/api/grants/funders?year=2023&sort_by=amount&limit=10

GET/grants/recipients

Recipients ranked by what they received, with location and how many funders backed them.

/api/grants/recipients?location=MA&year=2023

GET/grants/transactions

Individual grant rows — funder, recipient, amount, year, subject, description.

/api/grants/transactions?location=MA&min_amt=1000000&year=2023

Filters

funder_id
EIN of the grantmaker (any format; we normalize).
recip_id
EIN of the recipient organization.
year
Filing fiscal year, e.g. 2023.
subject
Cause area (NTEE major group).
location
Recipient US state, 2-letter (e.g. MA).
min_amt / max_amt
Grant amount band, in whole dollars.
sort_by / sort_order
amount | year, with asc | desc.
page / limit
Pagination; limit up to 1000.

Organizations

GET/compliance/{ein}

Compliance snapshot: exemption subsection, deductibility, foundation type, NTEE, IRS auto-revocation status, and an OFAC (Treasury SDN) sanctions name screen — refreshed monthly, so far fresher than the 990 financial data. The OFAC field is a triage signal (entity name screen only), not a sanctions determination.

/api/compliance/043407816

GET/essentials/{ein}

Core profile — name, location, NTEE classification, and a financials summary.

/api/essentials/043407816

GET/premier/{ein}

Deeper profile — full financials plus the resolved geographic footprint.

/api/premier/043407816

Response shape

Every response is a small envelope. List endpoints return hits (the total for your filter) plus a results array; /grants/summary returns summary and by_year.

{
  "code": 200,
  "message": "Request was processed successfully!",
  "hits": 143375,
  "page": 1,
  "limit": 10,
  "results": [
    {
      "funder_ein": "...",
      "funder_name": "FIDELITY INVESTMENTS CHARITABLE GIFT FUND",
      "total_amount": 9310839472,
      "grant_count": 72328,
      "recipient_count": 41207,
      "first_fiscal_year": 2017,
      "last_fiscal_year": 2024
    }
  ]
}

Access & limits

What’s free, and where the paid line is — so a 402 never surprises you.

REST endpoints (above) — 50/month on a free key
Every /grants/* and org endpoint counts one call, whatever the page size. A free key is enough to evaluate the API and run something small; the For consultants plan raises it to 10,000 a month, which is the tier for anything that syncs, backfills or runs on a schedule. Need more than that, or a bulk extract? Talk to us.
Plain-English analysis — three free a day, then a key
The Ask-the-datachat gives each visitor three free questions per day; beyond that it needs a paid key. It’s metered separately from your API calls — running out of one doesn’t touch the other.
Ad-hoc SQL (/sql) — paid only
Arbitrary read-only SQL across the warehouse (the power behind cross-org questions) requires a paid key — there’s no free SQL tier. Available on a paid plan or via the Plinth × Claude connector. See pricing.

Figures come from public IRS filings and lag 12–24 months; the data refreshes monthly.