Skip to content

Proxy Statements (DEF 14A): Parse Executive Compensation and Governance Data

Form DEF 14A is a definitive proxy statement filed by public companies before annual shareholder meetings. It contains critical information about executive compensation, board composition, shareholder voting matters, and corporate governance. This guide details all data available from the ProxyStatement class for building views.


Overview

Property Type Description
Class Name ProxyStatement
Forms Handled DEF 14A, DEFA14A, DEFM14A, DEF 14A/A
Module edgar.proxy
Source Data XBRL (primary) + HTML (secondary)

Form Type Descriptions

Form Description
DEF 14A Definitive Proxy Statement - standard proxy filing
DEFA14A Definitive Additional Proxy Soliciting Materials
DEFM14A Definitive Proxy Statement relating to Merger or Acquisition
DEF 14A/A Amendment to Definitive Proxy Statement

Data Source Reliability

Source Reliability Description
XBRL High Executive compensation, pay vs performance - standardized across all companies
HTML Medium Beneficial ownership, board info, proposals - requires parsing

Basic Metadata

Property Type Description Example
form str Form type "DEF 14A"
filing_date str Date filed with SEC "2025-01-10"
fiscal_year_end str Fiscal year end date "2024-09-28"
company_name str Company legal name "Apple Inc."
cik str Central Index Key "0000320193"
accession_number str SEC accession number "0001308179-25-000008"

Executive Compensation (XBRL - High Reliability)

Executive compensation data is extracted from XBRL using the SEC's Executive Compensation Disclosure (ECD) taxonomy. This data is highly standardized and available for all companies.

PEO (Principal Executive Officer / CEO)

Property Type XBRL Concept Description Example
peo_name str ecd:PeoName CEO name "Mr. Cook"
peo_total_comp Decimal ecd:PeoTotalCompAmt Total compensation from Summary Compensation Table 74,609,802
peo_actually_paid_comp Decimal ecd:PeoActuallyPaidCompAmt Compensation Actually Paid (CAP) 168,980,568

Non-PEO Named Executive Officers (NEOs)

Property Type XBRL Concept Description Example
neo_avg_total_comp Decimal ecd:NonPeoNeoAvgTotalCompAmt Average NEO total compensation 27,178,896
neo_avg_actually_paid_comp Decimal ecd:NonPeoNeoAvgCompActuallyPaidAmt Average NEO compensation actually paid 58,633,525

Compensation Time Series (5 Years)

The executive_compensation property returns a DataFrame with 5 years of compensation data:

proxy = filing.obj()
comp_df = proxy.executive_compensation  # pd.DataFrame
Column Type Description
fiscal_year_end date End of fiscal year
peo_total_comp Decimal PEO total from SCT
peo_actually_paid_comp Decimal PEO compensation actually paid
neo_avg_total_comp Decimal Non-PEO NEO average total
neo_avg_actually_paid_comp Decimal Non-PEO NEO average CAP

Example Output

# Apple Inc. Executive Compensation (5 years)
fiscal_year_end  peo_total_comp  peo_actually_paid_comp  neo_avg_total_comp  neo_avg_actually_paid
2024-09-28       74,609,802      168,980,568             27,178,896          58,633,525
2023-09-30       63,209,845      106,643,588             26,938,240          48,892,163
2022-09-24       99,420,097      128,833,021             26,929,095          35,842,114
2021-09-25       98,734,394      311,845,801             26,989,456          89,764,231
2020-09-26       14,769,259       4,567,123              23,976,158          12,589,743

Named Executives (Dimensional Data)

Some companies tag individual executive data using dimensional XBRL. When available:

# Check if individual executive data is available
if proxy.has_individual_executive_data:
    executives = proxy.named_executives  # list of executive dicts
    for exec in executives:
        print(f"{exec['name']}: ${exec['actually_paid_comp']:,}")
Property Type Description
has_individual_executive_data bool Whether individual executive dimensions are available
named_executives list[dict] Individual executive compensation details (when available)

