Home / Guides / Boards & pay
Boards & pay

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 directorSince in 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

More boards & pay guides

Run this guide with your own key

500 free API calls a month. Every example on this page works on the free plan.

Get free API key →