All Posts
TutorialExecutive Officers APIExecutives APICEO dataForm 4Section 16DEF 14ACorporate OfficersSEC API

Executive Officers API and Executives API: A Developer Guide

Get a company's current CEO and executive officers, with titles, from an API. How the StockFit Executive Officers API is built from SEC Form 3/4/5 insider filings, with real examples.

Published May 29, 202610 min readStockFit Engineering
Executive Officers API and Executives API: A Developer Guide

The StockFit Executive Officers API answers a deceptively simple question: who currently runs this company? One call returns the CEO and the active executive officers for a US-listed issuer, each with a title and the dates we last saw them in an SEC filing. This post walks the endpoint end to end, shows verbatim production responses, and explains how it is built, because the obvious way to get this data does not actually work.

Every JSON block below is a live response from the production API. The interesting part is the sourcing: instead of scraping proxy statements, the Executive Officers API is reconstructed from SEC Form 3, 4, and 5 insider filings, which turns out to be far more complete and far more current. More on why further down.

What the Executive Officers API returns

The endpoint lives at /api/executives/officers and takes a single symbol parameter. It returns an array of the company's current executive officers: the principal CEO, any divisional CEOs, and the rest of the named executive officers, sorted with the CEO first. It is available on the Stock and Professional tiers.

Each officer object has five fields:

  • name — the officer's name in normal "First Last" display form.
  • role — one of ceo, ceo-divisional, or officer (explained below).
  • title — the title exactly as disclosed on the SEC filing, for example Chief Executive Officer or EVP, Chief Financial Officer.
  • firstSeen — the earliest SEC filing date on which this person appears as an officer (YYYY-MM-DD).
  • lastSeen — the most recent SEC filing date on which they appear. This is the activity signal used to drop people who have left.

Quickstart: get the officers for a ticker

Call /api/executives/officers with a ticker. Here is Apple:

bash
curl 'https://api.stockfit.io/v1/api/executives/officers?symbol=AAPL' \
  -H 'Authorization: Bearer $STOCKFIT_API_KEY'
json
[
  { "name": "Timothy Cook",     "role": "ceo",     "title": "Chief Executive Officer",      "firstSeen": "2021-08-24", "lastSeen": "2026-04-03" },
  { "name": "Ben Borders",      "role": "officer", "title": "Principal Accounting Officer",  "firstSeen": "2026-01-02", "lastSeen": "2026-05-12" },
  { "name": "Kevan Parekh",     "role": "officer", "title": "Senior Vice President, CFO",    "firstSeen": "2025-01-10", "lastSeen": "2026-04-27" },
  { "name": "Deirdre O'Brien",  "role": "officer", "title": "Senior Vice President",         "firstSeen": "2021-04-19", "lastSeen": "2026-04-03" },
  { "name": "Sabih Khan",       "role": "officer", "title": "COO",                           "firstSeen": "2025-07-25", "lastSeen": "2026-04-03" },
  { "name": "Jennifer Newstead","role": "officer", "title": "SVP, GC and Secretary",         "firstSeen": "2026-03-06", "lastSeen": "2026-03-17" },
  { "name": "Katherine Adams",  "role": "officer", "title": "SVP, GC and Secretary",         "firstSeen": "2021-04-05", "lastSeen": "2025-11-14" }
]

Tim Cook is the CEO, Kevan Parekh is the current CFO, Sabih Khan is COO. You can also see the data tracking a handoff in real time: Jennifer Newstead and Katherine Adams both carry the General Counsel title, with Adams' lastSeen trailing off as Newstead takes over. The same fetch in JavaScript:

js
const officers = await fetch(
  "https://api.stockfit.io/v1/api/executives/officers?symbol=AAPL",
  { headers: { Authorization: "Bearer " + process.env.STOCKFIT_API_KEY } }
).then(r => r.json());

const ceo = officers.find(o => o.role === "ceo");
// { name: "Timothy Cook", title: "Chief Executive Officer", ... }

How the officer list is built (and why the obvious source fails)

The intuitive place to look for executives is the annual proxy statement (DEF 14A). Since fiscal 2022 the SEC standardized a "Pay versus Performance" block as inline XBRL, and there is even a tag literally named ecd:PeoName (Principal Executive Officer Name). It looks perfect, and it is a trap.

Plenty of large filers tag the compensation numbers but never tag ecd:PeoName. Microsoft and Alphabet, queried that way, return nothing at all. When names do appear, they are often buried in a footnote text block that names only the non-CEO officers, sometimes first-name-only, and the CEO is frequently missing. The 10-K does not tag executive names either. So the proxy route leaves you with thin, inconsistent coverage and, ironically, no reliable CEO.

So we build the roster from a different primary source: SEC Section 16 insider filings (Forms 3, 4, and 5). Every officer, director, and ten-percent owner of a US issuer files these, and they are structured XML carrying the reporting person's name, their own SEC CIK, flags for officer / director / ten-percent-owner, and an officer title. If you want the mechanics of those forms, see our guide to SEC forms, and for what else you can do with the same feed, the insider cluster-buy study.

Deduping by CIK, not by name

The hero field is the reporting person's own CIK. It is a stable per-person identifier and it is present on essentially every officer filing. Deduping by CIK collapses every spelling variant of a person automatically, including the cases name matching can never solve. A real example from the data: the same executive filed once as Tabak Emily N and later as Epstein Emily T after a surname change. Same CIK, one person. No fuzzy string match survives that, but a CIK does.