Note: Only ~60% of companies use dimensional tagging (AAPL, JPM, JNJ). Others aggregate to PEO vs Non-PEO NEO averages (MSFT, XOM).


Pay vs Performance (XBRL - High Reliability)

Pay vs Performance disclosures correlate executive compensation with company performance metrics.

Primary Metrics

Property Type XBRL Concept Description Example
total_shareholder_return Decimal ecd:TotalShareholderRtnAmt Company TSR (cumulative %) 207.6
peer_group_tsr Decimal ecd:PeerGroupTotalShareholderRtnAmt Peer group TSR 189.3
net_income Decimal us-gaap:NetIncomeLoss Net income (USD) 93,736,000,000

Company-Selected Performance Measure

Property Type XBRL Concept Description Example
company_selected_measure str ecd:CoSelectedMeasureName Company's chosen KPI name "Operating Cash Flow"
company_selected_measure_value Decimal ecd:CoSelectedMeasureAmt KPI value 118,254,000,000

Most Important Performance Measures

Property Type XBRL Concept Description
performance_measures list[str] ecd:MeasureName List of performance measures used

Example values: ["Revenue", "Operating Income", "Free Cash Flow", "Total Shareholder Return"]

Pay vs Performance DataFrame

pvp_df = proxy.pay_vs_performance  # pd.DataFrame
Column Type Description
fiscal_year_end date End of fiscal year
peo_actually_paid_comp Decimal CEO compensation actually paid
neo_avg_actually_paid_comp Decimal NEO average CAP
total_shareholder_return Decimal Company TSR
peer_group_tsr Decimal Peer group TSR
net_income Decimal Net income
company_selected_measure_value Decimal Company KPI value

Governance Indicators (XBRL)

Property Type XBRL Concept Description Example
insider_trading_policy_adopted bool ecd:InsiderTrdPoliciesProcAdoptedFlag Has adopted insider trading policy True

XBRL Concept Reference

Universal Concepts (Present in ALL Companies)

These 25 concepts are available across all sampled DEF 14A filings (100% coverage):

Executive Compensation

Concept Description
ecd:PeoTotalCompAmt PEO total compensation from Summary Compensation Table
ecd:PeoActuallyPaidCompAmt PEO compensation actually paid
ecd:NonPeoNeoAvgTotalCompAmt Non-PEO NEO average total compensation
ecd:NonPeoNeoAvgCompActuallyPaidAmt Non-PEO NEO average compensation actually paid
ecd:AdjToCompAmt Adjustments to compensation (reconciliation)
ecd:PeoName Name of Principal Executive Officer

Performance Metrics

Concept Description
ecd:TotalShareholderRtnAmt Company total shareholder return
ecd:PeerGroupTotalShareholderRtnAmt Peer group total shareholder return
us-gaap:NetIncomeLoss Net income (GAAP)
ecd:CoSelectedMeasureAmt Company-selected performance measure value
ecd:CoSelectedMeasureName Company-selected performance measure name
ecd:MeasureName Names of most important performance measures

Text Blocks and Footnotes

Concept Description
ecd:PvpTableTextBlock Pay vs Performance table text block
ecd:TabularListTableTextBlock Tabular list of performance measures
ecd:NamedExecutiveOfficersFnTextBlock Named executives footnote
ecd:PeerGroupIssuersFnTextBlock Peer group issuers footnote
ecd:AdjToPeoCompFnTextBlock PEO compensation adjustment footnote
ecd:AdjToNonPeoNeoCompFnTextBlock Non-PEO NEO adjustment footnote
ecd:CompActuallyPaidVsTotalShareholderRtnTextBlock CAP vs TSR discussion
ecd:CompActuallyPaidVsNetIncomeTextBlock CAP vs Net Income discussion
ecd:CompActuallyPaidVsCoSelectedMeasureTextBlock CAP vs company measure discussion

Governance

