Plinth for spreadsheets
=PLINTH(range, field)
Every grant itemized in a US Form 990, 990-EZ or 990-PF, as one formula. A column of EINs or organization names in, a column of answers out: what a funder gave and to whom, who funds a nonprofit, the latest filed financials. The grant graph is on a free key. Figures are read from named filings, FY2017 to FY2023 complete.
Google Sheets
Copy the template sheet. The script comes with the copy, the Examples tab already has live formulas, and the Fields tab lists everything the function answers. Then Extensions → Plinth → Open Plinth and paste a key.
The one-time authorization asks for three things: the current spreadsheet, requests to data.useplinth.com, and the sidebar. Your key is stored in your own Google account, never in the sheet, so sharing a sheet never shares a key.
In a cell
=PLINTH(A2:A50, "grants_made_total")- every itemized grant each funder in A2:A50 made, all years
=PLINTH(A2:A50, "grants_made_total", 2023)- the same, filing year 2023 only
=PLINTH(A2, "top_funder")- the funder that reported the most dollars to the organization in A2
=PLINTH(A2, "grants_to_total", , "043407816")- what the funder in A2 reported granting to that recipient
=PLINTH(A2:A50, "total_revenue")- latest filed revenue (Plus or Pro key)
=PLINTH(A2:A50, "compliance")- clear, review, adverse or not_screened (Pro key)
The range may hold EINs, with or without the hyphen and with a leading zero lost to the spreadsheet, or organization names. A name resolves when exactly one organization files under it; otherwise the sidebar's Resolve names turns the column into EINs through the keyless search and notes what each matched. One API call per 50 rows, so a 500-row column is ten calls.
A cell that is not an answer is a marker, never a blank or a zero:
#UPGRADEthe field needs a higher plan than this key#SIGNINno key saved; open the sidebar#UNRESOLVEDno organization files under exactly this name#AMBIGUOUSseveral do; the note names them, or add the EIN#BUDGETthis fill costs more calls than remain today#CAPPEDthe Pro compliance allowance is spent for today#NOTFOUNDno filing or IRS record for this EIN#ERRORthe read failed; the cell is not an answer
Fields
The same list the function offers as autocomplete and GET /api/v1/batch/fields serves. “Year” says whether the optional third argument filters the grants or is ignored because the field reads the latest filing.
Identity
| Field | Needs | Year | What it is |
|---|---|---|---|
name | Free | ignored | Organization name as filed on its latest return, or in the IRS Business Master File when it does not e-file. |
state | Free | ignored | Two-letter state as filed. |
url | Free | ignored | The organization's public page on data.useplinth.com, every figure linked to its filing. |
city | Plus or Pro | ignored | City from the IRS Business Master File. |
zip | Plus or Pro | ignored | Five-digit ZIP as filed. |
Grants made
| Field | Needs | Year | What it is |
|---|---|---|---|
grants_made_total | Free | filters | Sum of the itemized grants this organization reported making, whole dollars, over every filing year we hold or the one year given. |
grants_made_count | Free | filters | Number of itemized grant lines this organization reported making. |
recipients_count | Free | filters | Distinct recipient organizations with a resolved EIN. Grants to individuals and unresolved names are not counted. |
grants_made_first_year | Free | ignored | Earliest filing year with an itemized grant from this organization. |
grants_made_last_year | Free | ignored | Latest filing year with an itemized grant from this organization. |
top_recipient | Free | filters | The recipient that received the most dollars from this organization, by name where we can resolve one. |
Grants received
| Field | Needs | Year | What it is |
|---|---|---|---|
grants_received_total | Free | filters | Sum of the grants other filers reported making to this organization, whole dollars. Only grants itemized on a funder's return appear. |
grants_received_count | Free | filters | Number of grant lines other filers reported making to this organization. |
funders_count | Free | filters | Distinct funders that reported a grant to this organization. |
top_funder | Free | filters | The funder that reported the most dollars to this organization. |
Between two organizations
| Field | Needs | Year | What it is |
|---|---|---|---|
grants_to_total+ recipient EIN | Free | filters | Dollars this organization reported granting to the organization in the `to` argument. The row's organization is the funder; `to` is the recipient. |
grants_to_count+ recipient EIN | Free | filters | Grant lines from this organization to the organization in `to`. |
Classification
| Field | Needs | Year | What it is |
|---|---|---|---|
ntee_code | Plus or Pro | ignored | NTEE code from the Business Master File. Blank where the IRS carries none, which is common. |
cause | Plus or Pro | ignored | The NTEE major group as a cause label. |
subsection | Plus or Pro | ignored | Exempt subsection, decoded (for example 501(c)(3)). |
foundation_type | Plus or Pro | ignored | Foundation status decoded from the BMF: public charity, private foundation, supporting organization and so on. The field a grantmaker checks before deciding whether expenditure responsibility applies. |
ruling_year | Plus or Pro | ignored | Year the IRS recognized the exemption. |
Latest filing
| Field | Needs | Year | What it is |
|---|---|---|---|
tax_year | Plus or Pro | ignored | Fiscal year of the latest return we have parsed. The year every financial field below belongs to. |
total_revenue | Plus or Pro | ignored | Total revenue on the latest return, whole dollars. |
total_expenses | Plus or Pro | ignored | Total expenses on the latest return, whole dollars. |
net_assets | Plus or Pro | ignored | Net assets or fund balances at year end on the latest return. |
grants_paid | Plus or Pro | ignored | Grants and contributions paid, the filer's own total line on the latest return. Compare with grants_made_total, which sums the itemized grant lines. |
mission | Plus or Pro | ignored | Mission statement as filed. |
Compliance
| Field | Needs | Year | What it is |
|---|---|---|---|
compliance | Pro | ignored | The headline of the compliance screen: clear, review, adverse or not_screened, with the screens that fired in the note. Spends one screen per distinct EIN from the Pro daily compliance allowance; rows past it answer `capped`. A screen that did not run is never reported clear. |
Excel
The same function as an Office add-in, typed =PLINTH.GET(range, field) because Excel prefixes every custom function with its add-in name, with a task pane for sign-in, Fill and Resolve names. Until it is listed on AppSource it installs by sideloading the manifest, which takes a minute and works on Excel for the web, Mac and Windows.
- Download the manifest.
- In Excel: Insert → Add-ins → My Add-ins → Upload My Add-in (web and Mac). On Windows, put the file in a shared folder and add that folder under File → Options → Trust Center → Trusted Add-in Catalogs.
- Open the Plinth pane from the Home tab and paste a key. The key is stored by Office for this add-in, never in the workbook.
Behind it
Both add-ins call POST /api/v1/batch, which answers one field for each of up to 500 organizations in order and is documented with the rest of the Grants API. Anything you can do in a cell you can do from a script.
Every figure is read from a named IRS filing and dated to its fiscal year. The IRS releases e-file data 12 to 24 months after the year ends. Funding relationships are reported as association, never as causation.