Names and dates

SEC stores names as "Last First Middle", frequently in all caps (NADELLA SATYA), so we normalize to "First Last" for display and skip stray middle initials. The firstSeen and lastSeen dates are filing dates, not transaction dates, because a Form 3 (an officer's initial statement) reports holdings and has no transaction date at all. The filing date is the one signal present on every form.

CEO vs divisional CEO

Large companies have more than one person with "CEO" in their title, and only one of them is the principal executive officer. The role field separates them. Amazon is the clearest example:

bash
curl 'https://api.stockfit.io/v1/api/executives/officers?symbol=AMZN' \
  -H 'Authorization: Bearer $STOCKFIT_API_KEY'
json
[
  { "name": "Andrew Jassy",      "role": "ceo",            "title": "President and CEO",            "firstSeen": "2021-05-18", "lastSeen": "2026-05-26" },
  { "name": "Matthew Garman",    "role": "ceo-divisional", "title": "CEO Amazon Web Services",      "firstSeen": "2024-06-03", "lastSeen": "2026-05-26" },
  { "name": "Douglas Herrington","role": "ceo-divisional", "title": "CEO Worldwide Amazon Stores",  "firstSeen": "2022-07-05", "lastSeen": "2026-05-26" },
  { "name": "Brian Olsavsky",    "role": "officer",        "title": "Senior Vice President and CFO","firstSeen": "2021-05-18", "lastSeen": "2026-05-26" },
  { "name": "Jeffrey Bezos",     "role": "officer",        "title": "Executive Chair",              "firstSeen": "2021-05-05", "lastSeen": "2026-05-05" }
]

Andrew Jassy is the ceo. Matthew Garman (AWS) and Douglas Herrington (Stores) are ceo-divisional: real chief executives of business units, but not the principal CEO of the parent. We surface them rather than hide them, because "who runs AWS" is genuinely useful, but we keep them out of the ceo bucket so a filter on role === "ceo" always returns the one true CEO.

The classification is derived from the title at request time: strip the CEO phrase and the known role and connector words (Chairman, President, Director, Co, Interim, CFO, and so on), and if a business-unit name is left over ("Amazon Web Services", "Commercial") it is divisional. Genuine co-CEOs are handled correctly too. Netflix returns both Gregory Peters and Theodore Sarandos with role: "ceo" and title Co-CEO, because neither name carries a business unit.

How current the list is, and who is missing

Because lastSeen is an activity signal, the endpoint returns officers active within roughly the last 18 months of the company's most recent insider filing. When an executive leaves, they stop filing Forms 4, their lastSeen goes stale, and they drop off the list on their own. There is no separate "departed" flag to maintain.

The CEO is always included even if they file infrequently. A CEO who rarely trades can go many months between filings without disappearing. Two caveats worth knowing. First, foreign private issuers (companies like ASML or SAP that report on Form 20-F) are exempt from Section 16, so they file no Forms 3, 4, or 5 and will return an empty list. Second, the title is taken verbatim from the filing, so a CEO who files under "Chairman" will show that title; we never invent one.

Authentication and tiers

All requests go to the base URL https://api.stockfit.io/v1 and authenticate with a bearer token from your StockFit dashboard. The Executive Officers API is included on the Stock and Professional plans.

bash
curl 'https://api.stockfit.io/v1/api/executives/officers?symbol=MSFT' \
  -H 'Authorization: Bearer $STOCKFIT_API_KEY'

More in the Executives API

Officers are one part of a larger Executives family sourced from DEF 14A proxy statements. If you need to go beyond the roster, the same tier also covers executive compensation and pay-versus-performance via /api/executives/compensation (CEO total comp, Compensation Actually Paid, and company-vs-peer TSR), corporate governance flags via /api/executives/governance, and the company-selected performance measures that the board ties pay to via /api/executives/performance-measures. This post stays focused on officers; those endpoints get their own walkthroughs.

FAQ

What is the Executive Officers API?

It is a single endpoint, /api/executives/officers, that returns a US-listed company's current executive officers, including the CEO, each with a name, an SEC-disclosed title, and the first and last dates they appear in SEC filings. One call per ticker, no scraping.

Where does the Executive Officers API get its data?

From SEC Form 3, 4, and 5 (Section 16) insider filings. Each person is deduped by their own SEC CIK, so name and even surname changes collapse to one record. Titles and dates come straight from the filings.

How do I get a company's current CEO from the API?

Call the officers endpoint with the ticker and take the entry whose role is ceo. That is always the principal executive officer, never a divisional one.

What is the difference between ceo and ceo-divisional?

ceo is the company's principal CEO. ceo-divisional is a chief executive of a business unit or subsidiary, for example "CEO Amazon Web Services". Both are surfaced, but only the principal CEO carries role: "ceo".

Why do some companies return no executive officers?

Foreign private issuers (Form 20-F filers such as ASML or SAP) are exempt from Section 16 and file no Forms 3, 4, or 5, so there is no insider data to build from. The endpoint also requires the Stock or Professional tier.

How current is the officer list?

It returns officers active within roughly 18 months of the company's most recent insider filing. lastSeen is the activity signal, so departed executives drop off once they stop filing.

Which subscription tiers include the Executive Officers API?

The Stock and Professional plans. You can get a token from the StockFit dashboard and call it immediately.

Ready to build?

Free API key, no credit card. Every endpoint mentioned in this post is available on the free tier.

Get Your Free API Key