Concept Description
ecd:InsiderTrdPoliciesProcAdoptedFlag Insider trading policy adoption flag

Code Examples

Example 1: Extract Executive Compensation

from edgar import Company

# Get company and filing
company = Company("AAPL")
filing = company.get_filings(form="DEF 14A").latest()

# Get proxy statement object
proxy = filing.obj()

# Access executive compensation
print(f"CEO: {proxy.peo_name}")
print(f"CEO Total Compensation: ${proxy.peo_total_comp:,}")
print(f"CEO Compensation Actually Paid: ${proxy.peo_actually_paid_comp:,}")
print(f"NEO Average Compensation: ${proxy.neo_avg_actually_paid_comp:,}")

Example 2: Pay vs Performance Analysis

from edgar import Company

company = Company("MSFT")
filing = company.get_filings(form="DEF 14A").latest()
proxy = filing.obj()

# Get pay vs performance DataFrame
pvp = proxy.pay_vs_performance

# Calculate pay-for-performance correlation
correlation = pvp['peo_actually_paid_comp'].corr(pvp['total_shareholder_return'])
print(f"CEO Pay vs TSR Correlation: {correlation:.2f}")

# Compare to peer group
print(f"Company TSR: {proxy.total_shareholder_return}%")
print(f"Peer Group TSR: {proxy.peer_group_tsr}%")
print(f"Outperformance: {proxy.total_shareholder_return - proxy.peer_group_tsr:.1f}%")

Example 3: Governance Check

from edgar import Company

company = Company("JPM")
filing = company.get_filings(form="DEF 14A").latest()
proxy = filing.obj()

# Check governance indicators
if proxy.insider_trading_policy_adopted:
    print("Insider Trading Policy: Adopted")
else:
    print("Insider Trading Policy: Not Adopted (flag for review)")

# List performance measures used
print("Performance Measures:")
for measure in proxy.performance_measures:
    print(f"  - {measure}")

Example 4: Multi-Company Comparison

from edgar import Company
import pandas as pd

tickers = ["AAPL", "MSFT", "GOOGL", "META", "AMZN"]
data = []

for ticker in tickers:
    company = Company(ticker)
    filing = company.get_filings(form="DEF 14A").latest()
    proxy = filing.obj()

    data.append({
        'company': company.name,
        'ceo': proxy.peo_name,
        'ceo_total_comp': proxy.peo_total_comp,
        'ceo_actually_paid': proxy.peo_actually_paid_comp,
        'tsr': proxy.total_shareholder_return,
        'peer_tsr': proxy.peer_group_tsr
    })

comparison_df = pd.DataFrame(data)
print(comparison_df.to_string())

Example 5: Access Board and Director Information

The ProxyStatement class focuses on XBRL-based executive compensation data. Board composition, director details, and shareholder proposals live in the HTML body of the filing and are not yet extracted into structured properties. However, you can access this information today using the Filing object's built-in search and HTML capabilities.

from edgar import Company

# Get a DEF 14A filing
company = Company("AAPL")
filing = company.get_filings(form="DEF 14A").latest()

# Search the filing HTML for board-related sections
results = filing.search("board of directors")
for section in results[:3]:
    print(section[:200])  # Preview matching sections
# Search for specific governance topics
director_sections = filing.search("director nominees")
ownership_sections = filing.search("beneficial ownership")
proposal_sections = filing.search("proposal")
audit_sections = filing.search("audit fees")
# Get the full HTML for manual inspection or custom parsing
html_content = filing.html()

# Or access the filing document directly
doc = filing.document()

Note: Board composition, director bios, beneficial ownership tables, and shareholder proposals are available in the filing HTML but require custom parsing. Structured Director and Proposal objects are planned for a future release. See the HTML-Based Data section below for details on what data is available and extraction patterns.


View Design Recommendations

