datagrit

datagrit › Company data › IRS 990 Nonprofit Officers and Compensation

Company data

IRS 990 Nonprofit Officers and Compensation

Named officers, directors and key employees with pay, hours and titles from IRS e-filed 990, 990-EZ and 990-PF returns.

Run it on Apify StoreUse the APIfrom $3.50 per 1,000 results + $10 per run · no code needed
from $3.50 per 1,000 results + $10 per runpay only for person rows you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.3updated 2026-09-30

IRS 990 Nonprofit Officers and Compensation reads the official IRS e-filed returns (Form 990, 990-EZ and 990-PF) of US tax-exempt organizations and returns one row per person: the officers, directors, trustees, key employees and highest-paid employees the return lists, with title, weekly hours, role flags and the pay the organization reports for them. Form 990-PF and Form 990-EZ also give the five highest-paid employees and contractors, which is where the large salaries of private foundations such as the Gates Foundation sit. Look up organizations by EIN or by name, filter by role or minimum pay, and export the result as JSON, CSV or Excel, call it through the Apify API, or plug it into n8n, Make and AI agents through MCP.

The data comes straight from the IRS TEOS e-file archives, not from a third-party search API, so a return is available as soon as the IRS publishes it. When an organization filed an amended return for a period, the latest one is used.

Why use IRS 990 Nonprofit Officers and Compensation?

Output fields

Each row describes one person on one return: organization identity (ein, organizationName, city, state, website, revenue and expenses), the return (formType, taxYear, taxPeriodEnd, filedAt, amendedReturn, filingObjectId), the person (personName, title, role, role flags, averageHoursPerWeek) and pay (compensationUsd, relatedOrgCompensationUsd, otherCompensationUsd, totalCompensationUsd). Form 990 filers that complete Schedule J also get baseSalaryUsd, bonusUsd, deferredCompensationUsd and nontaxableBenefitsUsd; these are the amounts paid by the filing organization itself, while pay from related organizations is in relatedOrgCompensationUsd. Independent contractors carry servicesDescription. Fields the form does not report are null, never an empty string.

Form 990-EZ and the officer list of Form 990-PF do not classify roles, so those rows have role set to officer-director-or-key-employee and the role flags are null. The five highest-paid employees listed on Form 990-PF and Form 990-EZ (those paid over 100,000 USD) have role highest-compensated-employee and isHighestCompensated true. Small organizations filing Form 990-EZ usually enter "None" there, so most 990-EZ returns give only officers, directors and key employees. The status message at the end of a run shows how many filings were read and how many rows carry a pay amount.

Is it legal to scrape this data?

