Endpoints
/v1/executive-compensation
https://secfeedapi.com/v1/executive-compensationSummary Compensation Table from the latest proxy: salary, bonus, awards, total by executive and year.
| Parameter | Type | Description | Example |
|---|---|---|---|
ticker | string | Ticker. One of ticker or cik is required. | MSFT |
cik | integer | Company CIK. | 789019 |
accessionNo | string | A specific DEF 14A. Defaults to the latest one. | 0001193125-24-242883 |
- Columns the company does not use are left out of each row.
- name carries the name and title as printed in the table.
Request examples
Every response below is real output from the API, trimmed to the first records.
Latest proxy for Microsoft
Usually three fiscal years per executive. total is the table's own total column.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=MSFT"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/executive-compensation",
params={'ticker': 'MSFT'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"cik": 789019,
"accessionNo": "0001193125-25-245150",
"executives": [
{
"name": "Satya Nadella Chairman and Chief Executive Officer",
"year": 2025,
"salary": 2500000.0,
"bonus": 0.0,
"stockAwards": 84245496.0,
"nonEquityIncentive": 9555000.0,
"allOther": 196294.0,
"total": 96496790.0
},
{
"name": "Satya Nadella Chairman and Chief Executive Officer",
"year": 2024,
"salary": 2500000.0,
"bonus": 0.0,
"stockAwards": 71236392.0,
"nonEquityIncentive": 5200000.0,
"allOther": 169791.0,
"total": 79106183.0
}
]
}An earlier proxy statement
Pass accessionNo to read a past year's table.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=MSFT&accessionNo=0001193125-24-242883"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/executive-compensation",
params={'ticker': 'MSFT', 'accessionNo': '0001193125-24-242883'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"cik": 789019,
"accessionNo": "0001193125-24-242883",
"executives": [
{
"name": "Satya Nadella Chairman and Chief Executive Officer",
"year": 2024,
"salary": 2500000.0,
"bonus": 0.0,
"stockAwards": 71236392.0,
"nonEquityIncentive": 5200000.0,
"allOther": 169791.0,
"total": 79106183.0
},
{
"name": "Satya Nadella Chairman and Chief Executive Officer",
"year": 2023,
"salary": 2500000.0,
"bonus": 0.0,
"stockAwards": 39236137.0,
"nonEquityIncentive": 6414750.0,
"allOther": 361650.0,
"total": 48512537.0
}
]
}NVIDIA
The same shape for any company whose proxy has a standard table.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=NVDA"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/executive-compensation",
params={'ticker': 'NVDA'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"cik": 1045810,
"accessionNo": "0001045810-26-000036",
"executives": [
{
"name": "Jen-Hsun Huang",
"year": 2026,
"salary": 1497627.0,
"stockAwards": 24800511.0,
"nonEquityIncentive": 6000000.0,
"allOther": 4045691.0,
"total": 36343830.0
},
{
"name": "Jen-Hsun Huang",
"year": 2025,
"salary": 1486199.0,
"stockAwards": 38811306.0,
"nonEquityIncentive": 6000000.0,
"allOther": 3568746.0,
"total": 49866251.0
}
]
}Response fields
| Field | Type | Meaning |
|---|---|---|
cik | integer | Company CIK. |
accessionNo | string | The DEF 14A the table came from. |
executives[].name | string | Name and title as printed. |
executives[].year | integer | Fiscal year. |
executives[].salary | number | Base salary. |
executives[].bonus | number | Discretionary bonus. |
executives[].stockAwards | number | Grant date value of stock awards. |
executives[].optionAwards | number | Grant date value of option awards, when the column exists. |
executives[].nonEquityIncentive | number | Non-equity incentive plan pay. |
executives[].pensionAndDeferred | number | Change in pension value and nonqualified deferred compensation, when present. |
executives[].allOther | number | All other compensation. |
executives[].total | number | Total compensation. |
How to
How do I look up a company by CIK?
Pass cik instead of ticker.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?cik=789019"
How do I get the CEO's pay over three years?
Filter executives by name; each year is a separate row.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=MSFT"
How do I compare companies?
Call the endpoint per ticker and compare total for the same year.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=AAPL"
How do I read an older proxy?
Find its accession with the filing search API (formType DEF 14A), then pass accessionNo.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=MSFT&accessionNo=0001193125-24-242883"
Why is optionAwards missing?
Many companies no longer grant options and drop the column.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=NVDA"
Where do the numbers come from?
The Summary Compensation Table in the DEF 14A; values are as printed, in dollars.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=MSFT"
What if a company has no standard table?
The API returns an error saying no Summary Compensation Table was found.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=MSFT"
Does name include the title?
Yes, most tables print both; split on the title words if you need the name alone.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/executive-compensation?ticker=MSFT"
Errors
- 404 when no Summary Compensation Table is found or the ticker is unknown.
- An accessionNo that does not exist currently returns 502.
See also the error codes every endpoint shares.
Try it with your own key
500 free calls a month.