Directors and board members by company
List a company's board from its proxy statement with director pay, cash fees, age and tenure, then compare board size and pay across companies.
The proxy statement (DEF 14A) has two places that describe the board: the Director Compensation Table, with each non-employee director's fees and stock awards, and the director biographies, with age and the year each director joined. /v1/directors combines both into one list per company.
The response
{"cik": 1045810, "accessionNo": "0001045810-26-000036", "directors": [
{"name": "Tench Coxe", "totalCompensation": 363809.0, "feesEarned": 85000.0, "age": 68, "directorSince": 1993},
{"name": "Robert K. Burgess", "totalCompensation": 342559.0, "feesEarned": 63750.0}
]}
feesEarned is cash (retainers and committee fees). The rest of totalCompensation is mostly stock awards. age and directorSince come from the biographies and are left out when they cannot be matched to the name in the pay table.
The script
import os
import statistics
import requests
BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}
YEAR = 2026
def board(ticker):
r = requests.get(f"{BASE}/v1/directors", params={"ticker": ticker}, headers=HEADERS, timeout=120)
r.raise_for_status()
return r.json()["directors"]
# 1. one board in detail
print("NVDA board, longest serving first")
print(f" {'director':<22}{'since':>6}{'age':>5}{'cash fees':>11}{'total':>10}")
for d in sorted(board("NVDA"), key=lambda d: d.get("directorSince") or 9999):
print(f" {d['name']:<22}{d.get('directorSince') or '':>6}{d.get('age') or '':>5}"
f"{d['feesEarned']:>11,.0f}{d['totalCompensation']:>10,.0f}")
# 2. several boards side by side
print(f"\n{'ticker':<8}{'directors':>10}{'median pay':>12}{'cash share':>12}{'median tenure':>15}")
for t in ["NVDA", "AAPL", "MSFT", "JNJ", "WMT"]:
ds = board(t)
pay = [d["totalCompensation"] for d in ds if d.get("totalCompensation")]
cash = statistics.median(d["feesEarned"] / d["totalCompensation"] for d in ds if d.get("totalCompensation") and d.get("feesEarned") is not None)
since = [YEAR - d["directorSince"] for d in ds if d.get("directorSince")]
tenure = f"{statistics.median(since):.0f} yrs ({len(since)}/{len(ds)})" if since else "n/a"
print(f"{t:<8}{len(ds):>10}{statistics.median(pay):>12,.0f}{cash:>12.0%}{tenure:>15}")
Output
NVDA board, longest serving first
director since age cash fees total
Tench Coxe 1993 68 85,000 363,809
Harvey C. Jones 1993 73 85,000 363,809
A. Brooke Seawell 1997 78 85,000 363,809
Mark A. Stevens 2008 66 85,000 363,809
Dawn Hudson 2013 68 85,000 363,809
John O. Dabiri 2020 46 85,000 363,809
Aarti Shah 2020 61 85,000 363,809
Melissa B. Lora 2023 63 85,000 363,809
Robert K. Burgess 63,750 342,559
Persis S. Drell 85,000 363,809
Stephen C. Neal 85,000 363,809
Ellen Ochoa 42,500 321,309
ticker directors median pay cash share median tenure
NVDA 12 363,809 23% 16 yrs (8/12)
AAPL 7 445,373 30% 8 yrs (6/7)
MSFT 11 392,500 34% n/a
JNJ 13 347,158 37% 7 yrs (11/13)
WMT 12 361,439 36% n/a
Reading it
- Employee directors are not in the list. The CEO and other executives who sit on the board are paid as executives, so they appear in executive compensation, not in the Director Compensation Table.
- Board pay is mostly equity. At NVIDIA cash fees are about a quarter of director pay; at the other four companies roughly a third.
- Lower pay often means a partial year. Two NVIDIA directors earned exactly half and three quarters of the standard $85,000 cash retainer, the usual sign of prorated service for directors who joined or left during the year. Check the proxy footnotes to confirm.
- Tenure coverage varies. Biographies are formatted freely, so age and start year are found for most but not all directors (8 of 12 at NVIDIA; none at Microsoft and Walmart, whose biographies use a layout the parser does not match yet). The script shows the coverage next to each median so the gaps stay visible.
Variations
- Board refreshment. Count directors with
directorSincein the last three years to see how fast a board turns over. - Interlocks. Collect director names across many companies and look for people on several boards. Normalize names first (middle initials vary between proxies).
- Year over year. The response carries the proxy's
accessionNo. Keep it with each snapshot to track changes after every annual meeting.
Next steps
- Directors & Board Members API.
- Compare executive compensation across companies.
- Shareholder meetings API for director election results.
- DEF 14A dataset and the API reference.