Primary View Components

  1. Header Section
  2. Company name (prominent)
  3. Form type with amendment indicator
  4. Filing date and fiscal year end
  5. Annual meeting date (if available)

  6. Compensation Dashboard

  7. CEO compensation card (Total SCT vs Actually Paid)
  8. NEO average compensation card
  9. 5-year trend sparkline or chart
  10. Year-over-year change indicators

  11. Pay vs Performance Panel

  12. TSR comparison chart (company vs peer group)
  13. Compensation vs TSR correlation visualization
  14. Net income trend overlay
  15. Company-selected performance measure

  16. Governance Indicators

  17. Insider trading policy status badge
  18. Performance measures list

  19. Key Metrics Cards

  20. Total Shareholder Return
  21. Peer Group TSR
  22. Net Income
  23. Company KPI with label

Data Priority for Display

Priority Data Reason
High CEO compensation (both SCT and CAP) Primary user interest
High Total Shareholder Return Key performance metric
High Peer group comparison Benchmark context
Medium NEO average compensation Executive team context
Medium Net income Financial performance
Medium Company-selected measure Company's chosen KPI
Medium 5-year compensation trends Historical context
Low Adjustment details Technical reconciliation
Low Footnote text blocks Reference material

Value Formatting

Data Type Format Example
Compensation Currency with commas $168,980,568
Large values (>$1B) Abbreviated $93.7B
TSR Percentage with 1 decimal 207.6%
Year-over-year change Signed percentage +12.5% or -8.3%

Visual Indicators (Suggested)

Condition Visual Treatment
Amendment (/A) Yellow "Amendment" badge
TSR > Peer TSR Green upward arrow
TSR < Peer TSR Red downward arrow
Insider policy adopted Green checkmark
Insider policy not adopted Red warning icon
Compensation increase >25% YoY Orange highlight
Compensation decrease Blue highlight

Compensation Card Layout

+----------------------------------+
|  CEO Compensation                |
|  Mr. Tim Cook                    |
+----------------------------------+
|  Summary Comp Table              |
|  $74,609,802                     |
|  +18.0% vs prior year            |
+----------------------------------+
|  Compensation Actually Paid      |
|  $168,980,568                    |
|  +58.4% vs prior year            |
+----------------------------------+

Example Data Structure

{
    # Metadata
    "form": "DEF 14A",
    "filing_date": "2025-01-10",
    "fiscal_year_end": "2024-09-28",
    "company_name": "Apple Inc.",
    "cik": "0000320193",
    "accession_number": "0001308179-25-000008",

    # Executive Compensation
    "peo_name": "Mr. Cook",
    "peo_total_comp": 74609802,
    "peo_actually_paid_comp": 168980568,
    "neo_avg_total_comp": 27178896,
    "neo_avg_actually_paid_comp": 58633525,

    # Pay vs Performance
    "total_shareholder_return": 207.6,
    "peer_group_tsr": 189.3,
    "net_income": 93736000000,
    "company_selected_measure": "Operating Cash Flow",
    "company_selected_measure_value": 118254000000,

    # Performance Measures
    "performance_measures": [
        "Net Sales",
        "Operating Income",
        "Total Shareholder Return",
        "Operating Cash Flow"
    ],

    # Governance
    "insider_trading_policy_adopted": True,

    # Named Executives (when dimensional data available)
    "has_individual_executive_data": True,
    "named_executives": [
        {
            "id": "aapl:CookMember",
            "name": "Mr. Cook",
            "role": "PEO",
            "total_comp": 74609802,
            "actually_paid_comp": 168980568
        },
        {
            "id": "aapl:MaestriMember",
            "name": "Luca Maestri",
            "role": "NEO",
            "total_comp": 27178896,
            "actually_paid_comp": 58633525
        }
    ],

    # Time Series (5 years)
    "executive_compensation": [
        {
            "fiscal_year_end": "2024-09-28",
            "peo_total_comp": 74609802,
            "peo_actually_paid_comp": 168980568,
            "neo_avg_total_comp": 27178896,
            "neo_avg_actually_paid_comp": 58633525
        },
        {
            "fiscal_year_end": "2023-09-30",
            "peo_total_comp": 63209845,
            "peo_actually_paid_comp": 106643588,
            "neo_avg_total_comp": 26938240,
            "neo_avg_actually_paid_comp": 48892163
        }
        # ... 3 more years
    ],

    # Pay vs Performance Series
    "pay_vs_performance": [
        {
            "fiscal_year_end": "2024-09-28",
            "peo_actually_paid_comp": 168980568,
            "neo_avg_actually_paid_comp": 58633525,
            "total_shareholder_return": 207.6,
            "peer_group_tsr": 189.3,
            "net_income": 93736000000
        }
        # ... more years
    ]
}

