# Executive Compensation Data API > An API providing executive compensation data extracted and standardized from SEC DEF 14A filings. Find executive compensation data of all publicly listed companies with a data history of up to 15 years. Look up compensation data by ticker, CIK and search query. Source: https://sec-api.io/docs/executive-compensation-api The Executive Compensation API provides standardized compensation data for all key executives as reported in SEC filing DEF 14A. The API covers compensation data reported since 2005 and is updated in real-time. Three API endpoints provide access to the data. You can search compensation data by 13 parameters, such as company ticker, executive name & position, annual salary, option awards and more. The executive compensation database includes the following data points: - CIK of the reporting company, e.g. 789019 - Ticker of the reporting company, e.g. MSFT - The year of the reporting period, e.g. 2020 - Executive name - Position of the executive, e.g. Chief Financial Officer - Salary of the executive for the reporting year - Cash bonus - Stock awards - Option awards - Non-equity incentive plan compensation - Change in pension value and nonqualified deferred compensation earnings - All other compensation - Total compensation Compensation data is searchable by any of the data points listed above. Complex boolean search queries are also supported. Dataset size: Compensation data extracted from all DEF 14A filings filed since 2005 to present. Data update frequency: Compensation data is extracted, indexed and searchable in less than 300 milliseconds on average after a new DEF 14A filing is published. Survivorship bias free: Yes. The API includes compensation data of companies that are no longer listed on stock exchanges. ## API Endpoints Three API endpoints are provided to search and access executive compensation data by ticker, CIK or search query. All APIs return executive data in the same JSON format. | Endpoint | HTTP Method | Response Format | Description | | --- | --- | --- | --- | | https://api.sec-api.io/compensation/ | GET | JSON | Return all compensation data for a given ticker. | | https://api.sec-api.io/compensation/ | GET | JSON | Return all compensation data for a given CIK. | | https://api.sec-api.io/compensation | POST | JSON | Perform simple and complex search queries. | Supported HTTP methods: `GET`, `POST` Response format: `JSON` ### Authentication The API supports two authentication strategies. Either set your API key as `Authorization` header or attach your key as `token` query parameter: - Set as `Authorization` header. Before making a `GET` request to `https://api.sec-api.io/compensation`, set the `Authorization` header to `YOUR_API_KEY`. - Set as `token` query parameter. Example: `https://api.sec-api.io/compensation/1318605?token=YOUR_API_KEY`. In this case, you make `GET` requests to the endpoint `https://api.sec-api.io/compensation/1318605?token=YOUR_API_KEY` and not to `https://api.sec-api.io/compensation/1318605`. ## Request & Response Parameters ### Get Executive Compensation Data by Ticker Send a `GET` HTTP request to retrieve all historical and current executive compensation data of a company by its ticker symbol (e.g. `TSLA` for Tesla Inc.) to the following API endpoint: https://api.sec-api.io/compensation/ Supported HTTP methods: `GET` Response format: `JSON` Replace `` with the ticker symbol to receive all executive compensation data of the company. #### Example Request: `GET` https://api.sec-api.io/compensation/TSLA Response: | Year | Executive Name | Position | Salary | Bonus | Stock Awards | Option Awards | Non-Equity Incentive Compensation | Other Compensation | Total | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ### Get Executive Compensation Data by CIK Send a `GET` HTTP request to retrieve all historical and current executive compensation data of a company by its Central Index Key (CIK) to the following API endpoint: https://api.sec-api.io/compensation/ Supported HTTP methods: `GET` Response format: `JSON` Replace `` with a CIK to receive all executive compensation data of the company. #### Example Request: `GET` https://api.sec-api.io/compensation/1652044 Response: | Year | Executive Name | Position | Salary | Bonus | Stock Awards | Option Awards | Non-Equity Incentive Compensation | Other Compensation | Total | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ### Query the Executive Compensation Data Corpus Search the executive compensation database by ticker, CIK or name of the company the executives work for, name of the executive, position (e.g. "CEO"), reporting year, salary, bonus, stock awards, total compensation and more. Send a `POST` HTTP request with a JSON payload including the search query, and parameters for pagination and sorting to the following API endpoint: https://api.sec-api.io/compensation Supported HTTP methods: `POST` Request & response content type: `JSON` #### Request Structure The request body should include the following parameters in JSON format: - `query` (string) - The query string specifies the search terms and is written in Lucene syntax. Use `AND` and `OR` operators to create a boolean search expression. Parantheses, `(` and `)`, are used to create filter groups. Finding compensation data matching a range of numbers (e.g. return all data between 2018 and 2020) is possible using brackets range expressions with square brackets `[ ]` (e.g. `year:[2018 TO 2022]`). You can find more details in the example section below. [More information about the Lucene syntax can be found in our tutorial here.](https://sec-api.io/resources/lucene-query-syntax-overview) The following represent the searchable parameters: - **Ticker(s):** `ticker:TICKER_OF_INTEREST` or `ticker:(TICKER_1 OR TICKER_2 OR TICKER_3 ...)` - Retrieve compensation data of all executives working for a specific company or a list of companies by ticker symbol(s). - **CIK(s):** `cik:CIK_OF_INTEREST` or `ticker:(CIK_1 OR CIK_2 OR CIK_3 ...)` - Retrieve compensation data for a specific company or a list of companies by CIK(s). - **Executive Name:** `name:NAME_OF_INTEREST` - Search for compensation data of a specific executive by his/her name. - **Position:** `position:POSITION_OF_INTEREST` - Find compensation data of executives with a specific position (e.g. CEO, CFO, etc.). The positions are not standardized and may vary between companies. For example, the CEO may be referred to as "Chief Executive Officer", "CEO", "Technoking of Tesla", etc. - **Year:** `year:YEAR_OF_INTEREST` or `year:[YEAR_START TO YEAR_END]` - Retrieve compensation data for a specific year or a range of years. Use brackets range expressions with square brackets `[ ]` to find data within a range of years (e.g. `year:[2018 TO 2022]`). - **Salary and other compensation parameters:** `salary:[STARTING_SALARY TO ENDING_SALARY]` or `salary:[* TO ENDING_SALARY]` or `salary:[STARTING_SALARY TO *]` - Find compensation data matching a range of salaries. Use brackets range expressions with square brackets `[ ]` to find data within a range of salaries (e.g. `salary:[100000 TO 200000]`). Use an asterisk `*` to search for all salaries above or below a certain value. For example, `salary:[100000 TO *]` returns all compensation data with a salary above $100,000 per annum. Alternatively, `salary:[* TO 200000]` returns all compensation data with a salary below $200,000 per annum. The same applies to other compensation parameters, such as bonus, stock awards, etc. For example, `bonus:[100000 TO 500000]` returns all compensation data with a bonus between $100,000 and $500,000. - `from` (string) - Starting position of your search. Default: `0`. Max: `10,000` items, which is also the maximum number of items returned per search `query`. To retrieve all compensation data items in your search universe, increment `from` by the value of the `size` parameter (e.g., 50) until no more items are returned or the 10,000 limit is reached. For example, use 0, 50, 100, and so on. If your `query` locates more than 10,000 compensation items, consider narrowing your search by refining your filter criteria, for example, using a date range filter to iterate over reporting years. One such approach would be to search for compensation data with a range filter applied to the reporting `year`, e.g. `year:[2021 TO 2022]` (all compensation items disclosed in 2021 and 2022), then paginate through the results by incrementing `from`, and once completed, repeat the process for the next years, and so on. - `size` (string) - Number of compensation items to be returned per query. Maximum: `50`. Default: `50` - `sort` (array) - Array including the sort definition. For example, sort the result by `salary` and start with the highest salary item is achieved with: `[{ "salary": { "order": "desc" } }]`. The sorting order can be changed to ascending by setting `order` to `asc`. Default: `"sort": [{ "year": { "order": "desc" } }]` #### Query Examples #### Example 1 Retrieves compensation data for all companies (`cik:*`) and returns the first 50 results, starting from offset `0`. Results are sorted primarily by compensation year in descending order (most recent years first) and secondarily by ticker symbol in ascending order, ensuring a deterministic ordering within each year. ```json { "query": "cik:*", "from": "0", "size": "50", "sort": [{"year":"desc","ticker":"asc"}] } ``` #### Response | Year | Ticker | Executive Name | Position | Salary | Bonus | Stock Awards | Option Awards | Non-Equity Incentive Compensation | Other Compensation | Total | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #### Example 2 Retrieves the top 10 compensation samples from the years 2020 to 2025, starting from offset `0`. Results are sorted by the `salary` field in descending order, returning the samples with the highest reported salaries first. ```json { "query": "year:[2020 TO 2025]", "from": "0", "size": "10", "sort": [{"salary":{"order":"desc"}}] } ``` #### Response | Year | Ticker | Executive Name | Position | Salary | Bonus | Stock Awards | Option Awards | Non-Equity Incentive Compensation | Other Compensation | Total | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #### Example 3 Return all executive compensation items for 2020 with a total salary exceeding $1,000,000, sort by total salary, highest first. The range query `total:[1000000 TO *]` is used to find all items with a total salary of at least $1,000,000 and upwards. ```json { "query": "year:2020 AND total:[1000000 TO *]", "from": "0", "size": "10", "sort": [{"salary":{"order":"desc"}}] } ``` #### Response | Year | Ticker | Executive Name | Position | Salary | Bonus | Stock Awards | Option Awards | Non-Equity Incentive Compensation | Other Compensation | Total | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #### Example 4 Return all executive compensation items for MSFT, AAPL, TSLA and ADBE for 2023 and 2024. Results are sorted by `salary` in descending order (highest first). The query uses a boolean `OR` operator to search for multiple tickers and a range filter to include items from both 2023 and 2024. ```json { "query": "year:[2023 TO 2024] AND ticker:(MSFT OR AAPL OR TSLA OR ADBE)", "from": "0", "size": "10", "sort": [{"salary":{"order":"desc"}}] } ``` #### Response | Year | Ticker | Executive Name | Position | Salary | Bonus | Stock Awards | Option Awards | Non-Equity Incentive Compensation | Other Compensation | Total | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ## FAQ Common questions about querying the Executive Compensation API, the response shape, and the bulk archives. ### How do I pull the full executive pay history for a company when I only know its ticker symbol? To retrieve every compensation record for a company when you only have its stock ticker, use the by-ticker form of the `/compensation` endpoint, supplying the ticker directly in the path (for example `MSFT` or `TSLA`). It returns all historical and current executive compensation records for that company across every reporting year covered. Each record identifies the company by ticker (`ticker`) and CIK (`cik`), names the individual and their role (`name`, `position`), gives the reporting year (`year`), and breaks the pay package into salary (`salary`), cash bonus (`bonus`), stock awards (`stockAwards`), option awards (`optionAwards`), non-equity incentive compensation (`nonEquityIncentiveCompensation`), change in pension value and deferred earnings (`changeInPensionValueAndDeferredEarnings`), all other compensation (`otherCompensation`), and the total package (`total`). ```bash https://api.sec-api.io/compensation/TSLA?token=YOUR_API_KEY ``` ### How do I get all executive compensation data for a company using its SEC CIK number? To pull every executive compensation record for a company by its SEC Central Index Key, use the by-CIK form of the `/compensation` endpoint, placing the numeric CIK directly in the path (for example `1652044` for Alphabet). It returns all reported compensation records for that company across the years covered. The CIK is a stable identifier that does not change when a company is renamed or changes its ticker, so it is the most reliable way to address a specific company. Each returned record carries the company CIK (`cik`) and ticker (`ticker`), the executive's name and role (`name`, `position`), the reporting year (`year`), and the individual pay components such as salary (`salary`) and total compensation (`total`). ```bash https://api.sec-api.io/compensation/1652044?token=YOUR_API_KEY ``` ### How can I look up what a company's CEO was paid in a particular year? To find what a company's chief executive earned in a specific year, use the search form of the `/compensation` endpoint and combine three filters: the company ticker (`ticker` set to the company's symbol), the reporting year (`year` set to the year of interest), and the executive's role (`position` containing a term such as `Chief Executive Officer` or `CEO`). Position titles are not standardized across companies, so the role for the same job can appear as `Chief Executive Officer`, `CEO`, or even a company-specific phrasing such as `Technoking of Tesla`. A broad position term picks up these variants. The matching record reports the pay components for that year, including salary (`salary`), bonus (`bonus`), stock awards (`stockAwards`), option awards (`optionAwards`), and total compensation (`total`). ```json { "query": "ticker:AAPL AND year:2024 AND position:\"Chief Executive Officer\"", "from": 0, "size": 50 } ``` ### How do I find compensation records across a range of reporting years? To retrieve compensation records spanning several reporting years, use the search form of the `/compensation` endpoint and apply a range filter on the year field, where the value of `year` falls between a start year and an end year (for example any year from 2018 through 2022 inclusive). This range covers every executive compensation record whose reporting year (`year`) is within those bounds. You can combine the year range with other filters, such as a company ticker (`ticker`) or executive name (`name`), to narrow the result set. Records are returned 50 at a time, so for a wide year range you page through results by advancing the starting offset (`from`). ```json { "query": "year:[2018 TO 2022]", "from": 0, "size": 50, "sort": [{"year":{"order":"desc"}}] } ``` ### How can I search for compensation data of a specific named executive across all the companies they have worked for? To find every compensation record for one named executive regardless of employer, use the search form of the `/compensation` endpoint and filter on the executive name field (`name`) set to the person's name. The result includes records from every company that disclosed pay for that individual. Because each record carries both the company ticker (`ticker`) and CIK (`cik`) alongside the reporting year (`year`), you can see which firm reported the pay and when. Names may be recorded with varying capitalization or spelling across filings, so a broad name term gives the most complete coverage. ```json { "query": "name:\"Tim Cook\"", "from": 0, "size": 50, "sort": [{"year":{"order":"desc"}}] } ``` ### How do I retrieve pay data for several companies at once in a single query? To pull compensation data for several companies in one request, use the search form of the `/compensation` endpoint and filter on the ticker field (`ticker`) so that it matches any one of a list of symbols, for example MSFT, AAPL, or TSLA. A single query then returns records for all of the named companies together. The same approach works with CIKs by filtering the CIK field (`cik`) against a list of identifiers. You can combine the multi-company filter with a reporting year filter (`year`) to limit the result to specific years. Results come back 50 records per page, so advance the starting offset (`from`) to page through a large set. ```json { "query": "ticker:(MSFT OR AAPL OR TSLA)", "from": 0, "size": 50, "sort": [{"year":{"order":"desc"}}] } ``` ### How can I find every executive whose base salary fell within a specific dollar range? To find executives whose base salary fell within a dollar band, use the search form of the `/compensation` endpoint and apply a range filter on the salary field, where the value of `salary` falls between a lower and an upper dollar amount (for example between 100,000 and 200,000). The `salary` field holds the executive's base annual salary for the reporting year, separate from bonus, equity, and other components. You can leave one end of the range open to capture all salaries above or below a threshold. Combining the salary range with a year filter (`year`) or a position filter (`position`) narrows the result to a particular period or role. ```json { "query": "salary:[100000 TO 200000]", "from": 0, "size": 50, "sort": [{"salary":{"order":"desc"}}] } ``` ### How do I list executives who earned a total pay package above a given threshold? To list executives whose total pay package exceeded a threshold, use the search form of the `/compensation` endpoint and apply an open-ended range filter on the total compensation field, where the value of `total` is at least the threshold amount and has no upper bound (for example 1,000,000 and above). The `total` field is the sum of all reported pay components for the reporting year, so this filter captures executives whose entire package crossed the threshold regardless of how it was split between salary, bonus, and equity. Sorting the result by `total` in descending order brings the largest packages to the top. ```json { "query": "total:[1000000 TO *]", "from": 0, "size": 50, "sort": [{"total":{"order":"desc"}}] } ``` ### How can I rank executives by salary so the highest-paid appear first? To rank executives so the highest base salaries appear first, use the search form of the `/compensation` endpoint and set the sort definition to order results by the salary field (`salary`) in descending order. The records with the largest reported `salary` values are then returned at the top. You pair the sort with whatever query selects the population you want to rank, such as a reporting year filter (`year`) or a company ticker filter (`ticker`). To rank by the full package instead of just base pay, sort on the total compensation field (`total`) rather than `salary`. ```json { "query": "year:2024", "from": 0, "size": 50, "sort": [{"salary":{"order":"desc"}}] } ``` ### How do I find the most generous stock award grants reported in a given year? To find the largest stock award grants for a particular year, use the search form of the `/compensation` endpoint with a filter on the reporting year field (`year`) set to the year of interest, and sort the results by the stock awards field (`stockAwards`) in descending order. The `stockAwards` field holds the grant-date value of stock-based awards disclosed for that executive and year, separate from option awards (`optionAwards`). Sorting it descending brings the most valuable stock grants to the top of the result, each record naming the recipient (`name`), their role (`position`), and the company (`ticker`). ```json { "query": "year:2024", "from": 0, "size": 50, "sort": [{"stockAwards":{"order":"desc"}}] } ``` ### How can I identify executives who received large cash bonuses? To identify executives who received large cash bonuses, use the search form of the `/compensation` endpoint and apply an open-ended range filter on the bonus field, where the value of `bonus` is at least a chosen amount (for example 1,000,000 and above). The `bonus` field captures discretionary cash bonus payments and is distinct from non-equity incentive plan payouts (`nonEquityIncentiveCompensation`), which cover formula-driven incentive awards. Sorting the result by `bonus` in descending order ranks the largest cash bonuses first. You can add a year filter (`year`) to limit the search to a specific reporting period. ```json { "query": "bonus:[1000000 TO *]", "from": 0, "size": 50, "sort": [{"bonus":{"order":"desc"}}] } ``` ### How do I find which companies paid out significant option awards in a particular year? To find companies that granted significant option awards in a given year, use the search form of the `/compensation` endpoint with a filter on the reporting year field (`year`) and an open-ended range filter on the option awards field, where the value of `optionAwards` is at least a chosen amount. The `optionAwards` field holds the grant-date value of stock option awards for that executive and year, reported separately from stock awards (`stockAwards`). Each matching record carries the company ticker (`ticker`) and CIK (`cik`), so you can see which firms made the grants. Sorting by `optionAwards` in descending order ranks the largest option grants first. ```json { "query": "year:2023 AND optionAwards:[5000000 TO *]", "from": 0, "size": 50, "sort": [{"optionAwards":{"order":"desc"}}] } ``` ### How can I compare CEO pay across a peer group of companies for the same year? To compare chief executive pay across a peer group for one year, use the search form of the `/compensation` endpoint and combine three filters: the reporting year (`year` set to the year of interest), the ticker field (`ticker`) matching any of the peer companies' symbols, and the role field (`position`) containing a term such as `Chief Executive Officer` or `CEO`. This returns one record per company's chief executive for that year, each carrying the company ticker (`ticker`) and the pay components, so you can line them up side by side. Sorting by total compensation (`total`) in descending order orders the peer group from highest- to lowest-paid. Because position titles are not standardized, a broad role term is needed to catch variants like `Chairman and Chief Executive Officer`. ```json { "query": "year:2024 AND ticker:(MSFT OR AAPL OR GOOGL OR META OR AMZN) AND position:\"Chief Executive Officer\"", "from": 0, "size": 50, "sort": [{"total":{"order":"desc"}}] } ``` ### How do I find executives holding a particular role, such as Chief Financial Officer, regardless of company? To find executives in a particular role across all companies, use the search form of the `/compensation` endpoint and filter on the position field (`position`) with a term describing the role, such as `Chief Financial Officer`. Position titles in the data are not standardized and vary between companies, so the same job can appear as `Chief Financial Officer`, `CFO`, or a combined title like `Chief Operating Officer and Chief Financial Officer`. To capture these variants, search the position field broadly rather than for one exact phrase. Each matching record names the individual (`name`), the company (`ticker`, `cik`), and the reporting year (`year`). ```json { "query": "position:\"Chief Financial Officer\"", "from": 0, "size": 50, "sort": [{"year":{"order":"desc"}}] } ``` ### How can I tell from the data which executives are former or departed officers? To identify executives who have left their role, look in the position field (`position`) for wording that marks them as departed, since the data does not carry a dedicated flag for this. Filings commonly prefix the title with the word `Former`, as in `Former Chief Financial Officer` or `Former Senior Vice President, Chief Financial Officer`. Use the search form of the `/compensation` endpoint and filter the `position` field for the term `Former`. Because this wording is not standardized, the marker can also appear in the name field (`name`) rather than the position, for example a record grouped under `Former Executive Officers`. Searching both `position` and `name` for the term gives the most complete coverage. ```json { "query": "position:Former OR name:Former", "from": 0, "size": 50, "sort": [{"year":{"order":"desc"}}] } ``` ### How do I retrieve compensation for every company in the database without filtering by a specific firm? To retrieve compensation records across every company without restricting to one firm, use the search form of the `/compensation` endpoint with a query that matches all records — a wildcard on the CIK field (`cik`) matches every company. Results come back 50 records at a time, so you page through the full set by advancing the starting offset (`from`) by the page size on each request. A single query returns at most 10,000 records, so for the entire corpus you also need to split the search by reporting year ranges (`year`) and paginate within each range. A sort definition such as ordering by `year` descending and `ticker` ascending gives a deterministic order while paging. ```json { "query": "cik:*", "from": 0, "size": 50, "sort": [{"year":"desc","ticker":"asc"}] } ``` ### How do I page through more results when a search returns more records than fit in one response? To page through a result set larger than one response, use the search form of the `/compensation` endpoint and advance the starting offset (`from`) on each successive request. The page size (`size`) can be at most 50, which is also the default, so you increment `from` by 50 each time — 0, then 50, then 100, and so on — until no more records are returned. Keep the same query and the same sort definition across all pages so the ordering stays stable while you iterate. The starting offset can go up to 10,000, which is also the maximum number of records a single query can return in total. ```json { "query": "year:2024", "from": 50, "size": 50, "sort": [{"year":{"order":"desc"}}] } ``` ### What is the maximum number of compensation records a single search query can return, and how should I handle a search universe larger than that? A single search against the `/compensation` endpoint returns at most 10,000 records. The starting offset (`from`) can be advanced up to 10,000, and beyond that point no further records are accessible for that query. When the population you want is larger than 10,000 records, split it into smaller searches that each stay under the cap. The recommended approach is to narrow by reporting year — apply a range filter on the year field (`year`), for example one or two years at a time, paginate fully through that slice by advancing the starting offset (`from`) in steps of the page size, then repeat for the next year range. Combining year slicing with pagination lets you cover a corpus of any size. ```json { "query": "year:[2021 TO 2022]", "from": 0, "size": 50, "sort": [{"year":"desc","ticker":"asc"}] } ``` ### How can I get compensation data going back to the earliest years the dataset covers? To reach the oldest compensation records, use the search form of the `/compensation` endpoint and filter on the reporting year field (`year`) for early years. The data is extracted from DEF 14A proxy statements filed since 2005, so the earliest reporting years available are around that time, and records from years such as 2007 and 2008 are present. Apply a range filter on `year` covering the early period and sort ascending by `year` to bring the oldest records first. The dataset includes companies that have since delisted, so historical records are retained even for firms no longer trading. ```json { "query": "year:[2005 TO 2008]", "from": 0, "size": 50, "sort": [{"year":{"order":"asc"}}] } ``` ### How do I sort results by multiple criteria, such as year first and then ticker? To sort by more than one criterion, use the search form of the `/compensation` endpoint and supply a sort definition with multiple keys in priority order. Listing the year field (`year`) first and the ticker field (`ticker`) second orders results primarily by reporting year and then, within each year, by ticker symbol. Each key can independently be ascending or descending — for example `year` descending to put recent years first, with `ticker` ascending for an alphabetical secondary order. A multi-key sort produces a deterministic ordering, which matters when paging through results so records do not shift between pages. ```json { "query": "year:[2023 TO 2024]", "from": 0, "size": 50, "sort": [{"year":"desc","ticker":"asc"}] } ``` ### How can I find executives who earned high non-equity incentive plan payouts? To find executives with large non-equity incentive plan payouts, use the search form of the `/compensation` endpoint and apply an open-ended range filter on the non-equity incentive compensation field, where the value of `nonEquityIncentiveCompensation` is at least a chosen amount. The `nonEquityIncentiveCompensation` field captures formula-driven incentive plan awards paid in cash, which are distinct from discretionary cash bonuses (`bonus`). Sorting the result by `nonEquityIncentiveCompensation` in descending order ranks the largest payouts first. You can add a year filter (`year`) to focus on a particular reporting period. ```json { "query": "nonEquityIncentiveCompensation:[5000000 TO *]", "from": 0, "size": 50, "sort": [{"nonEquityIncentiveCompensation":{"order":"desc"}}] } ``` ### How do I see the change in pension value and deferred compensation earnings reported for an executive? To see the reported change in pension value and nonqualified deferred compensation earnings for an executive, look at the change in pension value and deferred earnings field (`changeInPensionValueAndDeferredEarnings`) on the compensation record. You can retrieve the record through the by-ticker or by-CIK form of the `/compensation` endpoint, or through the search form filtered by executive name (`name`) and reporting year (`year`). This field is one of the standardized pay components for the reporting year and is reported separately from salary (`salary`), bonus (`bonus`), and equity awards. It is frequently zero for executives without a defined-benefit pension or deferred compensation plan. ```json { "query": "changeInPensionValueAndDeferredEarnings:[1 TO *]", "from": 0, "size": 50, "sort": [{"changeInPensionValueAndDeferredEarnings":{"order":"desc"}}] } ``` ### How can I break down a single executive's total pay into its salary, bonus, equity and other components? To break a single executive's total package into its parts, retrieve their compensation record through the `/compensation` endpoint — by ticker, by CIK, or through the search form filtered by name (`name`) and year (`year`) — and read the individual component fields. The package splits into base salary (`salary`), cash bonus (`bonus`), stock awards (`stockAwards`), option awards (`optionAwards`), non-equity incentive compensation (`nonEquityIncentiveCompensation`), change in pension value and deferred earnings (`changeInPensionValueAndDeferredEarnings`), and all other compensation (`otherCompensation`). The total compensation field (`total`) is the sum of these components for the reporting year, so comparing each part against `total` shows how the package is weighted between cash, equity, and other pay. ```json { "query": "name:\"Satya Nadella\" AND year:2024", "from": 0, "size": 50 } ``` ### How do I authenticate my requests to the executive compensation endpoints? The `/compensation` endpoints support two ways to supply your API key. You can set the key as an `Authorization` header on the request, or you can attach it as a `token` query parameter on the endpoint URL. Either method works for the by-ticker form, the by-CIK form, and the search form of the endpoint. The two are alternatives — you use one or the other, not both — and the key must be present on every request for it to be accepted. ```bash https://api.sec-api.io/compensation/1318605?token=YOUR_API_KEY ``` ### How can I identify executives whose reported salary is zero or near zero despite a large total pay package? To find executives paid little or no base salary but a large overall package, use the search form of the `/compensation` endpoint and combine two range filters: the salary field (`salary`) constrained to a low band such as zero up to a small amount, and the total compensation field (`total`) constrained to be at least a high threshold. This surfaces records where base pay is minimal but stock awards (`stockAwards`), option awards (`optionAwards`), or other components push the total package up. It is common among founder-executives who take a token salary, and the `salary` field in the data can be as low as 0 or 1 while `total` runs into the millions. ```json { "query": "salary:[0 TO 1] AND total:[1000000 TO *]", "from": 0, "size": 50, "sort": [{"total":{"order":"desc"}}] } ``` ### How do I find which executives received the largest "all other compensation" amounts? To find executives with the largest all-other-compensation amounts, use the search form of the `/compensation` endpoint and sort the results by the other compensation field (`otherCompensation`) in descending order, optionally pairing it with an open-ended range filter so `otherCompensation` is at least a chosen amount. The `otherCompensation` field captures pay that falls outside salary, bonus, equity, and incentive plan categories — items such as perquisites, severance, and benefit contributions. Sorting it descending brings the largest such amounts to the top, each record naming the executive (`name`), the company (`ticker`), and the reporting year (`year`). ```json { "query": "otherCompensation:[1000000 TO *]", "from": 0, "size": 50, "sort": [{"otherCompensation":{"order":"desc"}}] } ``` ### How can I track how a specific executive's total compensation has changed year over year at one company? To track how one executive's pay changed year over year at a single company, use the search form of the `/compensation` endpoint and combine a company filter — the ticker field (`ticker`) or CIK field (`cik`) — with the executive name field (`name`) set to the individual's name. This returns one record per reporting year for that person at that company. Sorting the result by the reporting year field (`year`) in ascending order arranges the records chronologically, and comparing the total compensation field (`total`) across them shows the year-over-year trend. The individual component fields, such as `salary` and `stockAwards`, reveal which part of the package drove any change. ```json { "query": "ticker:AAPL AND name:\"Tim Cook\"", "from": 0, "size": 50, "sort": [{"year":{"order":"asc"}}] } ``` ### How do I build a list of the top earners overall for a recent year? To build a ranked list of the highest-paid executives for a recent year, use the search form of the `/compensation` endpoint with a filter on the reporting year field (`year`) set to that year, and sort the results by the total compensation field (`total`) in descending order. The `total` field is the full package for the year, so sorting it descending puts the biggest earners first regardless of company. Records come back 50 at a time, so page through the ranking by advancing the starting offset (`from`); each record names the executive (`name`), their role (`position`), and the company (`ticker`). ```json { "query": "year:2024", "from": 0, "size": 50, "sort": [{"total":{"order":"desc"}}] } ``` ### How can I find companies that delisted but still have historical pay data available? Historical compensation records for companies that have since delisted remain in the dataset, because the data is survivorship-bias free and retains pay records for firms no longer listed on stock exchanges. You reach these records through the same `/compensation` endpoint — by ticker, by CIK, or through the search form — with no special filter required. The most reliable way to address a former company is by its CIK (`cik`), since that identifier persists after a ticker is retired. Searching the search form for an older reporting year range on the year field (`year`) surfaces records from many companies that no longer trade, each still carrying its former ticker (`ticker`) and CIK. ```json { "query": "year:[2006 TO 2010]", "from": 0, "size": 50, "sort": [{"year":{"order":"asc"}}] } ``` ### How can I look up executive pay when I only know the company's name and not its ticker or CIK? When you only have a company's name, first resolve that name to a ticker or CIK and then query the compensation data with the resolved identifier. The `/mapping/name/` endpoint of the Mapping API takes a company name and returns matching companies with their ticker (`ticker`) and CIK (`cik`), covering both currently listed and delisted firms. Once you have the identifier, retrieve the pay records through the `/compensation` endpoint — the by-ticker form with the resolved ticker, the by-CIK form with the resolved CIK, or the search form filtering on the ticker field (`ticker`) or CIK field (`cik`). Each returned compensation record names the executive (`name`), their role (`position`), the reporting year (`year`), and the pay components such as salary (`salary`) and total compensation (`total`). Because company names are not unique and can be spelled differently across filings, the CIK from the mapping step is the most reliable identifier to carry into the compensation query. ```bash https://api.sec-api.io/mapping/name/Microsoft?token=YOUR_API_KEY ``` ## References For more information about Form DEF14A filings visit the SEC websites here: - [§ 240.14a-101 Information Required In a Proxy Statement](https://www.ecfr.gov/current/title-17/chapter-II/part-240/section-240.14a-101) - [SEC Proxy Rules](https://www.sec.gov/interps/telephone/cftelinterps_proxyrules-sch14a.pdf)