The IRS publishes these returns as public records. The Actor reads only public information and does not log in or bypass access controls. You are responsible for using the data in line with applicable laws (including data protection rules) and the source's terms. If you find an issue, open it in the Issues tab; problems are answered within one business day.

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
querystringThe entry from the organizations input this row belongs to (EIN or name as you typed it).53-0196605
foundbooleanFalse only on the single status row emitted when a query returns no people; the run status message says why.true
einstringNine-digit employer identification number of the filing organization, without a dash.530196605
organizationNamestringLegal name of the organization as printed on the return.AMERICAN NATIONAL RED CROSS & ITS CONSTITUENT CHAPTERS AND BRANCHES
organizationCitystringCity of the organization address on the return.WASHINGTON
organizationStatestringTwo-letter state code of the organization address (province for foreign addresses).DC
formTypestringIRS return type the row was read from: 990, 990EZ or 990PF.990
taxYearnumberCalendar year in which the tax period ended.2024
taxPeriodEndstringLast day of the tax period covered by the return (YYYY-MM-DD).2024-06-30
filedAtstringTimestamp the return was e-filed. When an amended return exists for the same period, the latest one is used.2025-04-28T14:55:29-05:00
amendedReturnbooleanTrue when the return the row comes from is marked as amended.false
personNamestringName of the officer, director, trustee, key employee or contractor as reported.GAIL MCGOVERN
titlestringTitle or position as reported (null for independent contractors).PRESIDENT & CEO
rolestringPrimary role: officer, director-trustee, key-employee, highest-compensated-employee, former, independent-contractor, officer-director-or-key-employee (the officer lists of 990-EZ and 990-PF do not split roles) or other. Rows from the five highest-paid employees list of 990-PF and 990-EZ carry highest-compensated-employee.officer
isOfficerbooleanOfficer box checked on Form 990 Part VII (null on the officer lists of 990-EZ and 990-PF, which do not report it).true
isDirectorOrTrusteebooleanTrustee or director box checked on Form 990 Part VII (null on 990-EZ and 990-PF).true
isKeyEmployeebooleanKey employee box checked on Form 990 Part VII (null on 990-EZ and 990-PF).false
isHighestCompensatedbooleanHighest compensated employee box checked on Form 990 Part VII; true for the five highest-paid employees on Form 990-PF and 990-EZ; null on the officer lists of 990-EZ and 990-PF.false
isFormerbooleanFormer officer, director or trustee box checked on Form 990 Part VII (null on 990-EZ and 990-PF).false
averageHoursPerWeeknumberAverage weekly hours devoted to the position as reported.60
compensationUsdnumberCompensation from the filing organization: reportable compensation (W-2 box 5 or 1099 box 7) on Form 990, the compensation column on 990-EZ and 990-PF.1296862
relatedOrgCompensationUsdnumberReportable compensation from related organizations (Form 990 only).0
otherCompensationUsdnumberOther compensation: benefits and deferred pay on Form 990; employee benefit plan contributions plus expense allowances on 990-EZ and 990-PF.16743
totalCompensationUsdnumberSum of the three compensation amounts above; null when the return reports none of them.1313605
baseSalaryUsdnumberBase compensation paid by the filing organization itself, from Schedule J (Form 990 filers that must complete it, otherwise null). Pay from related organizations is not included: it appears in relatedOrgCompensationUsd.685738
bonusUsdnumberBonus and incentive compensation paid by the filing organization, from Schedule J.600000
deferredCompensationUsdnumberDeferred compensation paid by the filing organization, from Schedule J.14850
nontaxableBenefitsUsdnumberNontaxable benefits provided by the filing organization, from Schedule J.1893
servicesDescriptionstringDescription of services for independent contractors (Form 990 Part VII Section B; type of service on 990-PF Part VII-B); null for other roles.Consulting
organizationTotalRevenueUsdnumberTotal revenue of the organization for the tax period.3804377344
organizationTotalExpensesUsdnumberTotal expenses of the organization for the tax period.3530489124
organizationWebsitestringWebsite address printed on the return, when given.WWW.REDCROSS.ORG
filingObjectIdstringIRS TEOS object identifier of the return; together with the person it is the unique row key.202511189349301681
sourceUrlstringPublic page of the full return for the organization and filing.https://projects.propublica.org/nonprofits/organizations/530196605/2025111893493
scrapedAtstringISO 8601 timestamp of extraction.2026-09-30T08:00:00.000Z

Sample record

{
  "query": "53-0196605",
  "found": true,
  "ein": "530196605",
  "organizationName": "AMERICAN NATIONAL RED CROSS & ITS CONSTITUENT CHAPTERS AND BRANCHES",
  "organizationCity": "WASHINGTON",
  "organizationState": "DC",
  "formType": "990",
  "taxYear": 2024,
  "taxPeriodEnd": "2024-06-30",
  "filedAt": "2025-04-28T14:55:29-05:00",
  "amendedReturn": false,
  "personName": "GAIL MCGOVERN",
  "title": "PRESIDENT & CEO",
  "role": "officer",
  "isOfficer": true,
  "isDirectorOrTrustee": true,
  "isKeyEmployee": false,
  "isHighestCompensated": false,
  "isFormer": false,
  "averageHoursPerWeek": 60,
  "compensationUsd": 1296862,
  "relatedOrgCompensationUsd": 0,
  "otherCompensationUsd": 16743,
  "totalCompensationUsd": 1313605,
  "baseSalaryUsd": 685738,
  "bonusUsd": 600000,
  "deferredCompensationUsd": 14850,
  "nontaxableBenefitsUsd": 1893,
  "servicesDescription": "Consulting",
  "organizationTotalRevenueUsd": 3804377344,
  "organizationTotalExpensesUsd": 3530489124,
  "organizationWebsite": "WWW.REDCROSS.ORG",
  "filingObjectId": "202511189349301681",
  "sourceUrl": "https://projects.propublica.org/nonprofits/organizations/530196605/202511189349301681/full",
  "scrapedAt": "2026-09-30T08:00:00.000Z"
}