HTML-Based Data (Future Features)

The following data is available in DEF 14A HTML sections but not yet extracted into structured properties. You can access these sections today using filing.search() to find relevant content.

Beneficial Ownership

Section Description
Principal Shareholders Shareholders owning >5% of shares
Director/Executive Ownership Shares owned by insiders

How to access today:

results = filing.search("beneficial ownership")
# or
results = filing.search("security ownership")

Board of Directors

Data Description
Director Names Full list of board members
Director Ages Ages of directors
Director Tenure Years on board
Independence Status Independent vs non-independent
Committee Memberships Audit, Compensation, Governance

How to access today:

results = filing.search("board of directors")
# or
results = filing.search("director nominees")

Director Compensation

Data Description
Director Fees Annual retainer and meeting fees
Stock Awards Equity compensation
Total Compensation Sum of all compensation

How to access today:

results = filing.search("director compensation")

Voting Proposals

Proposal Type Description
Election of Directors Board member elections
Ratification of Auditors Audit firm approval
Say-on-Pay Executive compensation advisory vote
Shareholder Proposals Proposals submitted by shareholders
Equity Plan Amendments Stock compensation plan changes

How to access today:

results = filing.search("proposal")

Audit Information

Data Description
Auditor Name Independent auditor firm
Audit Fees Fees for audit services
Tax Fees Fees for tax services
Other Fees Other professional fees

How to access today:

results = filing.search("audit fees")


Notes for Implementation

  1. XBRL Namespace: The primary namespace for proxy data is ecd: (Executive Compensation Disclosure), introduced by SEC in 2022 for fiscal years ending on or after December 16, 2022.

  2. Dimensional Tagging Variation:

  3. ~60% of companies tag individual executive data using dim_ecd_IndividualAxis
  4. ~40% only provide aggregate data (PEO and Non-PEO NEO averages)
  5. Always check has_individual_executive_data before accessing individual executives

  6. Time Series Data: Pay vs Performance tables include 5 years of historical data per SEC requirements. This enables robust trend analysis.

  7. Compensation Actually Paid (CAP): This SEC-mandated metric differs from Summary Compensation Table totals due to adjustments for:

  8. Change in pension value
  9. Stock/option awards fair value changes
  10. Vesting date fair values

  11. Company-Selected Measure: Each company chooses one performance measure they consider most important. Common choices include:

  12. Revenue or Net Sales
  13. Operating Income
  14. Free Cash Flow
  15. Adjusted EBITDA
  16. Return on Invested Capital

  17. Peer Group: Companies define their own peer groups for TSR comparison. The peer group composition is disclosed in the filing but not structured in XBRL.

  18. Amendment Handling: DEF 14A/A filings contain corrections or updates. Always use the most recent filing for a given fiscal year.

  19. Form Variants:

  20. DEF 14A: Standard proxy statement
  21. DEFA14A: Additional soliciting materials (may have limited data)
  22. DEFM14A: Merger-related proxy (may have different structure)

  23. Fiscal Year Alignment: Match compensation periods with company fiscal year ends, which vary by company (e.g., Apple uses September, Microsoft uses June).

  24. Large Cap Coverage: XBRL data is highly reliable for S&P 500 companies. Smaller companies may have less complete tagging.