Input

FieldNameTypeWhat it does
organizations requiredOrganizations (EIN or name)arrayNonprofits to look up. Each entry is either a 9-digit EIN (with or without the dash, e.g. 53-0196605) or part of an organization name (at least 3 characters, case-insensitive, matched against the name on the IRS filing index). A name can match many organizations, so combine it with Maximum results.
filingYearsIRS filing years to searcharrayYears in which the returns were e-filed with the IRS (not the tax year). Supported: 2024 and later. Leave empty to search the current and the previous filing year, which covers the latest return of almost every organization. Each year adds a 14-28 MB index download and about 15 seconds to the run. Tax years from about 2022 on are covered; older returns are not available through the IRS indexes this Actor reads.
onlyLatestTaxYearOnly the latest tax year per organizationbooleanReturn people from the most recent tax period found for each organization. Turn off to get every period found in the selected filing years, for example to see how pay changed between years.
taxYearsTax yearsarrayOnly returns whose tax period ends in one of these years, e.g. [2023]. Leave empty for any year. Only years covered by the selected filing years can match (2022 and later).
formTypesForm typesarrayWhich IRS forms to read. Allowed: 990 (full return: roles, related-organization pay, Schedule J breakdown, contractors), 990EZ (small organizations: officers, directors, key employees and, if listed, the five highest-paid employees and contractors), 990PF (private foundations: officers, trustees, the five highest-paid employees and contractors). Leave empty for all three.
rolesRolesarrayKeep only people with one of these roles. Allowed: officer, director-trustee, key-employee, highest-compensated-employee, former, independent-contractor. Form 990 reports all six; Form 990-PF and Form 990-EZ report only highest-compensated-employee and independent-contractor, so setting this excludes their officers, directors and trustees. Leave empty for everyone.
minCompensationUsdMinimum total compensation (USD)integerKeep only people whose total reported compensation is at least this amount. 0 keeps everyone, including unpaid board members.
includeContractorsInclude independent contractorsbooleanAdd the five highest-paid independent contractors listed on Form 990 Part VII Section B, Form 990-EZ Part VI line 51 or Form 990-PF Part VII-B, with the services they provided. Selecting the independent-contractor role turns this on.
maxItemsMaximum resultsintegerStop after this many rows in total across all organizations.
proxyConfigurationProxy configurationobjectOptional proxy. Leave disabled: the IRS site does not block datacenter traffic, and a residential proxy only raises the platform cost of the run.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~irs-990-officer-compensation/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"organizations":["53-0196605"],"maxItems":50}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/irs-990-officer-compensation').call({
  "organizations": [
    "53-0196605"
  ],
  "maxItems": 50
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/irs-990-officer-compensation").call(run_input={
  "organizations": [
    "53-0196605"
  ],
  "maxItems": 50
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Frequently asked questions

How far back does the data go?

Returns e-filed in 2024 and later, which means tax years from about 2022. Organizations that file on paper or only a Form 990-N postcard have no return to read, and a lookup by EIN for them returns the `found: false` row; the status message at the end of the run says why a query returned nothing.

How fresh is the data?

Every run reads the IRS index and archives live. The IRS adds new e-filed returns continuously; an organization's latest return can lag its filing by a few weeks.

Why is a person's pay 0?

Unpaid board members are reported with 0. A missing value (`null`) means the form did not report that amount.

Why does a name return other organizations too?

A name matches any organization whose name contains it: "Gates Foundation" also returns RED GATES FOUNDATION and MARSHALL GATES FOUNDATION. Use a longer part of the name or the EIN to get one organization.

Why do I get fewer filings than expected?

A few index entries have no file in the IRS archive yet; the status message counts them.

Can I schedule runs?

Yes, use Apify schedules or call the Actor from your own workflow.

Something looks wrong.

Open an issue with the input you used; layout changes at the source are fixed quickly.

Try IRS 990 Nonprofit Officers and Compensation on Apify

Related Actors

Company data

French Company Finder - Sirene Financials

French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.

from $5.60 / 1,000 results
Company data

Poland KRS New Company Registrations Feed

Newly registered Polish companies, foundations and associations from the official KRS court register: NIP, address, PKD, capital, email, with filters and change detection.

from $10.50 / 1,000 results